0

CULA ルーチン dgesv と MKL ルーチン dgesv を使用して行列方程式 Ax=b を解く CUDA C および C プログラムを作成しました。小さなデータセットの場合、CPU プログラムは GPU プログラムよりも高速のようです。しかし、データ セットが 500 を超えると、GPU が CPU に勝ります。i3 CPU と Geforce 525M GPU を搭載した Dell ラップトップを使用しています。GPU の初期の遅いパフォーマンスの最も適切な説明は何ですか?

2 つのベクトルを取り、それらを乗算して結果を加算する別のプログラムを作成しました。これは、結果がスカラーではなくベクトル和であるという点だけで内積と同じです。このプログラムでは、小さなデータセットでも GPU が CPU よりも高速です。同じノートを使っています。上記で説明したものと比較して、小さなデータセットでもこのプログラムで GPU が高速なのはなぜですか? 合計に多くの計算が含まれていないためですか?

4

1 に答える 1

2

大規模なデータ セットと比較して、小規模なデータ セットでは GPU の関心が低くなることは珍しくありません。この理由は、特定のアルゴリズムによって異なります。一般に、GPU は CPU よりも高いメイン メモリ帯域幅を備えており、負荷の高い数値計算では通常、GPU よりも優れたパフォーマンスを発揮します。しかし、GPU は通常、問題に固有の並列処理が存在する場合にのみ適切に機能し、それが明らかになる可能性があります。この並列処理を利用することで、アルゴリズムはより大きなメモリ帯域幅とより高い計算能力を利用できるようになります。

ただし、GPU が何かを行う前に、GPU にデータを取得する必要があります。そして、これにより、CPU バージョンには通常存在しないコードの GPU バージョンに「コスト」が発生します。

より正確に言うと、GPU での計算時間の削減 (CPU による) がデータ転送のコストを上回る場合、GPU はメリットをもたらします。一次方程式系を解くことは、O(n^2) から O(n^3) の複雑さのどこかにあると思います。n が非常に小さい場合、この計算の複雑さは、データ転送のコストを相殺するのに十分な大きさではない可能性があります。しかし、明らかにnが大きくなるにつれて、そうあるべきです。一方、ベクトル演算は O(n) の複雑さしかない場合があります。したがって、利益のシナリオは異なって見えます。

O(n^2) または O(n^3) の場合、より大きなデータ セットに移動すると、データを転送するための "コスト" は O(n) として増加しますが、ソリューションの計算要件は O( n^2) (または O(n^3))。したがって、データセットが大きいほど、コンピューティングワークロードが指数関数的に大きくなり、データ転送の「コスト」の影響が軽減されます。一方、O(n) 問題には、おそらくこのスケーリング ダイナミクスはありません。ワークロードは、データ転送の「コスト」と同じ割合で増加します。

また、GPU へのデータ転送の「コスト」を計算作業と重ねることで隠すことができる場合、重複部分の「コスト」は「無料」になります。つまり、全体の解決時間には寄与しません。

于 2013-01-08T23:12:26.797 に答える