CUDA C++を使用して画像を水平または垂直にミラーリングするための素朴な機能を開発しました。NPP機能は完全に最適化されていませんか?
次に、NVIDIA Performance Primitives Libraryにも画像ミラーリング機能が備わっています。
比較のために、私はNPPに対して私の機能をタイムアウトしました。驚いたことに、私の機能はパフォーマンスが優れていましたが(わずかな差はあるものの、それでもなお...)。
WindowsタイマーとCUDAタイマーを使用して何度か結果を確認しました。
私の質問は次のとおりです。NPP機能はNVIDIA GPU用に完全に最適化されていません?
私は開発用にCUDA 5.0、GeForce GTX460M(Compute 2.1)、Windows 8を使用しています。
違いは何パーセントですか?ミラーリング操作はメモリに束縛され、より新しいデバイスは、それらが効率的にどのようなタイプのメモリアクセスパターンを扱うかに柔軟性がある。素朴な実装は、新しいデバイスでは最適に近いかもしれません。おそらく、NPPバージョンは古いデバイスでうまくいくかもしれません。プロファイラからカーネルのメモリ帯域幅の統計情報を取得し、デバイスの最大値と比較することができます。 –
4種類の画像と2種類のサイズでテストしました。 8ビット、16ビット、1チャネル、3チャネル、(1280×720)、(1920×1080)。私は16ビットの最大スピードアップを得ました。サイズ(1280 x 720)のシングルチャンネル画像で、NPPより18.75%高速でした。 – sgarizvi
あなたは、NPPのパフォーマンスが欠けていることは間違いありません。私はCUDAの画像処理を行うための優れたライブラリを見つけました。私は個人的にArrayFireの画像処理の選択が好きで、高速であることがわかっています。http://www.accelereyes.com/arrayfire/c/group__image__mat.htm OpenCVのGPU機能を使って他の人が報告しましたが、そのことについて。パキスタンのTunacodeにもいくつかのものがあります。 –