0

我正在编写可以比较numpy.fft.fft2pycuda但结果不匹配的代码。此外pycuda,每次的结果都是模棱两可的。

数据文件:https ://nofile.io/f/bjGRQGRVSCG/gauss.npy

from pyfft.cuda import Plan
import numpy as np
from pycuda.tools import make_default_context
import pycuda.gpuarray as gpuarray
import pycuda.driver as cuda
import time
import matplotlib.pyplot as plt

cuda.init()
context = make_default_context()

data = np.load('gauss.npy')
data_complex = data.astype(np.complex64)


start_time = time.time()
plan = Plan((32,32))

gpu_data = gpuarray.to_gpu(data_complex)
plan.execute(gpu_data)
result = gpu_data.get()

print("--- %s seconds (FFT calculation pycuda)---" % (time.time() - start_time))

start_time_3 = time.time()

result_np = np.fft.fft2(data)
#print(result_np)

print("--- %s seconds (FFT calculation numpy.fft.fft)---" % (time.time() - start_time))

context.pop()

#plt.plot(result)
#plt.plot(result_np)

我开始怀疑我们是否甚至可以使用 pycuda 执行 2D FFT?

4

1 回答 1

1

pyfft.cuda 几乎可以肯定地使用 cufft,它不会以与 numpy 的 fft 相同的方式计算 FFT(IIRC,即使 scipy.fft 和 np.fft 也可以产生不同的结果)。您应该阅读每个库的文档以了解差异。您绝对可以使用 pycuda 执行 2D FFT

于 2019-01-25T00:35:34.243 回答