问题标签 [cufft]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2402 浏览

visual-c++ - CUFFT - 填充/初始化问题

我正在查看用于卷积 FFT 示例(用于大型内核)的 Nvidia SDK,我知道傅立叶变换背后的理论及其 FFT 实现(至少是基础知识),但我无法弄清楚以下代码的作用:

我以前从未使用过 CUFFT 库,所以我不知道 snapTransformSize 是做什么的

(这里是代码)

也不知道为什么复平面会如此初始化。

你能给我解释链接或答案吗?

0 投票
1 回答
1538 浏览

cuda - CUFFT的计算性能

我在分成多个 GPU 的块 (N*N/p) 上运行 CUFFT,我对计算性能有疑问。首先,关于我是如何做到的:

  1. 向每个 GPU 发送 N*N/p 个块
  2. 对 p 个 GPU 中的每一行进行批量 1-D FFT
  3. 将 N*N/p 个块返回主机 - 对整个数据集执行转置
  4. 同上步骤 1
  5. 同上步骤 2

Gflops = ( 1e-9 * 5 * N * N *lg(N*N) ) / execution time

执行时间计算如下:

execution time = Sum(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

这是在多个 GPU 上评估 CUFFT 性能的正确方法吗?有没有其他方法可以代表 FFT 的性能?

谢谢。

0 投票
1 回答
206 浏览

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

我制作了一个快速程序以确保我可以正确使用 cufft 库。当我运行“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
<- 输出结束

代码:

0 投票
1 回答
1079 浏览

cuda - CUFFT:如何计算倾斜指针的 fft?

我正在尝试使用 CUFFT 计算图像的 fft。似乎 CUFFT 只提供 fft 分配的普通设备指针cudaMalloc

我的输入图像是使用分配的,cudaMallocPitch但没有处理图像指针间距的选项。

目前,我必须删除行的对齐方式,然后执行 fft,并将结果复制回倾斜的指针。我目前的代码如下:

它给出了正确的结果,但我不想在函数内部进行 2 次额外的内存分配和复制。我想做这样的事情:

问题:

如何直接使用CUFFT计算倾斜指针的fft?

0 投票
1 回答
2870 浏览

cuda - 双精度 CUFFT

我在使用 CUDA FFT 库时遇到了一些问题。

我将输入声明为 cuDoubleComplex,但编译器返回此类型与 cufftComplex 类型的参数不兼容的错误。在网上搜索了一番后,我找到了 cufft.h 文件,其中有一行typedef cuComplex cufftComplex;. 我的问题是,在库 cuComplex.h 中,很明显 cuComplex 具有单浮点精度(typedef cuFloatComplex cuComplex;),但我想要双精度。

这可能吗?

特别是,我获得以下内容:

在这一行:

0 投票
3 回答
2533 浏览

matlab - 通过 cuFFT 在逆 FFT 中进行缩放

每当我使用 cuFFT 绘制程序获得的值并将结果与​​ Matlab 的结果进行比较时,我都会得到相同形状的图形,并且最大值和最小值的值在相同的点上。但是,由 cuFFT 得出的值远大于由 Matlab 得出的值。Matlab代码是

具有相同输入的 CUDA 代码如下:

cuFFT 还执行1024批量大小为 的点 FFT 2

使用 的比例因子时NX=1024,值不正确。请告诉我该怎么做。

0 投票
2 回答
278 浏览

cuda - cuFFT 分析问题

我正在尝试获取 cuFFT 库调用的分析数据,例如 plan 和 exec。我正在使用 nvprof(命令行分析工具),带有“--print-api-trace”选项。它打印除 cuFFT api 之外的所有 api 的时间。我需要更改任何标志以获取 cuFFT 分析数据吗?或者我需要使用这些事件并测量自己??

0 投票
2 回答
193 浏览

cuda - cuFFT 所需的缓冲区

这个问题是关于 cuFFT 所需的缓冲区。在用户指南中记录了

在最坏的情况下,CUFFT 库为 8*batch*n[0]*..*n[rank-1] cufftComplex 或 cufftDoubleComplex 元素分配空间(其中 batch 表示将并行执行的转换数量,rank 为输入数据的维数(参见多维变换)和 n[] 是变换维数的数组)分别用于单精度和双精度变换。

“变换维度数组”是什么意思?cuFFT 需要多少缓冲?我对上述内容的理解是,它至少需要 8 倍于被 FFT 处理的数组的大小,但这对我来说没有意义

提前致谢

丹尼尔

0 投票
2 回答
3080 浏览

cuda - CUFFT 错误处理

我正在使用以下宏进行 CUFFT 错误处理:

此宏不会从错误代码中返回消息字符串。《CUDA Programming: a developer's guide to parallel computing with GPUs》一书建议使用以下宏

(注意:它在没有改变功能的情况下进行了一些定制)。这本书说:“这种技术适用于所有 CUDA 调用,除了内核调用。” 但是,当CUDA_CALL在 CUFFT 例程调用上使用时,编译器会返回

看来,cufftResultcudaError_t不能立即兼容。

从这个NVIDIA CUDA 库链接进行更多调查,似乎cudaGetErrorString需要cudaError_t输入类型。

我的问题如下:

  1. 有没有办法制作cufftResultcudaError_t兼容,以便我可以CUDA_CALL在 CUFFT 例程上使用并从错误代码中接收消息字符串?
  2. 为 CUFFT 库实施不同的错误是否有任何技术原因?:-)

谢谢。

按照 ROBERT CROVELLA 的回答进行编辑

我已将 CufftSafeCall 例程修改为

}

也返回错误类型字符串。

0 投票
1 回答
8876 浏览

cuda - 在 GPU 上运行 FFTW 与使用 CUFFT

我有一个基本的 C++ FFTW 实现,如下所示:

我在 for 循环中做 N fft。我知道我可以使用 FFTW 一次执行多个计划,但是在我的执行,每个循环的进出都是不同的。关键是我正在 for 循环中执行整个 FFTW 管道。

我想过渡到使用 CUDA 来加快速度。我知道 CUDA 有自己的 FFT 库 CUFFT。语法非常相似:来自他们的在线文档

然而,这些“内核”中的每一个(如 Nvida 所称)(cufftPlan3d、cufftExecC2C 等)都是与 GPU 之间的调用。如果我正确理解了 CUDA 结构,那么这些方法调用中的每一个都是单独的并行操作:

我了解这如何通过在 GPU 上运行每个 FFT 步骤来加速我的代码。但是,如果我想并行化整个 for 循环怎么办?如果我希望每个原始的 N 个 for 循环都在 GPU 上运行整个 FFTW 管道怎么办?我可以创建自定义“内核”并从设备 (GPU) 调用 FFTW 方法吗?