1

借助函数 cuMemGetInfo(),我想知道我的 GPU 设备上的可用内存和总内存

// ----- Before any variable initialization -----
size_t free;
size_t total;
CUresult result=cuMemGetInfo(&free,&total);

我得到了结果:

Free memory : 4095 MB
Total memory : 4095 MB

我正在使用 64 位 Windows 7 上具有 6GB 内存的 Tesla C2070。但是,我的应用程序以 32 位运行。我的代码应该给我类似的东西:

Free memory : 5376 MB
Total memory : 5376 MB // values given by the deviceQuery.exe example of CUDA

I 4095*1024*1024 = 4293918720 约为 2^32(四舍五入后)。实际上, size_t 是一个指向无符号整数的指针(在 4 个字节上)。

所以这是我的问题。例如,是否可以更改 size_t 的定义以指向 unsigned long ?

谢谢

4

1 回答 1

2

size_t为 32 位目标编译时通常为 32 位。如果您想获得 64 位size_t,只需将编译器设置为针对 64 位平台。

如果您使用的是 Visual Studio 构建链,这里是有关该主题的文档。如果您使用的是 Qt 构建链,我不知道它是如何完成的,但它肯定是可行的。

你在评论中说:

由于 Qt、CUDA 和 Visual Studio 之间的兼容性,我无法运行 64 位应用程序。有没有办法解决这个问题?

据我所知,这是不可能的。如果您为 32 位构建,那么您将链接到 32 位版本cuMemGetInfo,该版本适用于 32 位size_t。没有办法解决这个问题。

但是,如果有记忆,我过去曾使用 VS2012、CUDA 6 和 Qt 4.8 构建的 64 位应用程序,因此应该可以将您的工具链设置为使用 64 位。

于 2014-11-25T11:03:56.153 回答