【发布时间】:2017-04-20 16:32:58
【问题描述】:
如果代码在 cuda 中启动 3D 数组,其大小为 width = 809;高度 = 127;层数=2160;
cudaArray *sinor;
cudaExtent volumeSize = make_cudaExtent(809, 127, 2160);
const cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
gpuErrchk(cudaMalloc3DArray(&sinor, &channelDesc, volumeSize, cudaArrayLayered));
最后一行返回错误“无效参数”错误。是不是因为我的层数太大了?我试过1940,还好。如果我不能做这么多的层,这里有什么工作?非常感谢。
【问题讨论】:
-
层数限制为 2048 - 检查
deviceQuery -
@RobertCrovella:有解决办法吗?
-
您可以有two texture objects/references,并根据图层索引在两者之间进行选择。
-
@RobertCrovella 让我试一试。 tex的指针,还是tex的向量?这适用于 CUDA?
-
您不需要任何东西的指针或向量。你知道如何创建纹理对象吗?伟大的。创建其中 2 个。让我们称一个 texA 和另一个 texB。当需要进行纹理提取时,如果您的首选图层索引小于 2048,则纹理来自 texA.如果您的首选图层索引大于 2048,则纹理来自 texB,但从您的首选图层索引中减去 2048。这是一个带有 2 个纹理的简单 if-then-else 语句。没有任何指针或向量。