2012-09-24 49 views
2

不知道找到GPU最大可用線程數的最佳方法是什麼。 我有以下代碼:如何查找CUDA中最大可用線程數?

int deviceCount, device; 
int gpuDeviceCount = 0; 
struct cudaDeviceProp properties; 
cudaError_t cudaResultCode = cudaGetDeviceCount(&deviceCount); 
if (cudaResultCode != cudaSuccess) 
    deviceCount = 0; 
/* machines with no GPUs can still report one emulation device */ 
for (device = 0; device < deviceCount; ++device) { 
    cudaGetDeviceProperties(&properties, device); 
    if (properties.major != 9999) /* 9999 means emulation only */ 
    if (device==0) 
    { 
      printf("multiProcessorCount %d\n",properties.multiProcessorCount); 
      printf("maxThreadsPerMultiProcessor %d\n",properties.maxThreadsPerMultiProcessor); 
    } 
} 

它返回:

multiProcessorCount 14 
maxThreadsPerMultiProcessor 1536 

原來的總數是14 * 1536 = 21504。我感覺它太小了(我有一個特斯拉M2070)。

+2

每個多處理器的最大線程數是多少個線程可以同時處於「正在運行」的上限。其他限制因素通常會進一步限制數量。此值不會影響可同時啓動多少個線程,並且找出實現最佳性能所需的線程數量並不是非常有用。 –

回答

3

你的檢查方式是正確的。 您可以檢查NVIDIA cuda SDK示例,SDK中的「設備查詢」示例對其進行了很好的定義