1

我最近下载了用于 FFT 的最新 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 函数对其进行检查时,这些值在计算过程中逐渐变为零。我不知道如何增加批量大小并且仍然有正确的数字。一些建议会很好。

4

0 回答 0