Python Scikit cuda FFT大数据

Python Scikit cuda FFT大数据,python,fft,pycuda,cufft,Python,Fft,Pycuda,Cufft,我最近下载了最新的用于FFTs的scikit。然而,我遇到了一个问题。我的数据大小和窗口大小为2^19。进入fft函数的数组大小为524288,远低于文档中列出的2^27元素限制 multiply_them = ElementwiseKernel( "float *dest, float *a, float *b", #{ #const int i = blockIdx.x +threadIdx.x; "dest[i] = a[i]

我最近下载了最新的用于FFTs的scikit。然而,我遇到了一个问题。我的数据大小和窗口大小为2^19。进入fft函数的数组大小为524288,远低于文档中列出的2^27元素限制

multiply_them = ElementwiseKernel(
        "float *dest, float *a, float *b",
        #{
        #const int i = blockIdx.x +threadIdx.x;
        "dest[i] = a[i] * b[i]",
        #}
        "linear_combination")
        #multiplythem = mod.get_function("multiply_them")

        gval1 = gpuarray.to_gpu(val1.astype(numpy.float32)) #gval1 = input * rescale * gain
        gwindow = gpuarray.to_gpu(window.astype(numpy.float32))  #gwindow = filtering window
        gval2 = gpuarray.to_gpu(numpy.zeros_like(gval1.get()))#.astype(np.float32)) #set up zero array



        #val2 = numpy.zeros_like(val1).astype(numpy.float32)
        multiply_them(gval2, gval1, gwindow) # block=(max_block_dim,1,1), grid=(grid_dim,1)) #gval2 = gval1 .* gwindow

        val1 = gval2.get() #retrieve val1 from GPU


        #gval1 = fft(gval1,fft_window_size);
        #gval1 = fftshift(gval1,1);
        #gval1 = abs(gval1);
        gval1 = gpuarray.to_gpu(val1)
        gval2 = gpuarray.to_gpu(numpy.empty(fft_window_size, numpy.complex64))
        plan_forward = cu_fft.Plan(gval1.shape[0]*2, numpy.float32, numpy.complex64)
        cu_fft.fft(gval1, gval2, plan_forward)
        #val2 = scipy.fftpack.fft(val1,fft_window_size)
        val1 = gval2.get()

然而,当我运行代码并用MATLAB和Scipy的FFT函数进行检查时,在计算过程中,值逐渐变为零。我不知道如何增加批量,但仍然有正确的数字。一些建议会很好。

实到复变换是对称的。CuFFT利用了这一点,只计算了解决方案的一半。你确定这不是你看到的吗?@Talonmes是的,我可以看到这种情况发生,但我有点担心,因为我在中间点的值与MATLAB和Scipy不匹配。但是,到该点为止的数组之和是匹配的。我应该担心我看到的不同值吗?cuFFT解决方案需要归一化。这可能是最重要的difference@talonmies我该怎么做?这里已经有答案了吗?将转换除以输入数据中的样本数。但这只是一个猜测,你还没有对你在这里所问的任何问题进行任何有用的比较,所以很难为你提供这个问题的具体答案,真正到复杂的变换是对称的。CuFFT利用了这一点,只计算了解决方案的一半。你确定这不是你看到的吗?@Talonmes是的,我可以看到这种情况发生,但我有点担心,因为我在中间点的值与MATLAB和Scipy不匹配。但是,到该点为止的数组之和是匹配的。我应该担心我看到的不同值吗?cuFFT解决方案需要归一化。这可能是最重要的difference@talonmies我该怎么做?这里已经有答案了吗?将转换除以输入数据中的样本数。但这只是一个猜测,你还没有对你一直在问的问题进行任何有用的比较,所以很难为你提供这个问题的具体答案