gpt4 book ai didi

cuda,内核内存印记中的动态内存分配?

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:42 24 4
gpt4 key购买 nike

我的内核中有一个动态内存分配:

float MyLongArray1 = new float [array_size]
float MyLongArray2 = new float [array_size]

其中 array_size 取自内核调用。 array_size 大约为 100000,非常高。

内存分配似乎工作正常。然后我尝试对这两个数组做一些事情

for(int i=0; i<array_size; i++)
{
for(int j=0; j<array_size; j++)
{
do some calculations;
}
MyLongArray1[i]=calculation_result1;
MyLongArray2[i]=calculation_result2;
}

我编写的代码在 1 个内核和最多 15 个内核上运行良好。但是,当我使用 16 个内核时,我得到了 GPUassert: unspecified launch failurecuda-memcheck 仍然给出 0 个错误。我做了一些实验。当我评论其中一个 MyLongArray2[i]=calculation_result2; 时,代码再次运行。当我将 array_size 设为前一种情况的一半时,我可以将核心数增加 2 倍。看起来动态分配需要更多内存?我在 fermi 上有 3Gb 的内存,所以我的数组应该适合全局内存。

在这种情况下可能的解决方案是什么?我应该避免为 CUDA 应用程序动态分配内存吗?

最佳答案

很可能您超出了设备上堆的大小。您可以使用 cuda API 调用来修复此问题。

cudaDeviceSetLimit(cudaLimitMallocHeapSize, n*100000*sizeof(float));

确保在任何内核调用之前执行此操作。话虽如此,您应该强烈考虑使用一次 cudaMalloc 来分配单个大数组,而不是这样做。

关于cuda,内核内存印记中的动态内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com