Igo*_*ren 5 c++ cuda visual-studio
编写一个计算简单函数积分的程序。在测试它时,我发现如果我使用的数组大小大于 1000 万个元素,则会产生错误的答案。我发现该错误似乎是在 CUDA 内核中操作数组后发生的。1000 万个及以下的元素工作正常并产生正确的结果。
可传输到 GPU 或在 GPU 上计算的元素数量是否有大小限制?
PS 使用包含浮点数的 C 样式数组。
CUDA 可以使用多种不同类型的内存。特别是,你有
cuMemAlloc
)cuMemHostAlloc
)cuMemAllocHost
)cuMemAllocPitch
)每种内存都与其自己的硬件资源限制相关联,您可以使用 找到其中的许多限制cuDeviceGetAttribute
。该函数cuMemGetInfo
返回设备上的可用内存量和总内存量,但由于对齐要求,分配1,000,000
浮点数可能会导致1,000,000 * sizeof(float)
消耗的字节数以上。一次可以调度的最大块数也是一个限制:如果超过它,内核将无法启动(您可以使用 轻松找到这个数字cuDeviceGetAttribute
)。您可以使用CUDA Driver API找出不同内存量的对齐要求,但对于简单的程序,您可以进行合理的猜测并检查分配函数的值来确定分配是否成功。
您可以传输的字节数没有限制;使用异步函数,您可以将内核执行与内存复制重叠(前提是您的卡支持此操作)。超过可以调度的最大块数,或消耗设备上的可用内存意味着您将必须拆分任务,以便可以使用多个内核来处理它。
归档时间: |
|
查看次数: |
5195 次 |
最近记录: |