無料の食事は実際に終了しました

Herb Sutterによる有名な記事「 無料のランチは終わりました。ソフトウェアの並行性への根本的な転換 」があります。 それは、マイクロプロセッサのクロック周波数の増加をもはや望んではならないと言う。 プログラムの生産性を向上させるには、マイクロプロセッサーでいくつかのコアを使用する必要があります。 この記事は2005年に作成されましたが、これまでのところ、実際の行動ガイドよりも理論的なものでした。 以前は、新しいコンピューターを購入するときに常に加速していました。 しかし、それが起こらなかった瞬間がやってきました。

画像

図1-古いマシンと新しいマシンでのユニットテストの実行時間。



PVS-Studioプロジェクトを開発するとき、私たちは定期的にテストを使用します。2つのコアを持つマシンでの実行時間は約90分でした。 それほど長くはありませんが、ランチには合いません。 PVS-Studioの作業は、C / C ++でソースコードを分析し、Visual Studio 2005/2008のユーザーに追加の警告を発行することです。この場合、プログラムは64ビットまたは並列システムでは正しくない可能性があります。 消費される主なリソースは、コアの数と速度、およびRAMの量です。 古典的なカウントの問題。 さらに、大きな配列を処理するときに発生する64ビットエラーの実験のために、4 GBのメモリが不足することがありました。 一言で言えば、私はもう少し強力な作業機械が欲しかったです:-)。



それは:

インテル®Core™2 DuoプロセッサーE7200、2.40 Ghz、4 Gb、64ビット。 Windows Vista 64ビットオペレーティングシステム。



次のようになりました:

Intel®Core™2クアッドプロセッサQ9400、2.66 Ghz、8 Gb、64ビット。 Windows 7 64ビットオペレーティングシステム。



残りのパラメーターは意味がありません。 ビデオカードは異なりますが、 静的コード分析の速度には影響しません。 サイズは異なるが同じクラスのハードドライブ。



それでは、これらのシステムを比較してみましょう。 分析は一方的であり、全体像を反映できないことをすぐに強調しなければなりません。 目標は、2つのプロセッサのパフォーマンスを正確に比較することではありませんでした。 興味のある問題の解決速度を調査しました。



まず、内部単体テストの速度を比較しました。 単体テストでは1つのコアのみを使用しますが、クロック速度がわずかに高いため、パフォーマンスがわずかに向上すると予想されました。 結果は正反対でした!

画像

図2-アナライザーの64ビットバージョンの単体テスト速度の測定。 5回の実行の平均稼働時間が示されています。



このようなパフォーマンス障害の原因はわかりません。 したがって、この測定についてはコメントしません。



この実験は非常に不正確かもしれません。 現在のテストに合格します。 大規模なテストの速度を比較します。

画像

図3-32のソフトウェアプロジェクトがテストされる長いテストの実行。 テストプロセスには、Visual C ++コンパイラ、PVS-Studioアナライザー、および返された結果を比較するシステムが含まれます。



画像

図4-同じですが、グラフの形式です。



新しいシステムで2つのコアのみを使用する場合、作業速度は2つのコアを持つ古いマシンでの作業速度と一致します。 コア周波数が高いため、加速はありません。 4つのコアを使用すると、結果はずっと良くなります。 目標は達成されました-テストは1時間で収まります。 加速が2回発生しないという事実は、テストプロセスが完全に並列ではなく、順次手順を含むという事実によるものです。



速度測定でこのようなデータが取得された理由と、エラーの原因についての理論を構築したくありません。 景品が終わったときが来たと言いたいです。 多数のコアを持つ新しいコンピューターを購入する場合、古いプログラムがより高速に動作することを期待しないでください。 この利点は、複数のコアを使用できるプログラムを使用することでのみ得られます。



All Articles