16

動機: Karp-Flatt メトリクスとCUDA C コードの並列効率を測定する任務を負っていますが、これには高速化の計算が必要です。特に、これらすべてのメトリックをプロセッサ数の関数としてプロットする必要がありますp

定義: スピードアップとは、並列アルゴリズムが対応する逐次アルゴリズムよりもどれだけ高速であるかを指し、次のように定義されます。

ここに画像の説明を入力

問題:アルゴリズムをCUDA Cに実装し、時間を計って を取得しTpました。ただし、決定にはいくつかの問題が残っていますSp

  • T1コードを最初から完全に書き直さず に観察するにはどうすればよいですか?
    • CUDAコードをシリアルで実行できますか???
  • p異なる数のスレッドで異なるカーネルを実行すると どうなりますか?
    • いいえを指しますか。スレッドの数またはいいえ。ランタイム全体で使用されるプロセッサの数?
    • これらの量はどちらも実行時に変化するため、使用されるのは最大値ですか、それとも平均値ですか?
    • コードをプロセッサのサブセットで実行したり、より少ないスレッドで実行したりするように制限するにはどうすればよいでしょうか!?

どうもありがとう。

4

2 に答える 2

11

妥当なスピードアップの尺度を得るには、実際の逐次プログラムが必要です。高度に調整された並列コードとジャンクなシリアル実装を比較するのは合理的ではないため、それがない場合は、可能な限り最良の順次バージョンを作成する必要があります。

また、並列プログラムの 1 プロセッサ バージョンと N プロセッサ バージョンを合理的に比較して、スピードアップの真の尺度を得ることもできません。このような比較は、同じプログラムの P=1 から P=N へのスピードアップを示しますが、スピードアップ曲線のポイントは、なぜ並列プログラムを構築するのかを示すことです (これは通常より難しく、より複雑なハードウェア [GPU] が必要であり、ツール [OpenCL]) は、より広く利用可能なハードウェアとツールを使用して最適なシーケンシャル バージョンをコーディングするのに比べて理にかなっています。

言い換えれば、不正行為はありません。

于 2013-01-15T21:06:47.173 に答える
0

スピードアップを測定する場合、ほとんどの場合、シリアル アルゴリズムとパラレル アルゴリズムの両方をゼロから完全に作成する必要があります。P=1 の最適な並列アルゴリズムが最適な直列アルゴリズムと共通点があるという特別な理由はありません。ほとんどの場合、並列アルゴリズムは多くの余分な作業を行う必要があり、最適なシリアル アルゴリズムと比較すると非常に非効率的です。

于 2013-01-19T22:48:55.130 に答える