Come posso leggere la larghezza di banda in uso tramite il bus PCIe?
Domanda
Sto lavorando su un'applicazione streaming media che spinge molti dati alla scheda grafica all'avvio. La CPU sta facendo molto poco nel momento in cui viene spinto i dati, si gira a vuoto insieme a vicino l'utilizzo zero per cento.
Mi piacerebbe monitorare quali macchine lotta a spingere i dati iniziali, e quali può far fronte, in modo che io possa arrivare a un minimo consigliato specifiche per il nostro hardware clienti.
Ho trovato che i PC con PCIe 1.1 x16 slot lotta con i dati iniziali spinte sopra la scheda grafica.
Il mio PC di sviluppo ha uno slot x16 PCIe 2.0, e non ha problemi a far fronte con la grande quantità di dati che vengono inizialmente spinto alla scheda grafica.
Ho bisogno numeri per dimostrare (o confutare) il mio punto.
Quello che mi piacerebbe è quello di essere in grado di determinare:
Quale tipo di slot è la scheda grafica? Qual è la velocità di quello slot? nome della scheda gfx Versione driver della scheda gfx
Ma, soprattutto, il flusso di dati sullo slot PCIe - per esempio se posso dimostrare che il bus PCIe viene raggiunto il massimo di dati, posso indicare che il collo della bottiglia.
So che la velocità della memoria di sistema è anche un fattore qui, ad esempio, i dati vengono trasferiti dalla RAM, attraverso il bus PCIe alla scheda grafica, quindi c'è un modo per determinare la velocità della memoria di sistema anche?
Infine, scrivo in C ++ non gestito, in modo che accede NET librerie non è un'opzione.
Soluzione
Non si ottiene errori spingendo le vostre enormi quantità di dati, o stai "semplicemente" interessati con bassa velocità?
Dubito che ci sia un modo semplice per monitorare l'utilizzo della larghezza di banda PCI-e, se è possibile a tutti. Ma dovrebbe essere possibile interrogare digitare il bus la scheda video è collegato al tramite WMI e / o SetupAPI -. Non ho esperienza personale o link utili per entrambi, mi dispiace
Altri suggerimenti
Per le GPU Nvidia, si può provare a utilizzare NvAPI_GPU_GetDynamicPstatesInfoEx
:
Nvidia, attraverso il suo conducente GeForce, espone un'interfaccia di programmazione ( "NVAPI") che, tra le altre cose, consente di raccogliere le prestazioni misure. Per il tecnicamente inclinato, qui è pertinente sezione nel file di intestazione nvapi.h:
Nome funzione: NvAPI_GPU_GetDynamicPstatesInfoEx
DESCRIZIONE: Questa API recupera il NV_GPU_DYNAMIC_PSTATES_INFO_EX strutturare per la GPU fisico specificato. informazioni di ogni dominio è indicizzato nella matrice. Ad esempio:
- pDynamicPstatesInfo-> esecuzione [NVAPI_GPU_UTILIZATION_DOMAIN_GPU] detiene le informazioni per il dominio GPU. Ci sono attualmente quattro domini per cui utilizzazione GPU e dinamici soglie P-state possono essere ritirato: motore grafico (GPU), frame buffer (FB), motore video (VID), e interfaccia bus (BUS).
Al di là di questa intestazione commento, funzionalità specifiche del API non è documentata. Le informazioni qui di seguito è la nostra migliore interpretazione del suo lavorazioni, anche se si basa su un sacco di congetture.
- Il motore grafico ( "GPU") metrica dovrebbe essere il collo di bottiglia nella maggior parte dei giochi. Se non vedi questa in corrispondenza o vicino al 100%, qualcosa altro (come la CPU o il sottosistema di memoria) è limitante prestazioni.
- Il frame buffer ( "FB") metrica è interessante, se funziona come previsto. Dal nome, che ci si aspetta per misurare memoria grafica utilizzazione (la percentuale di memoria utilizzata). Che non è di cosa si tratta, anche se. Sembra, piuttosto, di essere l'utilizzo del controller di memoria in percentuale. Se questo è corretto, sarebbe misurare effettivamente essere la larghezza di banda usato dal controllore, che altrimenti non è disponibile come misurazione qualsiasi altro modo.
- Non siamo come interessato al motore video ( "VID"); non è generalmente utilizzato nel gioco, e registra un piatto 0% tipicamente. faresti vedere solo la mossa quadrante se stai codifica video attraverso ShadowPlay o lo streaming ad uno scudo.
- L'interfaccia bus ( "BUS") metrica si riferisce alla utilizzazione del controller PCIe , di nuovo, in percentuale. La misura corrispondente, che è possibile rintracciare in EVGA PrecisionX e MSI Afterburner, si chiama "GPU BUS Usage".
Abbiamo chiesto Nvidia di far luce sul funzionamento interno di NVAPI. Suo risposta ha confermato che la memoria misure metriche grafica FB l'utilizzo della banda, ma Nvidia ha respinto il BUS metrica come "considerato di essere inaffidabile e quindi non utilizzato internamente".
Abbiamo chiesto di AMD se avesse qualsiasi API o una funzione che ha permesso per simili misure. Dopo la verifica, i rappresentanti aziendali interne hanno confermato che non l'hanno fatto. Per quanto ci piacerebbe, siamo in grado di condurre test simili su hardware AMD.