インテル®コンパイラー OpenMP*入門
デュアルコア・マルチコア対応アプリケーション開発@
<< 9 >>
5 . マルチスレッド対応のための開発ツール
先に述べたようにデュアルコアとマルチコア上でのアプリケーションの高速化には、アプリケーションの実行時に、
複数のスレッドが並列に処理を行うことが必要になります。ここで問題となるのはアプリケーション・プログラムに対し
て、 並列処理を適用する為の特別な作業 ( OS が 提供するスレッド制御の API を使用) やそのための開発工数が 必要
になるかということです。実際には、マルチスレッド化や並列化といった作業にはそれほどの時間を必要とするもので
はありません。マルチスレッド対応の開発ツールがあれば、これらの並列化は容易に行うことが可能です。プログラ
ムの開発者やプログラマは、プログラムの本質的なロジックを記述することに専念し、並列化については、既に高度
に最適化・並列化されたライブラリーを利用したり、並列化コンパイラーの支援をしたりすることによって、プログラム
のマルチスレッド化を図ることが現在では可能になっています。
インテルのソフトウェア開発ツール「インテル® コンパイラーバージョン 9.0」は、 優れたマルチスレッド対応の開発
ツールです。32bitと 64bit Linux* および 32bitと 64bit Windows* のオブジェクト・コードを作成し、それぞれのプ
ラットフォームでのプログラムの性能を最大限に引き出すことが可能です。
バージョン 9.0 でサポートされているプログラムのマルチスレッド化機能は、大きく 2 つに分けられます。1 つは自
動並列化、そしてもう 1 つが OpenMP* のサポートです。自動並列化では、その名の通り、コンパイラーがソースコー
ドを解析し、自動的にプログラムの構造に適したマルチスレッド実行が可能な実行モジュールを作成します。自動並
列化のオプションによって、アプリケーション内で複数の実行スレッドや拡張機能が自動作成されるようになります。生
成されるバイナリはマルチコア・プラットフォーム向けに最適化され、アプリケーション処理性能の効率化が図られます。
OpenMP* は、ユーザーがプログラムの並列化を指示する宣言子をプログラム中に記述することで、マルチスレッ
ド並列プログラムを開発する枠組みを提供します。 バージョン 9.0 では、OpenMP*2.5 仕様の 実装により、最新の
OpenMP* の機能が 利用可能となっています。
ソフトウェア開発者や研究者がプログラムを開発する目的は、そのプログラムの並列化を行うためではありません。
ある処理、解析を目的にプログラムを書き、そのプログラムをプラットフォーム上で効率良く、高速に実行できること
を目的としています。インテル® コンパイラーをはじめ、並列化に対応したコンパイル・ツールは、並列化という必要
ではあるが本質的ではない手間のかかる作業を開発者の代わりに行います。これにより、開発者がプログラム開発
における本来の目的である、アルゴリズムの実装やロジックの検証のための作業に専念することができます。
5 .1 自動並列化
自動並列化は、ループとプログラム構造をコンパイラーが解析し、プログラム中で並列実行可能な領域を見つける、
高度なプログラム解析機能に基づいた並列処理です。自動認識された並列実行領域は、その領域内でのマルチス
レッド並列プログラムとして実行されます。ループの展開やデータのアライメントの共有、スレッドのスケジューリング、
同期化といった、低レベルの細かい作業をプログラマーが行わなくても並列化が行われるようになり、マルチプロセッ
サー・システムやハイパースレッディング・テクノロジー対応システムが持つスレッド機能を十分に活かすことができます。
自動並列化は、コンパイル時にコンパイル・オプションとして、/Qparallel スイッチ ( Windows*) スイッチ
( Linux*) を指定することで可能となります。これらのオプションが指定されると、コンパイラーは入力されたファイルに
対してその並列処理の可能性の解析と並列化のための最適化を行います。
実際には、どのように変換されるか実際に見ていきます。