私はGPUのプログラミングには全く新しいですが、計算量の多いタスクがあるので、パフォーマンスの向上のためにGPUを使用しました。ArrayFireと未処理のCUDAプログラミングはどちらですか?
ArrayFire Freeバージョンでプログラムを書き直そうとしました。実際には、マルチスレッドが有効になっているが、予想した程度(すなわち、<の100%のスピードアップ)ではなく、CPUルーチンよりもCPUルーチンよりも高速で、返された結果は正しくありません(< CPUルーチンと比較して1% CPUルーチンの結果は正しい)。
私の仕事は、大規模な行列(300MB-500MBサイズ)での要素的な浮動小数点演算ですが、if-thens/switch-caseなどはほとんどありません。パフォーマンスのボトルネックはCPUとGPUの間の帯域幅私は、3GBのビデオメモリを搭載したGeForce 580GTXをテストしました。
私のタスクにArrayFireを使用する代わりに、生のCUDAコード(CUBLASなど、平均的な最適化)を書くと、最適化の余地はまだありますか? NVIDIAの最適化ガイドを読みました。高速なデータアクセスと銀行間の競合を減らすために、そこにメモリアクセストリックが存在するようです。 ArrayFireはこれらの一般的なトリックを自動的に使うのですか?
IEEE仕様に準拠していませんか?両方で「単精度」を使用すると同じ結果が得られるはずです。ここでも計算の順序は同じであると仮定します。 – Royi