gpt4 book ai didi

cufft 正在将随机数据添加到结果中

转载 作者:行者123 更新时间:2023-11-30 14:22:39 25 4
gpt4 key购买 nike

我编写了一个快速程序来确保我可以正确使用袖口库。当我运行批量大小为“1”时,我得到了预期的结果。然而,当我增加批量大小时,我在数据缓冲区末尾得到了看似随机的字节。如果批量大小为 2,则最后三个条目是噪声。如果批量大小为 3,我会在缓冲区末尾的最后六个条目以及批处理中三个转换中第二个的结果末尾的三个条目中收到噪声。

批处理中第二次转换结果末尾的错误数据示例:

7.680291 1.411589 <- 良好的数据
7.748493 1.062853
7.797380 0.710554
7.826757 0.355854
-436781318144.000000 -436781318144.000000 <- 不良结果的开始
5349828096.000000 5000401408.000000
5511789568.000000 4813803008.000000
5664713728.000000 4619900416.000000
<- 输出结束

代码:

#define NX 1024
#define BATCH 4

#include <cuda.h>
#include <cufft.h>
#include <stdio.h>
#include <Windows.h>
#include <math.h>

int main()
{
cufftHandle plan;
cufftComplex *deviceData;
cufftComplex *hostData;
FILE* output;
char fileName[256];

int i, j;

cudaMalloc((void**)&deviceData, NX * BATCH * sizeof(cufftComplex));
hostData = (cufftComplex*)malloc(NX * BATCH * sizeof(cufftComplex);

//Initalize array with a real sin wave, increasing the frequency of the wave for each transform in the batch (indexed by "j")
for (j = 0; j < BATCH; j++)
{
for (i = 0; i < NX; i++)
{
hostData[i + j*BATCH].x = sin(i*(j+1) / (float)10);
hostData[i + j*BATCH].y = 0;
}
}

cudaMemcpy(deviceData, hostData, NX * BATCH * sizeof(cufftComplex), cudaMemcpyHostToDevice);
cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH);
cufftExecC2C(plan, deviceData, deviceData, CUFFT_FORWARD);
cudaThreadSynchronize();
cudaMemcpy(hostData, deviceData, NX * BATCH * sizeof(cufftComplex), cudaMemcpyDeviceToHost);
cufftDestroy(plan);
cudaFree(deviceData);

output = fopen("outputFile.txt", "w");

//Write one file for each transform in the batch
for (j = 0; j < BATCH; j++)
{
memset(fileName, '\0', 256);
sprintf(fileName, "outputFile_%d.txt", j);
output = fopen(fileName, "w");
for (i = 0; i < NX; i++)
fprintf(output, "%f\t%f\n", hostData[i + j*BATCH].x, hostData[i + j*BATCH].y);
fclose(output);
}
}

最佳答案

您混合使用 BATCH 和 NX 来索引数据集。

我认为你的最终 fprintf 行应该是这样的,而不是你所拥有的:

fprintf(输出, "%f\t%f\n", hostData[i + j*NX].x, hostData[i + j*NX].y);

同样,您需要更改数据设置行

hostData[i + j*BATCH]...

hostData[i + j*NX]...

(2 个实例。)

当我们这样做时,这一行无法为我编译,它缺少一个右括号:

hostData = (cufftComplex*)malloc(NX * BATCH * sizeof(cufftComplex);

关于cufft 正在将随机数据添加到结果中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618656/

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