cuMemGetInfo() and size_t limitation



我想知道我的GPU设备上的可用内存和总内存,这要归功于函数cuMemGetInfo()

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

我得到结果:

Free memory : 4095 MB
Total memory : 4095 MB

我正在开发特斯拉C2070,在64位Windows 7上具有6GB内存。但是,我的应用程序以 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指向无符号 int 的指针(在 4 字节上)。

所以这是我的问题。是否可以更改size_t的定义以指向无符号长整型?

谢谢

编译 32 位目标时,size_t通常是 32 位。如果你想得到一个 64 位size_t ,只需将编译器设置为面向 64 位平台。

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

你在评论中说:

我无法运行64位应用程序,因为Qt,CUDA和Visual Studio之间的兼容性。有什么办法可以解决这个问题吗?

据我所知,这是不可能的。如果您构建 32 位,那么您将链接到 32 位版本的 cuMemGetInfo ,它适用于 32 位size_t 。这是无法回避的。

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

最新更新