この全般的なパフォーマンスの最適化方法は、システムレベルから始まり、アプリケーション・レベルまで網羅します。
最初に、システムレベルのボトルネックがないことを確認します。プロセッサーの使用率が高いことを確認したら、アプリケーションのボトルネックに焦点を絞ります。
一般的に、低いレベルで時間をかけるよりも、高いレベルで時間をかけるほうがより多くのスピードアップを達成できます。
例えば、アプリケーション・レベルでチューニングを開始し、システムレベルのボトルネックによりプロセッサーが 10% の時間しか使用していない場合、アプリケーション・レベルで 50% のスピードアップを達成しても、ワークロード・レベルのスピードアップは 5% しか達成されないことになります。
最短時間で最良のスピードアップを達成するには、これらのステップに沿うことが重要です。
大きく変更した後には、解析を始める前と解析中にアプリケーションのプロセッサー使用率をチェックして、アプリケーションがプロセッサー集中型、入出力集中型、またはその中間のいずれであるかを確認してください。
プロセッサー使用率によって、次のように分類できます。
マルチプロセッサー・システムの 1 つまたは複数のプロセッサーでプロセッサー使用率が低い場合: アプリケーションに多くのシステム・ボトルネック (ネットワーク、ディスク、メモリー使用量、その他) があります。このほかに次の可能性があります。
シングルスレッドのアプリケーションです。
マルチスレッド・アプリケーションですが、スレッドモデルがすべてのプロセッサーを効率的に使用していません。
すべてのプロセッサーでプロセッサー使用率が高い場合: アプリケーションは、プロセッサー集中型です。
アプリケーションのパフォーマンスを向上する方法は 3 種類あります。それぞれの方法は、プロセッサーの使用率に影響します。
I/O と演算のバランス: I/O が終了するまで待機していることが原因で、プロセッサーの使用率が低い場合、I/O と演算のバランスをとることで、アプリケーションの速度を向上できます (バランスをとることで、I/O と演算が同時に実行され、I/O 時間が演算時間によってマスクされます)。通常、I/O と演算のバランスは、システムレベルおよびアプリケーション・レベルのチューニングで行います。
スレッドモデルの向上: アプリケーション・レベルのチューニング技術を利用して、シングルスレッド・アプリケーションにマルチスレッド機能を追加するか、またはマルチスレッド・アプリケーションのスレッドモデルを向上することで、すべてのプロセッサー・リソースを効率的に使用してアプリケーションの速度を向上できます。通常、スレッドモデルを向上するとプロセッサーの使用率は向上します。
演算効率の改善: より低いまたはより高い効率の演算の使用も、アプリケーションの速度に影響します。I/O の作業量が同じで、I/O 時間が演算時間でマスクされていない場合、プロセッサーの使用率は低下します (これは、ワークロード全体の実行時間に対して I/O を待機する時間が高い比率を占めてしまうためです)。これらの変更は、アプリケーション・レベルのチューニングで行います。
いくつかのシステムレベルの最適化を行うことで、全体的なアプリケーションのパフォーマンスを向上することができます。
例:
システムバスのボトルネックを引き起こす、システムバスの部分書き込みの削除。
バイト単位でメモリーを読み込まないアプリケーションのコードの最適化。
順序 |
チューニング・レベル |
ゴール |
調査する主な領域 |
---|---|---|---|
1 |
高: システムレベル |
アプリケーションとシステムの相互作用を改善することにより、アプリケーションをスピードアップします。 |
|
2 |
中: アプリケーション・レベル |
アプリケーションのアルゴリズムを改善することにより、アプリケーションをスピードアップします。 |
|
インテル(R) VTune(TM) Amplifier XE を使用してアプリケーション・レベルのチューニングを行うことで、少ない労力で最高のパフォーマンスを実現してください。
© 2010 Intel Corporation. 無断での引用、転載を禁じます。