2012-09-24 2 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입니다 밝혀합니다. 나는 그것이 너무 작다는 느낌을 받았다 (나는 Tesla M2070을 가지고있다).

+2

다중 프로세서 당 최대 스레드 수는 "동시에 실행중인"스레드 수의 상한입니다. 다른 제한 요소는 일반적으로 숫자를 더 제한합니다. 이 값은 동시에 실행될 수있는 스레드 수에 영향을 미치지 않으며 최적의 성능을 위해 필요한 스레드 수를 찾는 데별로 유용하지 않습니다. –

답변

3

올바른 검사 방법입니다. NVIDIA cuda SDK 샘플을 확인하면 SDK의 "Device query"샘플에서 잘 정의됩니다.

관련 문제