3

医用画像機器を作っています。より高速な機器を作るためにCUDAを使いたい

CCD から 1024 サイズの 1d データを 512 回受信しました。IFFT を実行する前に、高性能補間アルゴリズム (キュービック スプライン補間など) をそれぞれ 1024 サイズのデータ​​に適用する必要があります (その後、1 次元補間を 512 回)。

  1. キュービック スプライン補間を実行する CUDA ライブラリはありますか? (ライブラリが1つあることがわかりましたが、2次元または3次元の画像用です。他の複雑なフィルタリング機能を実行する必要があるため、テクスチャメモリではなくグローバルメモリ上のデータが必要です。)

  2. NUFFT (非一様高速フーリエ変換) ライブラリはありますか (CUDA 用に作成する必要はありません)? NUFFT 機能があれば、補間と IFFT を別々に行う必要がなくなり、さらに高速な機器を作成できるのではないかと考えています。

4

4 に答える 4

3

より多くの人がこれを尋ねてきたので、CUDA 3 次補間コードを 1D 3 次補間でも拡張しました。ここで更新されたコードを見つけることができます: http://www.dannyruijters.nl/cubicinterpolation/

1D 3 次補間も含む CUDA の実例は、 CI.zip の examples サブディレクトリにある cudaAccuracyTest サンプルにあります

SSE アプローチに関心のある方のために、examples サブディレクトリの referenceCubicTexture3D サンプルに、動作する SSE 最適化マルチスレッド キュービック補間コード (1D ではなく 3D ですが) があります。

編集: 3 次補間コードがgithubで利用できるようになりました。1D キュービック補間コードはこちらです。

于 2012-10-31T15:33:54.370 に答える
1

#1について

Ruijters の bi/tricubic スプライン補間( http://dannyruijters.nl/cubicinterpolationを参照) (編集済み!) は 1D データで動作するようになりました。ありがとうございます! このページの Danny Ruijters の回答を参照してください。

#2について

私が認識しているいくつかの NUFFT 実装と、それらについての簡単な考えを次に示します。

  1. @ardiyu07 によって言及された最初のライブラリ、Greengard などによる高速ガウス グリッディングの実装は Fortran にありますが、私にはわかりません。 -不均一な変換)。
  2. 2 つ目は、Matlab/MEX での Greengard のアルゴリズムの Ferrara の実装であり、正しい解決策を得ることができませんでした (投稿したばかりの Mathworks FileExchange に関する私のコメントを参照してください)。
  3. Potts, et al., http://www-user.tu-chemnitz.de/~potts/nfft/これを Windows でコンパイルすることができなかったので、あきらめました。また、タイプ III NUFFT も備えています。
  4. Fessler, et al., http://web.eecs.umich.edu/~fessler/code/ Matlab/MEX で書かれ、少なくとも Linux と Windows 用に提供されたコンパイル済みバイナリ。プロではないプログラマーによって書かれていることは間違いありませんが、私が正しく動作するようになったのは 4 つのうちの 1 つだけです。Octave はコンパイル済みの MEX バイナリを使用できるため、いくつかの場所で Matlab ソース コードを変更した後 (基本的には Octave エラーが発生した場所を確認することによって)、GNU Octave でも動作するようになりました。これは、min-max 基準に基づいて、Greengard または Potts とは異なるアルゴリズムも使用します (その解は最大 DFT エラーを最小化することが保証されています) が、タイプ III NUFFT がありません (タイプ I および II のみ: ドメインの 1 つが均一であること)。
  5. 5 番目の NUFFT/「グリッディング」の実装は Hargreaves 氏らによるものだと思います: http://www-mrsrl.stanford.edu/~brian/gridding/ ( http://dx.doi.org/10.1109/の論文) TMI.2005.848376 )。Matlab/MEX にあります。そのままでは、このリストの前の 4 つほど汎用的ではなく、MRI コンテキストに非常に組み込まれています。
  6. Cython (高速 Python) での 6 番目の実装は、タイプ III の非一様から非一様への変換と、残念ながら GPL の下でのその他の優れた機能を備えています。

私は氷河のようなペースで、Fessler のアルゴリズムを Python/Cython、そしておそらく CUDA に移植することに取り組んでいます (「おそらく」は、標準の (CU)FFT と線形補間をゼロでパディングするだけで十分に機能するように思われるからです)。幸運を祈ります。

于 2012-06-28T10:55:04.130 に答える
0

正直なところ、GPUの並列処理は少し低いようです。SSE最適化を備えた6coreは、ここではGPUよりもパフォーマンスが優れている可能性があります。

于 2012-07-07T23:41:47.413 に答える
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 に答える