问题标签 [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 投票
2 回答
2015 浏览

c++ - 使用“cuFFT 设备回调”

这是我的第一个问题,所以我会尽量详细。我正在努力在 CUDA 6.5 中实现降噪算法。我的代码基于这个 Matlab 实现: http: //pastebin.com/HLVq48C1
我很想使用新的 cuFFT 设备回调功能,但我被困在cufftXtSetCallback上。每次我的 cufftResult 都是CUFFT_NOT_IMPLEMENTED (14)。即使 nVidia 提供的示例也以同样的方式失败......我的设备回调测试代码:

我的代码的CUDA部分:

我知道我只是 CUDA 的初学者。我的问题是:
如何正确调用 cufftXtSetCallback 或导致此错误的原因是什么?

0 投票
1 回答
981 浏览

cuda - cuFFT 输出不正确

我对这个程序有一个问题:

我想转换一个信号,然后逆向返回,但是前半部分的输出是错误的。

你能帮我找出错误吗?

非常感谢!

0 投票
1 回答
276 浏览

cuda - cufftGetSize1d 中的 CUFFT_INVALID_VALUE

使用cufftGetSize1d(或任何cufftGetSize*)功能的正确方法是什么?

我试过:

CUFFT_INVALID_VALUE但是,无论我使用的大小、类型或批次如何,最后一次调用的结果始终是。2d 和 3d 变体也是如此。cufftEstimate1d工作正常。

0 投票
1 回答
110 浏览

cuda - 如何通过 cufft 获得完整的 fft 系数?

我正在通过 cufft 进行二维 fft 处理。处理类型是实数到复数,所以输出数组的大小是 NX * (NY / 2 + 1),这是非冗余的。但我需要包含冗余系数的完整系数。我怎样才能得到它们?提前致谢。

0 投票
2 回答
2140 浏览

cuda - CUDA 中 3D 矩阵的列和行的 1D FFT

我正在尝试使用cufftPlanMany. 数据集来自一个 3D 字段,存储在一个 1D 数组中,我想在其中计算xy方向的 1D FFT。数据存储如下图所示;接连在x接。yz

x在 -方向上进行批量 FFT (我相信)是直截了当的;使用输入和stride=1,它计算元素、、、上的 FFT 。但是,我想不出一种方法来为 -方向的 FFT 实现相同的效果。每个平面的批次再次简单明了(输入, ,导致 FFT 超过,等)。但与,从到,距离大于。这可以通过 cufftPlanMany 以某种方式完成吗? distance=nxbatch=ny * nz{0,1,2,3}{4,5,6,7}...{28,29,30,31}yxystride=nxdist=1batch=nx{0,4,8,12}{1,5,9,13}batch=nx * nz{3,7,11,15}{16,20,24,28}1

在此处输入图像描述

0 投票
1 回答
634 浏览

c++ - 是否可以将批处理 FFT 与 CUDA 的 cuFFT 库和 cufftPlanMany 重叠?

我正在尝试并行化称为 Chromaprint 的声学指纹库的 FFT 变换。它的工作原理是“将原始音频分割成许多重叠的帧并对其应用傅里叶变换”。Chromaprint 使用 4096 的帧大小,有 2/3 的重叠。例如,第一帧由元素 [0...4095] 组成,然后第二帧类似于 [1366.. 5462]。

使用 cufftPlanMany,我知道您可以指定大小为 4096 的批次,这将执行 [0...4095]、[4096...8192] 等批次。是否有某种方法可以使批量转换重叠,或者应该我考虑另一种不使用批处理执行的方法?

0 投票
0 回答
1323 浏览

python - 使用 Python 多处理和 pyfft 使用 GPU 计算多个 FFT:如何避免 GPU 内存泄漏?

我正在尝试在 Python 中使用pycudapyfft包为多 CPU 和单 GPU计算实现以下模式。

我想要几个进程(例如使用 multiprocessing.Pool() 启动),每个进程都能够使用 GPU(使用 NVIDIA CUDA)执行 FFT

但是,我有以下问题:

如果我运行太多进程或每个进程有太多 FFT,则整个脚本将保持暂停状态而不会终止(并且不会计算所有到期的 FFT)。通过进一步的调查,我认为这是由于 GPU 的内存限制(目前 NVIDIA GeForce GT 750M 上的内存限制为 2048MB)。似乎多处理池无法重新获得控制权。有没有办法避免这种情况?

由于每个进程需要少于 2048 MB,我希望有一个类似队列的东西,每个进程都可以预订GPU 的使用,当一个进程释放上下文时,队列中的下一个进程开始使用它。这是可行的吗?

或者,是否可以强制在给定时间只有一个进程使用 GPU?
我已经分别尝试了这些解决方案,但它们不起作用(或者我可能没有正确实现它们):

  1. 使用 proc_stream.synchronize() 同步流
  2. 使用 pycuda.tools.clear_context_caches() 清除上下文缓存
  3. 更改计算模式,使用 cuda.compute_mode = cuda.compute_mode.EXCLUSIVE

注意:解决方案 2. 似乎释放了一些内存,但它使计算方式变慢,并且没有解决问题:例如增加要计算的 fft 数量,脚本显示相同的行为。

这里是代码。从一个简单的任务开始,这里每个进程计算 1 个 FFT(然后可以使用 execute() 中的批处理选项连续执行更多 FFT)。

这里是函数包装器:

现在,使用 nffts=16 和 pool_size=4 脚本正确终止并给出以下输出:

但是使用 nffts=18 和 pool_size=4 脚本不会终止并给出这个输出,仍然停留在最后一行:

非常感谢您的帮助!

0 投票
1 回答
909 浏览

cuda - 使用 cucomplex.h 操作袖带数据

我是新来的。我正在使用 FFT,我需要编写一个简单的代码,但它不起作用。我需要用 cufft a sin(x) 进行变换并返回,但在变换之间,我需要将结果乘以 2,这样,当我使用逆变换返回结果时,我将得到 2*sin( x) 例如。使用 fftw.h,我只需将我的 d_signal[i] 乘以 2,当我返回时,我有 2*sin(x),但我曾经使用 complex.h。任何想法?谢谢。

}

