Sun N1 Grid Engine 6.1 ユーザーズガイド

qmake による並列 Makefile 処理

qmake は、標準的な UNIX make 機能の代わりとなる機能です。qmake は、適切なマシンのクラスタ上で make の各手順の分散を可能にすることにより、make の機能を拡張したものです。qmake は、よく使用される GNU-make 機能の gmake を基に構築されています。gmake の関係については、 sge-root/3rd_party の情報を参照してください。

分散 make プロセスを最後まで実行できるように、 qmake はまず、必要なリソースを並列ジョブと同じような方法で割り当てます。qmake は、次にスケジューリング機能と対話せずに、このリソースのセットを管理します。リソースが使用可能になると、qmake-inherit オプションを設定した qrsh 機能を使用して、 make の手順を分散させます。

qrsh は、標準出力、エラー出力と標準入力の処理、およびリモートで実行されている make 手順への端末制御接続を提供します。このため、 make 手続きのローカル実行と qmake の使用との間には、明確な違いが 3 つあるだけです。

make がもっとも一般的に使用されるのは、複雑なソフトウェアパッケージのコンパイルです。しかし、qmake はコンパイルにはそれほど使用されないこともあります。プログラムファイルは、適切なプログラミングの結果、かなり小さくなることがよくあります。したがって、1 つのプログラムファイルのコンパイル (1 つの make 手順) は、大部分の場合、数秒しかかかりません。さらに通常、コンパイルでは大量のファイルアクセスが行われます。ネスト化されたインクルードファイルは、この問題の原因となりえます。ファイルサーバーがボトルネックとなることがあるため、複数の make 手順に対してコンパイルを並行して実行した場合、ファイルのアクセス速度を速めることができない場合があります。ボトルネックは、すべてのファイルアクセスを事実上直列化するからです。したがって、満足のいく形ではコンパイルプロセスを高速化できない場合があります。

qmake は、その他の使用方法においてより効果を発揮できます。たとえば、makefile によって相互依存関係や複雑な分析処理の作業フローを管理することができます。この環境での make の各手順は一般的に、無視できないリソースとコンピュータ処理時間要件を持つシミュレーションやデータ分析処理です。この場合は、かなりの高速化を達成できます。

qmake の使用

qmake のコマンド行構文は、qrsh の構文と同じようにみえます。


% qmake [-pe pe-name pe-range][options] \
 -- [gnu-make-options][target]

注 –

-inherit オプションは、この節の後半に説明がある qmake によってもサポートされています。


-pe オプションの使用と gmake -j オプションとの関係に特に注意してください。両方のオプションは、達成する並列化の量を表すために使用できます。違いは、 gmake-j を使用して、使用される並列環境などを指定できないことです。したがって、qmake は、make と呼ばれる並列 make 用のデフォルト環境が構成されていることを前提にします。さらに、gmake-j では、範囲の指定はできず、1 つの数字しか設定できません。qmake は、-j によって指定された数字を 1-n の範囲として解釈します。これと対照的に、-pe ではこれらのパラメータすべてを詳細に指定できます。結果として、次の 2 つのコマンド行例の意味は同じになります。


% qmake -- -j 10
% qmake -pe make 1-10 --

次の コマンド行は、-j オプションを使用して表現することはできません。


% qmake -pe make 5-10,16 --
% qmake -pe mpi 1-99999 --

構文以外に、qmake は 2 つの呼び出しモードをサポートしています。-inherit オプションを使用せずにコマンド行から対話方式で呼び出すモードと -inherit オプションによってバッチジョブ内で呼び出すモードがあります。これらの 2 つのモードは、次のような別の処理シーケンスを開始します。

詳細は、qmake(1) のマニュアルページを参照してください。