问题标签 [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.
c++ - 使用“cuFFT 设备回调”
这是我的第一个问题,所以我会尽量详细。我正在努力在 CUDA 6.5 中实现降噪算法。我的代码基于这个 Matlab 实现: http: //pastebin.com/HLVq48C1。
我很想使用新的 cuFFT 设备回调功能,但我被困在cufftXtSetCallback上。每次我的 cufftResult 都是CUFFT_NOT_IMPLEMENTED (14)。即使 nVidia 提供的示例也以同样的方式失败......我的设备回调测试代码:
我的代码的CUDA部分:
我知道我只是 CUDA 的初学者。我的问题是:
如何正确调用 cufftXtSetCallback 或导致此错误的原因是什么?
cuda - cuFFT 输出不正确
我对这个程序有一个问题:
我想转换一个信号,然后逆向返回,但是前半部分的输出是错误的。
你能帮我找出错误吗?
非常感谢!
cuda - cufftGetSize1d 中的 CUFFT_INVALID_VALUE
使用cufftGetSize1d
(或任何cufftGetSize*
)功能的正确方法是什么?
我试过:
CUFFT_INVALID_VALUE
但是,无论我使用的大小、类型或批次如何,最后一次调用的结果始终是。2d 和 3d 变体也是如此。cufftEstimate1d
工作正常。
cuda - 如何通过 cufft 获得完整的 fft 系数?
我正在通过 cufft 进行二维 fft 处理。处理类型是实数到复数,所以输出数组的大小是 NX * (NY / 2 + 1),这是非冗余的。但我需要包含冗余系数的完整系数。我怎样才能得到它们?提前致谢。
cuda - CUDA 中 3D 矩阵的列和行的 1D FFT
我正在尝试使用cufftPlanMany
. 数据集来自一个 3D 字段,存储在一个 1D 数组中,我想在其中计算x
和y
方向的 1D FFT。数据存储如下图所示;接连在x
接。y
z
x
在 -方向上进行批量 FFT (我相信)是直截了当的;使用输入和stride=1
,它计算元素、、、上的 FFT 。但是,我想不出一种方法来为 -方向的 FFT 实现相同的效果。每个平面的批次再次简单明了(输入, ,导致 FFT 超过,等)。但与,从到,距离大于。这可以通过 cufftPlanMany 以某种方式完成吗? distance=nx
batch=ny * nz
{0,1,2,3}
{4,5,6,7}
...
{28,29,30,31}
y
xy
stride=nx
dist=1
batch=nx
{0,4,8,12}
{1,5,9,13}
batch=nx * nz
{3,7,11,15}
{16,20,24,28}
1
c++ - 是否可以将批处理 FFT 与 CUDA 的 cuFFT 库和 cufftPlanMany 重叠?
我正在尝试并行化称为 Chromaprint 的声学指纹库的 FFT 变换。它的工作原理是“将原始音频分割成许多重叠的帧并对其应用傅里叶变换”。Chromaprint 使用 4096 的帧大小,有 2/3 的重叠。例如,第一帧由元素 [0...4095] 组成,然后第二帧类似于 [1366.. 5462]。
使用 cufftPlanMany,我知道您可以指定大小为 4096 的批次,这将执行 [0...4095]、[4096...8192] 等批次。是否有某种方法可以使批量转换重叠,或者应该我考虑另一种不使用批处理执行的方法?
python - 使用 Python 多处理和 pyfft 使用 GPU 计算多个 FFT:如何避免 GPU 内存泄漏?
我正在尝试在 Python 中使用pycuda和pyfft包为多 CPU 和单 GPU计算实现以下模式。
我想要几个进程(例如使用 multiprocessing.Pool() 启动),每个进程都能够使用 GPU(使用 NVIDIA CUDA)执行 FFT。
但是,我有以下问题:
如果我运行太多进程或每个进程有太多 FFT,则整个脚本将保持暂停状态而不会终止(并且不会计算所有到期的 FFT)。通过进一步的调查,我认为这是由于 GPU 的内存限制(目前 NVIDIA GeForce GT 750M 上的内存限制为 2048MB)。似乎多处理池无法重新获得控制权。有没有办法避免这种情况?
由于每个进程需要少于 2048 MB,我希望有一个类似队列的东西,每个进程都可以预订GPU 的使用,当一个进程释放上下文时,队列中的下一个进程开始使用它。这是可行的吗?
或者,是否可以强制在给定时间只有一个进程使用 GPU?
我已经分别尝试了这些解决方案,但它们不起作用(或者我可能没有正确实现它们):
- 使用 proc_stream.synchronize() 同步流
- 使用 pycuda.tools.clear_context_caches() 清除上下文缓存
- 更改计算模式,使用 cuda.compute_mode = cuda.compute_mode.EXCLUSIVE
注意:解决方案 2. 似乎释放了一些内存,但它使计算方式变慢,并且没有解决问题:例如增加要计算的 fft 数量,脚本显示相同的行为。
这里是代码。从一个简单的任务开始,这里每个进程计算 1 个 FFT(然后可以使用 execute() 中的批处理选项连续执行更多 FFT)。
这里是函数包装器:
现在,使用 nffts=16 和 pool_size=4 脚本正确终止并给出以下输出:
但是使用 nffts=18 和 pool_size=4 脚本不会终止并给出这个输出,仍然停留在最后一行:
非常感谢您的帮助!
cuda - 使用 cucomplex.h 操作袖带数据
我是新来的。我正在使用 FFT,我需要编写一个简单的代码,但它不起作用。我需要用 cufft a sin(x) 进行变换并返回,但在变换之间,我需要将结果乘以 2,这样,当我使用逆变换返回结果时,我将得到 2*sin( x) 例如。使用 fftw.h,我只需将我的 d_signal[i] 乘以 2,当我返回时,我有 2*sin(x),但我曾经使用 complex.h。任何想法?谢谢。
}
简单的转换代码
结果
android - Shield 平板电脑上的 CUDA CUFFT
我尝试使用 CUFFT 修改 Shield Tablet 上的 CUDA 示例。但是,当我构建程序时,我得到了链接错误undefined reference to 'cufftExecR2C'
:undefined reference to 'cufftExecC2R'
.
我认为错误可能是由于缺少 .so 文件引起的。然后我在 Android.mk 文件中添加了 libcufft.so,例如:
我仍然遇到同样的错误。谁能帮助我并指出正确的方向?
非常感谢。
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 秒