Thrust 是一个用于开始编程 CUDA 的惊人包装器。我想知道有什么东西可以用推力封装 NVIDIA CUFFT 还是我们需要自己实现?
问问题
1434 次
1 回答
9
这是一个很晚的答案,只是为了从未回答的列表中删除这个问题。
使用带推力的 cuFFT 应该非常简单,唯一要做的就是将 cuFFTthrust::device_vector
转换为原始指针。下面报告一个非常简单的例子:
#include <iostream>
#include <cufft.h>
#include <stdlib.h>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/generate.h>
#include <thrust/transform.h>
int main(void){
int N=4;
// --- Setting up input device vector
thrust::device_vector<cuFloatComplex> d_in(N,make_cuComplex(1.f,2.f)), d_out(N);
cufftHandle plan;
cufftPlan1d(&plan, N, CUFFT_C2C, 1);
cufftExecC2C(plan, thrust::raw_pointer_cast(d_in.data()), thrust::raw_pointer_cast(d_out.data()), CUFFT_FORWARD);
// --- Setting up output host vector
thrust::host_vector<cuFloatComplex> h_out(d_out);
for (int i=0; i<N; i++) printf("Element #%i; Real part = %f; Imaginary part: %f\n",i,h_out[i].x,h_out[i].y);
getchar();
}
于 2014-03-18T21:10:01.933 回答