使用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
正常工作。
答案 0 :(得分:2)
这似乎是在CUDA 6发布周期中引入并随后在CUDA 7中修复的错误。以下代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/flxform"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:background="@android:color/transparent"
android:orientation="vertical" >
</LinearLayout>
在编译时使用CUFFT_INVALID_VALUE失败并使用CUDA 6.5中提供的CUFFT运行,但在CUDA 7.0中针对CUFFT版本构建和运行时成功。如评论中所述,#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中正常运行。因此,解决方法是使用cufftGetSize
或升级到比CUDA 6.5版本的CUFFT更新。
[此社区维基条目主要是通过评论添加,以便将此问题从未回答的问题列表中删除]