- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个快速程序来确保我可以正确使用袖口库。当我运行批量大小为“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/
我编写了一个快速程序来确保我可以正确使用袖口库。当我运行批量大小为“1”时,我得到了预期的结果。然而,当我增加批量大小时,我在数据缓冲区末尾得到了看似随机的字节。如果批量大小为 2,则最后三个条目是噪
我知道一个类似的问题是 asked before ,但我遇到了麻烦。这是我写的代码: void fft(const double *indata_real, const double *indata_
我正在使用以下宏进行 CUFFT 错误处理: #define cufftSafeCall(err) __cufftSafeCall(err, __FILE__, __LINE__) inli
我正在尝试使用流异步启动多个 CUDA FFT 内核。 为此,我正在创建我的流、cuFFT 正向和反向计划,如下所示: streams = (cudaStream_t*) malloc(sizeof(
我在使用 CUDA 的 FFT 库时遇到了一些问题。 我将输入声明为 cuDoubleComplex,但编译器返回此类型与 cufftComplex 类型的参数不兼容的错误。通过互联网搜索后,我找到了
我是一名业余爱好者,致力于并行 FFT 操作/同时执行多个文件。比如说,我有 1000 个文件,每个文件都有不同大小的实际数据,即如果一个文件有 22000 个值,其他文件可以有 15000 个值,下
我编写了一个简单的测试程序,我在其中执行 Complex to Complex FT,我只是生成了一些数据 1..50 并将其插入数组的每个索引的实部和虚部。 当我做这样的操作时 IFFT(FFT(A
所以我结合使用 cuFFT 和 CUDA 流功能。我遇到的问题是我似乎无法让 cuFFT 内核以完全并发的方式运行。以下是我从 nvvp 获得的结果。每个流都在 128 张大小为 128x128 的图
我正在尝试使用 CUFFT 计算图像的 fft。似乎 CUFFT 只提供 fft 的普通设备指针分配给 cudaMalloc。 我的输入图像是使用 cudaMallocPitch 分配的,但是没有用于
我在主机代码中使用 cuFFT 库调用,它们工作正常,但我想从内核调用 cuFFT 库。早期版本的 CUDA 没有这种支持,但有动态并行性这可能吗? 如果有关于如何实现这一目标的任何示例,那就太好了。
我正在尝试使用 cuFFT 的回调功能即时执行输入格式转换(例如,计算 8 位整数输入数据的 FFT,而无需先将输入缓冲区显式转换为 float )。在我的许多应用程序中,我需要计算输入缓冲区上的重叠
我对在 cuFFT 中转换音频信号以获得创建频谱图所需的数据很感兴趣。在转换之前尝试从 float 转换为 cufftReal 时,我似乎丢失了所有音频数据。另外,我认为我的实际方法对于获得正确的结果
我在分成多个 GPU 的 block (N*N/p) 上运行 CUFFT,我有一个关于计算性能的问题。首先,介绍一下我是如何做的: 向每个 GPU 发送 N*N/p 个 block 对 p 个 GPU
以下代码改编自here使用 cufftPlan1d 应用于单个一维变换。最终我想执行批处理就地 R2C 转换,但下面的代码使用单独的输入和输出数组执行单个转换。 如何调整此代码以就地执行转换,从而减少
我正在尝试使用 FFTW3 进行实数到复数的 FFT 变换。到目前为止,我已经设法使用异地转换来完成它,但是我在实现它的就地版本时遇到了麻烦。我的印象是,就地转换你唯一需要改变的是:1)确保你的数据数
下面的测试程序为每个 GPU 创建了一个宿主线程。每个主机线程创建一个 cuFFT 计划并执行 FFT。 大多数时候,程序似乎运行无误。但是,有时它会以多种方式失败(请参见下面的示例输出)。有人知道为
我有一个 CUDA 程序用于计算大小为 50000 的 FFT。目前,我将整个数组复制到 GPU 并执行 cuFFT。现在,我正在尝试优化程序,NVIDIA Visual Profiler 告诉我通过
我正在查看 Nvidia SDK 的卷积 FFT 示例(对于大型内核),我知道傅立叶变换背后的理论及其 FFT 实现(至少是基础知识),但我无法弄清楚以下代码的作用: const int fft
我正在使用 cuda 版本 7.5 cufft 来执行一些 FFT 和逆 FFT。使用 cufftExecC2R(.,.) 函数执行逆 FFT 时遇到问题。 实际上,当我在 cufftPlan1d(,
我正在使用 cuFFT 使用 C++ 和 Cuda 为学校作业编写频率过滤应用程序,但我无法让它工作。您可以找到完整的 Visual Studio 2010 解决方案 here . (需要 glut
我是一名优秀的程序员,十分优秀!