gpt4 book ai didi

cudaMalloc3DArray 因错误值而失败——大小限制?

转载 作者:行者123 更新时间:2023-12-04 05:12:37 26 4
gpt4 key购买 nike

调用:

cudaExtent extent = make_cudaExtent( 1920 * sizeof(float), 1080, 10);
chanDesc = cudaCreateChannelDesc ( 32, 0, 0, 0, cudaChannelFormatKindFloat);
err = cudaMalloc3DArray ( &(devYAll[0]), &chanDesc, extent, 0);

err=cudaErrorInvalidValue 而失败。当我使用第一个参数将范围设置为 1024 或更小时,对 3D 数组的调用就会成功。可以用 cudaMalloc3DArray 分配的内存大小有某种限制吗?

最佳答案

是的,范围大小有限制 - 2048x2048x2048 或 4096x4096x4096,具体取决于您拥有的硬件(根据您问题中的详细信息,我假设您有 Fermi 卡)。但问题的真正根源是您的 make_cudaExtent 调用。对于 cudaMalloc3DArray,extent 的第一个参数应该在 elements 中给出,而不是字节。这就是为什么第一维 > 1024 时会出现错误,因为 1024 * sizeof(float) = 4096 这是 Fermi GPU 的极限。

因此,要分配一个 1920x1080x10 的 3D 数组,请执行以下操作:

cudaExtent extent = make_cudaExtent( 1920, 1080, 10);
chanDesc = cudaCreateChannelDesc ( 32, 0, 0, 0, cudaChannelFormatKindFloat);
err = cudaMalloc3DArray ( &(devYAll[0]), &chanDesc, extent, 0);

在这个调用中,类型的大小是从 channel 描述中推导出来的,并且根据需要修改范围尺寸以满足硬件的间距/对齐要求。

关于cudaMalloc3DArray 因错误值而失败——大小限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14713793/

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