2

使用cufftGetSize1d(或任何cufftGetSize*)功能的正确方法是什么?

我试过:

cufftHandle plan;
size_t workSize;
cufftResult result;
cufftCreate(&plan);
result = cufftGetSize1d(plan, 1000, CUFFT_C2C, 1, &workSize);

CUFFT_INVALID_VALUE但是,无论我使用的大小、类型或批次如何,最后一次调用的结果始终是。2d 和 3d 变体也是如此。cufftEstimate1d工作正常。

4

1 回答 1

2

这似乎是在 CUDA 6 发布周期中引入并随后在 CUDA 7 中修复的错误。以下代码:

#include <iostream>
#include <cufft.h>

int main()
{

    cufftHandle plan;
    size_t workSize;
    cufftResult result;
    cufftCreate(&plan);
    result = cufftGetSize1d(plan, 1000, CUFFT_C2C, 1, &workSize);

    std::cout << "result = " << result << std::endl;

    return 0;
}

使用 CUDA 6.5 中附带的 CUFFT 编译和运行时会出现 CUFFT_INVALID_VALUE 失败,但在针对 CUDA 7.0 中的 CUFFT 版本构建和运行时会成功。如评论中所述,cufftGetSize似乎在 CUDA 6.5 中可以正常工作。因此解决方法是使用cufftGetSize或升级到比 CUDA 6.5 版本更新的 CUFFT。

[这个社区 wiki 条目主要是从评论中添加的,以便将此问题从未回答的问题列表中删除]

于 2015-10-19T08:20:11.387 回答