简单的转换代码

结果

0 投票
0 回答
72 浏览

android - Shield 平板电脑上的 CUDA CUFFT

我尝试使用 CUFFT 修改 Shield Tablet 上的 CUDA 示例。但是,当我构建程序时,我得到了链接错误undefined reference to 'cufftExecR2C'undefined reference to 'cufftExecC2R'.

我认为错误可能是由于缺少 .so 文件引起的。然后我在 Android.mk 文件中添加了 libcufft.so,例如:

我仍然遇到同样的错误。谁能帮助我并指出正确的方向?

非常感谢。

0 投票
2 回答
755 浏览

cuda - Jetson TK1 上的 FFT 较慢?

我为合成孔径雷达图像处理编写了一个 CUDA 程序。计算的重要部分涉及查找 FFT 和 iFFT,我使用了 cuFFT 库。我在 Jetson TK1 和具有 GT635M (Fermi) 的笔记本电脑上运行了我的 CUDA 代码,我发现它在 Jetson 上慢了三倍。这是因为 FFT 需要更多时间并且在 Jetson 上显示出较低的 GFLOPS/s。我编写的内核的 GFLOPS/s 性能在 Jetson 和 Fermi GT635M 中几乎相同。在 Jetson 上运行缓慢的是 FFT。
我观察到的其他分析器参数是:发布的控制流指令、纹理缓存事务、本地内存存储吞吐量(字节/秒)、每个请求的本地内存存储事务在 Jetson 上很高,而请求的全局负载吞吐量(字节/秒)和Fermi GT635M 的全局负载事务很高。

杰特森

GPU 时钟频率:852 Mhz

内存时钟速率:924 Mhz

费米GT635M

GPU 时钟频率:950 Mhz

内存时钟速率:900 Mhz

它们都具有几乎相同的时钟频率。那么为什么 FFT 在 Jetson 上花费更多时间并且显示较差的 GFLOPS/s 呢?

为了查看 FFT 的性能,我编写了一个简单的 CUDA 程序,它在大小为 2048 * 4912 的矩阵上执行一维 FFT。这里的数据是连续的,没有跨步。他们的耗时和 GFLOPS/s 是:

杰特森

3.251 GFLOPS/s 持续时间:1.393 秒

费米GT635M

47.1 GFLOPS/s 持续时间:0.211 秒