【问题标题】:cuMemGetInfo() and size_t limitationcuMemGetInfo() 和 size_t 限制
【发布时间】:2014-11-25 10:31:53
【问题描述】:

借助函数 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 是指向 unsigned int 的指针(在 4 字节上)。

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

谢谢

【问题讨论】:

  • 设置你的主机代码编译为 64 位,你应该得到一个 64 位的size_t
  • 哦,我记得因为 Qt、CUDA 和 Visual Studio 之间的兼容性,我无法运行 64 位应用程序。有什么办法可以解决吗?
  • @ParkYoung-Bae 如果您想按照这些思路提供答案,我会赞成。将应用程序编译为 64 位是访问超过 4GB 边界的 GPU 内存的唯一方法

标签: memory cuda unsigned size-t tesla


【解决方案1】:

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

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

你在 cmets 里说:

由于 Qt、CUDA 和 Visual Studio 之间的兼容性,我无法运行 64 位应用程序。有什么办法可以解决吗?

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

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

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 2012-12-13
    • 2016-05-13
    • 2020-05-06
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多