我正在制作医疗成像设备。我想用CUDA制作更快的设备
我从CCD接收1024次大小的1d数据。 在我执行IFFT之前 我必须应用高性能插值算法(如三次样条插值) 每个1024个大小的数据(然后1d插值512次)。
是否有任何CUDA库可以执行三次样条插值? (我发现有一个库,但它是2或3维图像。 由于我需要执行其他复杂的过滤功能,我需要全局内存上的数据,而不是纹理内存上的数据。)
是否有任何NUFFT(非均匀快速傅立叶变换)库(不需要为CUDA编写)? 我想如果我有NUFFT功能,我不需要单独进行插值和IFFT,这样可以制作更快的设备。
答案 0 :(得分:3)
由于越来越多的人问过这个问题,我也扩展了我的CUDA三次插值代码和一维三次插值。您可以在此处找到更新的代码:http://www.dannyruijters.nl/cubicinterpolation/
还可以在CI.zip的examples子目录中的cudaAccuracyTest示例中找到包含1D立方插值的工作CUDA示例。
对于那些对SSE方法更感兴趣的人,我在examples子目录的referenceCubicTexture3D示例中有一些SSE优化的多线程三次插值代码(尽管是3D,而不是1D)。
答案 1 :(得分:1)
Ruijters的bi / tricubic样条插值,我认为你所引用的http://dannyruijters.nl/cubicinterpolation,(已编辑!)现在适用于1D数据,谢谢!请参阅Danny Ruijters在此页面上的回答。
以下是我所了解的一些NUFFT实现,以及对它们的简要介绍。
我正在以冰川的速度工作,将Fessler的算法移植到Python / Cython,也许是CUDA(“可能”因为只是对标准(CU)FFT进行零填充和线性插值似乎运行得很好)。祝你好运。
答案 2 :(得分:0)
我不知道那个算法,但是如果你发现你对你的设备的思考速度足够快,那你为什么不把实现从使用纹理内存改为一个简单的数组,也许你使用共享内存可以做更多的加速吗?
我发现一些用matlab和fortran 77编写:
http://www.cims.nyu.edu/cmcl/nufft/nufft.html
http://www.mathworks.com/matlabcentral/fileexchange/25135-nufft-nufft-usffft
答案 3 :(得分:0)
老实说,GPU的并行性似乎有点低。具有SSE优化的6核可能在这里胜过GPU。