2015-09-11 38 views
7

Sto cercando una funzione che contenga il numero di core del mio dispositivo cuda. So che ogni microprocessore ha nuclei specifici e il mio dispositivo cuda ha 2 microprocessori.Come posso ottenere il numero di core nel dispositivo cuda?

Ho cercato molto per trovare una funzione di proprietà che conta il numero di core per microprocessore ma non ho potuto. Io uso il codice qui sotto ma ho ancora bisogno di un numero di core?

  • CUDA 7.0
  • linguaggio di programmazione C
  • Visual Studio 2013

Codice:

void printDevProp(cudaDeviceProp devProp) 
{ printf("%s\n", devProp.name); 
printf("Major revision number:   %d\n", devProp.major); 
printf("Minor revision number:   %d\n", devProp.minor); 
printf("Total global memory:   %u", devProp.totalGlobalMem); 
printf(" bytes\n"); 
printf("Number of multiprocessors:  %d\n", devProp.multiProcessorCount); 
printf("Total amount of shared memory per block: %u\n",devProp.sharedMemPerBlock); 
printf("Total registers per block:  %d\n", devProp.regsPerBlock); 
printf("Warp size:      %d\n", devProp.warpSize); 
printf("Maximum memory pitch:   %u\n", devProp.memPitch); 
printf("Total amount of constant memory:   %u\n", devProp.totalConstMem); 
return; 
} 
+0

Ho trovato un collegamento per cuda 5.0 + visual studio 2012 con progetti di esempio [cuda example] (http://code.msdn.microsoft.com/windowsdesktop/CUDA-50-and-Visual-Studio-20e71aa1), e un collegamento per cuda 7.0 + visual studio [cuda 7.0 per iniziare] (http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-microsoft-windows/#axzz3lScBd2Bm). – rcgldr

risposta

11

I core per multiprocessore è l'unico pezzo "mancante" dei dati. Che i dati non sono stati forniti direttamente nella struttura cudaDeviceProp, ma può essere dedotto basato su published data e more published data dai devProp.major e devProp.minor voci, che insieme costituiscono la capacità di elaborazione CUDA del dispositivo.

Qualcosa del genere dovrebbe funzionare:

int getSPcores(cudaDeviceProp devProp) 
{ 
    int cores = 0; 
    int mp = devProp.multiProcessorCount; 
    switch (devProp.major){ 
    case 2: // Fermi 
     if (devProp.minor == 1) cores = mp * 48; 
     else cores = mp * 32; 
     break; 
    case 3: // Kepler 
     cores = mp * 192; 
     break; 
    case 5: // Maxwell 
     cores = mp * 128; 
     break; 
    case 6: // Pascal 
     if (devProp.minor == 1) cores = mp * 128; 
     else if (devProp.minor == 0) cores = mp * 64; 
     else printf("Unknown device type\n"); 
     break; 
    case 7: // Volta 
     if (devProp.minor == 0) cores = mp * 64; 
     else printf("Unknown device type\n"); 
     break; 
    default: 
     printf("Unknown device type\n"); 
     break; 
     } 
    return cores; 
} 

(codificato in browser)

"core" è un po 'un termine di marketing. La connotazione più comune secondo me è quella di equipararlo con le unità SP nella SM. Questo è il significato che ho dimostrato qui. Ho omesso anche i dispositivi cc 1.x, poiché questi tipi di dispositivi non sono più supportati in CUDA 7.0 e CUDA 7.5

+0

il mio dispositivo è GeForce GT 740M e ha 384 CUDA Cores ma qual è la funzione di query corretta per stampare i core con altre proprietà sopra? – Alsphere

+0

Non esiste una proprietà CUDA core. Devi usare il metodo che ho descritto per calcolarlo. –

+0

ok capito, molte grazie – Alsphere