Ogni dispositivo GPU (AMD, NVidea o qualsiasi altro) è suddiviso in più unità di elaborazione (MultiProcessors), ognuna delle quali ha un numero fisso di core (VertexShaders/StreamProcessors). Quindi, uno ha processori simultanei da computare con (Compute Units) x (VertexShaders/compute unit)
, ma c'è solo una piccola quantità fissa di memoria __local
(di solito 16KB o 32KB) disponibile per MultiProcessor. Quindi, il numero esatto di questi multiprocessore conta.Dimensioni della memoria locale OpenCL e numero di unità di calcolo
Ora le mie domande:
- (a) Come posso sapere il numero di multiprocessori su un dispositivo? È lo stesso di
CL_DEVICE_MAX_COMPUTE_UNITS
? Posso dedurlo dai fogli delle specifiche come http://en.wikipedia.org/wiki/Comparison_of_AMD_graphics_processing_units? - (b) Come posso sapere quanto è disponibile la memoria
__local
per MP su una GPU prima dell'acquisto? Naturalmente posso richiedereCL_DEVICE_LOCAL_MEM_SIZE
su un computer che lo esegue, ma non vedo come posso dedurlo anche da un singolo foglio di specifiche dettagliate come http://www.amd.com/us/products/desktop/graphics/7000/7970/Pages/radeon-7970.aspx#3? - (c) Qual è la scheda con il più grande
CL_DEVICE_LOCAL_MEM_SIZE
? Il prezzo non ha molta importanza, ma 64KB (o più grande) darebbe un chiaro vantaggio per l'applicazione che sto scrivendo, dal momento che il mio algoritmo è completamente parallelizzabile, ma anche ad alta intensità di memoria con pattern di accesso casuale all'interno di ogni MP (iterando oltre i bordi di grafici).
Provare a eseguire la query del dispositivo negli esempi forniti da AMD/NVIDIA nell'SDK. Se vuoi conoscere le query sul dispositivo di un dispositivo specifico, ci sono molti che lo hanno messo online. – nouveau