【发布时间】:2015-03-03 22:34:04
【问题描述】:
打电话时
cudaError_t cuda_error;
int device;
cuda_error = cudaGetDevice(&device);
assert(cudaSuccess == cuda_error);
cudaDeviceProp prop;
cuda_error = cudaGetDeviceProperties(&prop, device);
assert(cudaSuccess == cuda_error);
在带有
的 GTX 970 上- cuda 驱动程序 6.5.19,
- 显示驱动程序版本 343.98,
- Win7 Professional SP1 x64),
用
编译-gencode=arch=compute_52,code="compute_52,sm_52"
我得到以下内存属性:
prop.totalGlobalMem == 0
和
prop.sharedMemPerBlock == 49152 (48k).
我预计总内存约为 4GB 和每块 96kB 的共享内存,因为 GTX 970 使用 GM204。
我错过了什么吗?
提前感谢您的支持,
米歇尔
【问题讨论】:
-
GeForce GTX980 和 GTX970 具有支持这些特定 GPU 的 CUDA 6.5 工具包,其中推荐的最新 cuda 驱动程序是 v6.5.32。
-
您是在 Visual Studio 中构建它吗?它是VS的快速版本吗?您是在构建 win32 项目还是 x64 项目?如果您将其构建为 win32 项目,则 4GB 不会是 32 位数量中通常可报告的数字,它可能显示为零。关于共享内存,sm_52 设备每个 SM(即每个多处理器)有 96KB 共享内存,但每个块只有 48KB 共享内存可用。所以 48KB 的数字是正确的。
-
@robert crovella:我正在从命令行构建,使用 VS 2012 Ultimate amd64,所以寻址 4GB 应该没有问题。我主要关心的是(或曾经是)每个块的共享内存,您已经回答了这个问题。如果您将其发布为答案,我会接受。
-
如果您在命令行上传递类似
--machine 32的内容,您将构建一个 32 位应用程序,并且有 4GB 的限制。 -
打印出来怎么样?你如何打印出
prop.totalGlobalMem变量?您是否将其作为 64 位数量处理?否则,我不知道为什么它可能会报告 0。您还没有提供完整的 MCVE,所以只是猜测。