gpt4 book ai didi

CUFFT double

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:55 25 4
gpt4 key购买 nike

我知道一个类似的问题是 asked before ,但我遇到了麻烦。这是我写的代码:

void fft(const double *indata_real, const double *indata_imag, double *outdata_real, double *outdata_imag, int x, int y)
{
int size = sizeof(cufftDoubleComplex)*x*y;

// allocate data on host
cufftDoubleComplex* host_data = (cufftDoubleComplex*)malloc(size);
for (int i = 0; i < x*y; ++i) {
host_data[i].x = indata_real[i];
host_data[i].y = indata_imag[i];
}

// allocate data on device
cufftDoubleComplex* device_data;
cudaMalloc((void**)&device_data, size);

// copy data from host to device
cudaMemcpy(device_data, host_data, size, cudaMemcpyHostToDevice);

// create plan
cufftHandle plan;
cufftPlan2d(&plan, x, y, CUFFT_Z2Z);

// perform transform
cufftExecZ2Z(plan, (cufftDoubleComplex *)device_data, (cufftDoubleComplex *)device_data, CUFFT_FORWARD);

// copy data back from device to host
cudaMemcpy(host_data, device_data, size, cudaMemcpyDeviceToHost);

// copy transform to outdata
for (int i = 0; i < x*y; ++i) {
outdata_real[i] = host_data[i].x;
outdata_imag[i] = host_data[i].y;
}

// clean up
cufftDestroy(plan);
free(host_data);
cudaFree(device_data);

}

以上对于单精度工作正常,即当我将所有“cufftDoubleComplex”替换为“cufftComplex”,将“CUFFT_Z2Z”替换为“CUFFT_C2C”,并将“cufftExecZ2Z”替换为 cufftExecC2C

根据我在其他页面上的发现,我认为这可以在 double 下正常运行。但目前 outdata 数组与 indata 数组相同 - 它没有做任何事情。

因此,如果有人能发现我做错了什么,那就太好了!

小号

最佳答案

您的代码没有产生输出的原因是没有任何东西在运行 - 您的 GPU 是一个计算 1.1 设备,不支持 double 浮点运算。

您应该能够通过检查 cufftExecZ2Z 调用的返回状态来检查这一点,我希望返回 CUFFT_EXEC_FAILED 因为您的 GPU 不支持 double 和 double FFT 内核将不会启动。

关于CUFFT double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com