2015-09-11 17 views
7

Cuda aygıtımın çekirdek sayısını belirten bir işlev arıyorum. Her bir mikroişlemcinin belirli çekirdeklere sahip olduğunu biliyorum ve cuda aygıtımın 2 mikroişlemcisi var.Cuda cihazında Çekirdek sayısını nasıl alabilirim?

Mikroişlemci başına çekirdek sayısını belirleyen bir özellik işlevi bulmak için çok aradım ama yapamadım. Aşağıdaki kodu kullanıyorum ama hala çekirdek sayısına ihtiyacım var?

  • cuda 7.0
  • program dili C
  • görsel stüdyo 2013

Kodu: çok işlemcili başına

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

Örnek projelerle cuda 5.0 + visual studio 2012 için bir bağlantı buldum [cuda örneği] (http://code.msdn.microsoft.com/windowsdesktop/CUDA-50-and-Visual-Studio-20e71aa1) ve cuda 7.0 + görsel stüdyosu için bir bağlantı [cuda 7.0 başlangıç] (http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-microsoft-windows/#axzz3lScBd2Bm). – rcgldr

cevap

11

çekirdek verilerin sadece "eksik" parçadır. Bu veriler cudaDeviceProp yapısında doğrudan sağlanmazsa, ama birlikte cihazın CUDA hesaplama yeteneği oluşturan devProp.major ve devProp.minor girişleri, gelen published data ve more published data temel alarak elde edilebilir. Böyle

şey çalışmalıdır:

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; 
} 

(tarayıcıda kodlu)

"çekirdekler" bir pazarlama teriminin bir parçasıdır. Benim düşüncemdeki en yaygın çağrışım onu ​​SM'deki SP birimleriyle eşitlemek. Burada gösterdiğim anlam budur. Bu cihaz türleri artık CUDA 7.0 ve CUDA 7.5

+0

Cihazım GeForce GT 740M ve 384 CUDA Çekirdeği var ama yukarıdaki diğer özellikleri ile cuda çekirdeği yazdırmak için doğru sorgu işlevi nedir? – Alsphere

+0

CUDA çekirdeği özelliği yok. Bunu hesaplamak için anlattığım yöntemi kullanmalısın. –

+0

tamam, çok teşekkürler – Alsphere

0

desteklenir gibi ben de Belki bu biraz daha yardımcı olabilir, bundan cc 1.x aygıtları ihmal ettik.

https://devtalk.nvidia.com/default/topic/470848/cuda-programming-and-performance/what-39-s-the-proper-way-to-detect-sp-cuda-cores-count-per-sm-/post/4414371/#4414371

"rutin _ConvertSMVer2Cores içeren bir kütüphane helper_cuda.h vardır (int büyük, minör int) çekirdek sayısını (akış işlemcisi) işlem kapasite düzeyini GPU'nuzun alır ve döndürür her bir SM veya SMX'de " - gönderiden.