适用于 GPU 的 OpenCL FFT 库?
是否有任何通用 FFT 库可用于使用 OpenCL 在 GPU 上运行?据我所知,Apple 的二次方 OpenCL FFT 示例代码是唯一可用的此类代码?
是否存在用于非二次幂变换大小的此类库?如果不是,修改 Apple OpenCL 示例有多容易或多困难?
我正在研究具有非二次方变换大小的图像处理应用程序,并且我将不得不进行大量 FFT,即批量 FFT。
Is there any general FFT lib available for running on the GPU using OpenCL? As far as my knowledge goes, Apple sample code for power-of-two OpenCL FFT is the only such code available?
Does any such library exist for non-power-of-two transform sizes? If not, how easy or difficult is it to modify the Apple OpenCL sample?
I am looking at image processing applications, with non-power-of-two transform sizes, and I will have to do a whole bunch of FFTs, a batched FFT.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
尝试AMD开发的clFFT。它针对的是 AMD 显卡,但也应该适用于 nVidia GPU。它可以转换基数为 2、3 和 5(及其组合)的数组。
https://github.com/clMathLibraries/clFFT
有可用的 python 绑定
https://github.com/geggo/gpyfft
Try clFFT developed by AMD. It is aimed at AMD graphic cards, but should work on nVidia GPU's too. It can transform arrays with a radix of 2, 3 and 5 (and combinations there off).
https://github.com/clMathLibraries/clFFT
There are python bindings available
https://github.com/geggo/gpyfft
我知道目前正在开发一个 OpenCL FFT 库,
但他们不打算在第一个版本中使用非二次方变换大小。
您能提供有关您的申请的任何信息吗?如果很多人都可以使用该功能,那么提高该功能的优先级可能会有所帮助。
I know of an OpenCL FFT library that is currently under development,
but they don't plan on having non-power-of-two transform sizes in the first release.
Can you provide any information about your application? It might help to get the priority for that feature raised if it's something a lot of people can use.
您可以从 SHOC 基准测试套件 下载一些 OpenCL 代码示例,包括 FFT。
You can download some OpenCL code samples including FFT from the SHOC benchmark suite.
空填充可用于使任意长度的数据适合二次方 FFT 算法。考虑这是否适合您的应用。
增加样本数量会减小输出域中的“步长”,这意味着更高的输出分辨率。
Null-padding can be used to make arbitrary-length data fit for a power-of-two FFT algorithm. Consider if that would suit your application.
Increasing the number of samples decreases the "step size" in the output domain, which means higher output resolution.
OpenMM (https://simtk.org/home/openmm) 包含用于 OpenCL 的 3D FFT。它可能无法直接为您工作,因为它是针对特定情况而设计的:3D FFT,其中每个维度都足够小,可以存储在本地内存中(例如 100x100x100 网格)。但它确实支持非二次方大小(基数 2、3、4 和 5),因此您也许可以对其进行调整。
OpenMM (https://simtk.org/home/openmm) contains a 3D FFT for OpenCL. It may not work for you directly, since it's designed for a specific case: 3D FFTs where each dimension is small enough to be stored in local memory (e.g. a 100x100x100 grid). But it does support non-power-of-two sizes (radix 2, 3, 4, and 5), so you might be able to adapt it.
VexCL 为 OpenCL 提供了一种 FFT 实现,它接受任意向量表达式作为输入,允许执行多维变换(任意数量的维度),并支持任意大小的向量。这是其自述文件相关部分的链接。
VexCL provides an implementation of FFT for OpenCL that accepts arbitrary vector expressions as input, allows one to perform multidimensional transforms (of any number of dimensions), and supports arbitrary sized vectors. Here is a link to the relevant part of its README.
查看 APPML-FFT 库。尽管它仍然是两次变换的力量。
Have a look at APPML-FFT library. Though its still for power of two transforms.