如何修复使用skcuda.cufft的fft函数中的参数错误?

时间:2016-02-16 11:23:13

标签: python fft cufft

我想制作一个python包装的GPU fft函数,可以使用scikits-cuda.cufft计算任意大小输入的变换。 (我试过PyFFT只能获得2的权力)

我使用CUDA代码模拟了我的skcuda.cufft代码:

__host__ cuDoubleComplex* FFT(cuDoubleComplex *data, int NX){

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);

cudaEventRecord(start, 0);

cuDoubleComplex *d_data;
cudaMalloc((void **)&d_data,NX*sizeof(cuDoubleComplex));

cufftHandle plan;
cufftPlan1d(&plan,NX,CUFFT_Z2Z,1);
cudaMemcpy(d_data, data, NX*sizeof(cuDoubleComplex), cudaMemcpyHostToDevice);
cufftExecZ2Z(plan,d_data,d_data,CUFFT_FORWARD);
cudaMemcpy(data,d_data,NX*sizeof(cuDoubleComplex),cudaMemcpyDeviceToHost);
cufftDestroy(plan);

cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);

float elapsedTime;
cudaEventElapsedTime(&elapsedTime, start, stop);
printf("\n Elapsed Time:  %3.1f ms\n", elapsedTime);

cudaFree(d_data);

return data;
}

我的skcuda.cufft代码如下:

import skcuda.cufft as ft
import pycuda.autoinit
import pycuda.gpuarray as gpuarray
import numpy as np

N=100

x=np.array(np.random.random(N),np.float32)
x_gpu=gpuarray.to_gpu(x)
xf_gpu = gpuarray.empty(N,np.complex64)
plan=ft.cufftPlan1d(N,ft.CUFFT_Z2Z,1)
ft.cufftExecZ2Z(plan,x_gpu,xf_gpu,ft.CUFFT_FORWARD)
ft.cufftDestroy(plan)

xf=x_gpu.get()

但它给出了错误:

  

runfile('/ home / jesli / sk-cufft_test.py',wdir ='/ home / jesli')Traceback   (最近一次电话会议):

     

文件“”,第1行,in       runfile('/ home / jesli / sk-cufft_test.py',wdir ='/ home / jesli')

     

文件   “/home/jesli/anaconda/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py”   第580行,在runfile中       execfile(filename,namespace)

     

文件“/home/jesli/sk-cufft_test.py”,第19行,in       ft.cufftExecZ2Z(计划,x_gpu,xf_gpu,ft.CUFFT_FORWARD)

     

文件   “/home/jesli/anaconda/lib/python2.7/site-packages/skcuda/cufft.py”   第319行,在cufftExecZ2Z中       方向)

     

ArgumentError:参数2 ::错误类型

转换方向( CUFFT_FORWARD CUFFT_INVERSE )已在源代码中定义。

http://scikit-cuda.readthedocs.org/en/latest/_modules/skcuda/cufft.html

我想知道代码出了什么问题,或者函数期望什么参数。

0 个答案:

没有答案