2014-11-25 25 views
1

我想知道我的GPU设备感谢功能cuMemGetInfo()cuMemGetInfo(),并为size_t限制

// ----- 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内存的特斯拉C2070。但是,我的应用程序运行在32位。我的代码应该给我这样的:

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

我4095 * 1024 * 1024 = 4293918720大约是2^32(四舍五入后)。的确,size_t是一个指向unsigned int(4字节)的指针。

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

感谢

+1

设置您的主机代码为64位编译,你应该得到一个64位'size_t'。 – 2014-11-25 10:34:14

+0

哦,我记得由于Qt,CUDA和Visual Studio之间的兼容性,我无法运行64位应用程序。有什么办法可以解决这个问题吗? – 2014-11-25 10:48:12

+1

@ ParkYoung-Bae如果你想提供一个答案,我会喜欢的话。将该应用程序编译为64位是*唯一方式*来访问超出4GB边界的GPU内存。 – 2014-11-25 10:49:15

回答

2

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

如果您使用Visual Studio构建链,here is the documentation on the topic。如果你使用的是Qt构建链,我不知道它是如何完成的,但它肯定是可行的。

你说在注释:

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

据我所知,这是不可能的。如果你构建了32位,那么你将链接到32位版本的cuMemGetInfo,它与32位size_t一起工作。没有得到解决。然而,如果内存服务,我已经在过去使用由VS2012,CUDA 6和Qt 4.8构建的64位应用程序,所以应该可以将工具链设置为使用64位。