3

我正在制作医学成像设备。我想用 CUDA 来制造更快的设备

我从 CCD 接收 1024 大小的一维数据 512 次。在我执行 IFFT 之前,我必须将高性能插值算法(如三次样条插值)应用于每个 1024 大小的数据(然后 1d 插值 512 次)。

  1. 是否有任何 CUDA 库来执行三次样条插值?(我发现有一个库,但它是针对 2 或 3 维图像的。由于我需要执行其他复杂的过滤功能,我需要全局内存上的数据,而不是纹理内存上的数据。)

  2. 是否有任何 NUFFT(非统一快速傅里叶变换)库(不需要为 CUDA 编写)?我在想,如果我有 NUFFT 功能,我就不必分别进行插值和 IFFT,这可以制造更快的设备。

4

4 回答 4

3

Since more people have asked this, I have extended my CUDA cubic interpolation code with 1D cubic interpolation as well. You can find the updated code here: http://www.dannyruijters.nl/cubicinterpolation/

A working CUDA example that also contains 1D cubic interpolation can be found in the cudaAccuracyTest sample in the examples subdirectory in CI.zip.

For those of you who are more interested in a SSE approach, I have some working SSE optimized multi-threaded cubic interpolation code (albeit in 3D, not 1D) in the referenceCubicTexture3D sample in the examples subdirectory.

edit: The cubic interpolation code is now available on github. The 1D cubic interpolation code is here.

于 2012-10-31T15:33:54.370 回答
1

关于#1

Ruijters 的双/三次样条插值,我认为你指的是http://dannyruijters.nl/cubicinterpolation,(已编辑!)现在适用于一维数据,谢谢!请参阅此页面上 Danny Ruijters 的回答。

关于#2

这是我知道的一些 NUFFT 实现,以及对它们的简要想法。

  1. @ardiyu07 提到的第一个库,Greengard 等人的快速高斯网格实现是在 Fortran 中,我不知道,所以我没有看太久(尽管它确实提供了 type-III nonuniform-to -非均匀变换)。
  2. 第二个是 Ferrara 在 Matlab/MEX 中实现 Greengard 算法,我无法得到它给我正确的解决方案(请参阅我刚刚发布的关于 Mathworks FileExchange 的评论)。
  3. Potts, et al., http://www-user.tu-chemnitz.de/~potts/nfft/我无法让它在 Windows 中编译,所以我放弃了。它还具有 III 型 NUFFT。
  4. Fessler 等人,http: //web.eecs.umich.edu/~fessler/code/用 Matlab/MEX 编写,至少为 Linux 和 Windows 提供了预编译的二进制文件。绝对是由非专业程序员编写的,但它是我能够正确工作的 4 个中唯一的一个。我什至在几个地方更改了他们的 Matlab 源代码后(基本上是通过查看 Octave 错误出现的位置)让它在 GNU Octave 中工作,因为 Octave 可以使用预编译的 MEX 二进制文件。这也使用了与 Greengard 或 Potts 不同的算法,基于 min-max 标准(其解决方案保证最小化最大 DFT 误差),但缺少类型 III NUFFT(仅类型 I 和 II:其中一个域具有统一)。
  5. 我相信第五个 NUFFT/“gridding”的实现是 Hargreaves 等人的:http ://www-mrsrl.stanford.edu/~brian/gridding/ (论文在http://dx.doi.org/10.1109/ TMI.2005.848376)。它在 Matlab/MEX 中。事实上,它不像这个列表中的前四个那样通用,因为它非常嵌入在它的 MRI 环境中。
  6. 这是第六个实现,在 Cython(快速 Python)中,具有类型 III 非均匀到非均匀的转换和一些其他不错的特性,唉,在 GPL 下:https ://github.com/mrbell/gfft

我正在以缓慢的速度将 Fessler 的算法移植到 Python/Cython,也许还有 CUDA(“可能”,因为只需对标准 (CU)FFT 和线性插值进行零填充似乎就足够好了)。祝你好运。

于 2012-06-28T10:55:04.130 回答
0
  1. 我不知道那个算法,但是如果你发现你认为你的设备足够快,那么你为什么不将实现从使用纹理内存更改为只是一个简单的数组,也许你可以使用共享来提高速度记忆?

  2. 我发现了一些用 matlab 和 fortran 77 编写的:

    http://www.cims.nyu.edu/cmcl/nufft/nufft.html

    http://www.mathworks.com/matlabcentral/fileexchange/25135-nufft-nufft-usffft

于 2012-06-02T02:46:26.237 回答
0

老实说,GPU 的并行度似乎有点低。具有 SSE 优化的 6 核在这里可能会胜过 GPU。

于 2012-07-07T23:41:47.413 回答