2011-12-14 35 views
0

Iカーブを持っている:のCUDA線形補間は

のをf(3)私は(のは、Fを言わせて補間するために、1と4 間の線形補間を使用しましょう補間するために
float points[] = {1, 4, 6, 9, 14, 25, 69}; 
float images[] = {0.3, 0.4, 0.7, 0.9, 1, 2.5, 5.3}; 

15)私はポイントの配列にバイナリ検索を適用し、25のlowerBoundを取得し、インターバル[14,25]などの内挿を考慮する。

このメソッドは私のデバイスを作ることがわかった機能は非常に遅いです。私はそうするためにテクスチャメモリとtex1Dを使うことができると聞きました!たとえポイント[]がユニフォームとは言わないとしても(一定のステップでインクリメントされます)

ご存知ですか?

答えて

1

は、それが二つの部分に分けることができ、この問題のように見える:

  1. (x)は0と7との間の浮動小数点指数にFのx値を変換するために、ポイント・アレイを使用して(上のバイナリ検索を必要と浮動小数点指数は画像アレイのCUDAテクスチャメモリは、ステップ2は非常に速く行うことができ

から直線的に補間された値を取得する点[])

  • 使用。しかし、私はあなたのカーネルのほとんどの時間がステップ1に費やされていると推測しています。テクスチャメモリがあなたに役立つとは思いません。

    共有メモリをまだ利用していない場合は、配列を共有メモリに移動すると、テクスチャメモリを使用するよりもはるかに高速です。最近のハードウェアには48kの共有メモリがあるので、配列が24k(6k要素)未満の場合は共用メモリに収まる必要があります。ステップ1は、グローバルメモリにおいて非常に遅い点[]の非連続的な読み出しを必要とするため、共有メモリから大きく利益を得ることができる。

    あなたの配列が共有メモリに収まらない場合は、配列をそれぞれ6k要素の等しいサイズの断片に分解し、各要素をブロックに割り当てる必要があります。それぞれのブロックにあなたが反復しているすべての点を読み込ませ、共有メモリに保存されている点[]配列の部分にない場合には点を無視させます。

  • 関連する問題