Memory 我的设备的全局内存大小是多少?

Memory 我的设备的全局内存大小是多少?,memory,cuda,Memory,Cuda,我有特斯拉C2075。我想知道全局内存大小。所以我运行了deviceQuerySDK示例。它报告我4GB的全局内存,但当我运行nvidia smi时,它报告6GB的全局内存。为什么会出现这种不匹配?是否有专门用于操作系统的内存? /设备查询报告: CUDA设备查询(运行时API)版本(CUDART静态链接) 找到1个支持CUDA的设备 设备0:“特斯拉C2075” CUDA驱动程序版本/运行时版本5.0/5.0 CUDA能力主要/次要版本号:2.0 全局内存总量:4096 MB(42949672

我有特斯拉C2075。我想知道全局内存大小。所以我运行了
deviceQuery
SDK示例。它报告我4GB的全局内存,但当我运行nvidia smi时,它报告6GB的全局内存。为什么会出现这种不匹配?是否有专门用于操作系统的内存? /设备查询报告:

CUDA设备查询(运行时API)版本(CUDART静态链接)

找到1个支持CUDA的设备

设备0:“特斯拉C2075”
CUDA驱动程序版本/运行时版本5.0/5.0
CUDA能力主要/次要版本号:2.0
全局内存总量:4096 MB(4294967295字节)

nvidia smi-q输出:

内存使用率
总数:5375MB
已使用:39MB
免费:5336MB


您运行的是32位Linux,因此进程只能使用4GB的设备内存


该设备仍有6GB,因此如果两个进程共享该设备,则它们可以占用全部6GB,但每个进程只能使用4GB。

是否确实报告了4GB?启用ECC后,我预计6GB会有所减少(准确地说是12.5%),但不会减少2GB。我自己不使用32位,因此无法验证,但我想知道这是否是32位操作系统的问题。如中所述,它只能处理4GB的全局内存,所以这就是它报告的内容。不一定是可用的物理量。哦…可以。。不确定CUDA中主机和驱动程序/设备之间的指针大小是否始终相同,因此如果您有32位操作系统,您的GPU也应该使用32位指针。我想这就是问题所在。所以如果我想访问GPU中的所有内存,那么我应该使用64位系统吗?如果你想从单个进程访问GPU中的所有内存,那么是的。32位指针最多可以指向4G字节,因此很容易理解为什么需要更大的指针才能寻址更大的内存。同样的情况也适用于CPU,每个32位进程都有4GB的限制(实际上更少,因为操作系统需要一些)。@Tom,你说的是CPU的情况,但很可能CUDA的驱动程序支持需要一个64位内核才能访问全部64位的视频内存。@Archeasoftware:我想你误解了,因为这正是我的观点:如果你有一个32位的应用程序,你只能处理4GB的内存。如果你有一个64位的应用程序,那么你不仅可以寻址所有的GPU内存,而且还可以得到UVA,这意味着GPU和CPU指针位于不同的空间,你可以根据指针值确定数据的位置。汤姆,为什么你认为CUDA驱动程序不需要64位内核来支持内存大于4GB的GPU板?这与您在评论中提出的任何约束条件都大不相同,作为CUDA 64位支持的最初实现者,如果需要64位内核支持,我一点也不会感到惊讶。我还没有试过在32位内核上运行6G板,在看到它之前我不会相信它能工作。