申请以下大的内存,失败,gpu不运行,为什么呢? int size1;
size1=512512512sizeof(int);
int cd;
cudaMalloc((void**)&cd, size1);
我也发现了类似的问题,在2G的显存上调用cudaMalloc申请1.4G的显存,会申请失败,但如果先申请1.3G或者1.2G,再申请0.3G就可以成功。是什么原因?是显存中 不存在 连续的1.4G线性空间?
楼主您好,普通卡分配显存受到限制:
您一次最大可以分配的数量 = (您的内存总数 - 0.5GB) / 2
例如:
贵卡有2GB的显存,但是您只有3GB的内存,
那么您最多一次能分配: (3 - 0.5) / 2 = 1.25GB
您可以购买tesla品牌的卡,它们的TCC驱动模式无此限制,
将带给您完美的分配显存体验。
感谢来访。
感谢回复,一次最大可以分配的数量 = (您的内存总数 - 0.5GB) / 2 是官方给出的,还是您根据经验总结的。我的配置是win7 64位,8G内存,2G的显存,但还是 在2G的显存上调用cudaMalloc申请1.4G的显存,会申请失败,但如果先申请1.3G或者1.2G,再申请0.3G就可以成功。是不是这个公式有其他的计算分支?
楼主您好,这个公式是NVIDIA原厂支持ZHW同学给出的,但也不排除我记错了。
请问您的进程是32bit的还是64bit的?
如果是前者,我建议您在VS的configuration manger里将项目改成x64, 并重新编译运行下,
看看问题是否消失。
感谢来访。
我的进程是64bit的,仍然会出现这样的问题,目前是通过两次申请来做的。编程中使用的是最新的CUDA5.5 tooolkit,LS有什么建议?
我没有更好的建议,如果进程是64bit的,同时内存足够,却只能分配1.xGB, 那么可能是其他未公开的原因导致的,建议您咨询下原厂支持看看能否说明。
關於版主所言的公式我仔細閱讀CUDA_Toolkit_Release_Notes.pdf看到nvidia官方發布的訊息從cuda4.0開始運行在windows上就有這樣的限制了,取自2.10.1.2.Windows
The maximum size of a single memory allocation created by cudaMalloc() or cuMemAlloc() on WDDM devices is limited to MIN( (System Memory Size in MB - 512 MB) / 2, PAGING_BUFFER_SEGMENT_SIZE ).
For Vista, PAGING_BUFFER_SEGMENT_SIZE is approximately 2 GB
win7 64BIT下的PAGING_BUFFER_SEGMENT_SIZE 是多少?怎么查看呢?
按照LS的说法,我降低CUDA toolkit的版本到小于4.0的版本比如3.2,会不会没有这样的限制了?
这个真得试验下。
我並沒有說3.2並沒有限制,只是我翻的Release_Notes只向下記載到4.0版而已,我沒有去翻閱更早以前的版本
PAGING_BUFFER_SEGMENT_SIZE就要查詢windows相關文件了這我不清楚