我目前正在开发一个必须实现 2D-FFT(用于互相关)的程序。我使用 CUDA 进行了 1D FFT,这给了我正确的结果,我现在正在尝试实现 2D 版本。由于网上的示例和文档很少,我发现很难找出错误是什么。
到目前为止,我只使用 cuFFT 手册。
无论如何,我创建了两个 5x5 数组并用 1 填充它们。我将它们复制到 GPU 内存上并进行前向 FFT,将它们相乘,然后对结果进行 ifft。这给了我一个值为 650 的 5x5 数组。我希望在 5x5 数组中仅一个插槽中获得值为 25 的 DC 信号。相反,我在整个数组中得到 650。
此外,在将信号复制到 GPU 内存后,我不允许打印出信号的值。写作
cout << d_signal[1].x << endl;
Run Code Online (Sandbox Code Playgroud)
给我一个访问冲突。我在其他 cuda 程序中做了同样的事情,这不是一个问题。它与复杂变量的工作方式有关,还是人为错误?
如果有人指出出了什么问题,我将不胜感激。这是代码
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <helper_functions.h>
#include <helper_cuda.h>
#include <ctime>
#include <time.h>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <cufft.h>
#include <fstream>
using namespace std;
typedef float2 Complex;
__global__ void ComplexMUL(Complex *a, Complex *b)
{
int i …Run Code Online (Sandbox Code Playgroud)