GPU で使用可能な最大スレッド数を見つける最善の方法がわかりません。次のコードがあります。
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を持っています)。