Sun ISO C コンパイラには、指定されたループのスケジューリングを戦略的に制御するために、taskloop プラグマと同時に使用するいくつかのプラグマが用意されています。このプラグマの構文を次に示します。
#pragma MP taskloop schedtype (スケジューリング型)
このプラグマによって、並列化されたループをスケジュールするためのスケジューリング型を指定することができます。スケジューリング型には、次のいずれかを指定できます。
static
静的スケジューリングでは、ループのすべての繰り返しが、そのループを処理するすべてのプロセッサに均等に配分されます。次の例について考えてみましょう。
#pragma MP taskloop maxcpus(4)
#pragma MP taskloop schedtype(static)
for (i=0; i<1000; i++) {
...
}
|
前述の例では、4 個のプロセッサが、ループの繰り返しを 250 ずつ処理します。
self [(<チャンクサイズ>)]
自己スケジューリングでは、ループのすべての繰り返しが処理されるまで、固定された回数の繰り返し <チャンクサイズ> を、そのループを処理するそれぞれのプロセッサで処理します。オプションのチャンクサイズには、使用するチャンクサイズを指定します。チャンクサイズは、正の整定数か、もしくは整数型の変数でなければいけません。変数のチャンクサイズが指定された場合は、そのループを開始する前に、その変数が正の整数値であるかどうかが評価されます。最小チャンクサイズが指定されていない場合、もしくは、この値が正でない場合、チャンクサイズはコンパイラによって決められます。次の例について考えてみましょう。
#pragma MP taskloop maxcpus(4)
#pragma MP taskloop schedtype(self(120))
for (i=0; i<1000; i++) {
...
}
|
前述の例では、ループを処理するそれぞれのプロセッサに割り当てられる繰り返し数は、割り当て順に解釈すると次のようになります。
120, 120, 120, 120, 120, 120, 120, 120, 40.
gss [(<最小チャンクサイズ>)]
ガイド付き自己スケジューリング (GSS) では、ループのすべての繰り返しが処理されるまで、可変数の繰り返し (「最小チャンクサイズ」) を、そのループを処理するそれぞれのプロセッサで処理します。オプションの最小チャンクサイズを指定すると、可変なチャンクサイズが最低でも <最小チャンクサイズ> になるように設定されます。最小チャンクサイズは、正の整定数か、もしくは整数型の変数でなければいけません。変数の最小チャンクサイズが指定された場合は、そのループを開始する前に、その変数が正の整数値であるかどうかが評価されます。最小チャンクサイズが指定されていない場合、もしくは、この値が正でない場合、チャンクサイズはコンパイラによって決められます。次の例について考えてみましょう。
#pragma MP taskloop maxcpus(4)
#pragma MP taskloop schedtype(gss(10))
for (i=0; i<1000; i++) {
...
}
|
前述の例では、ループを処理するそれぞれのプロセッサに割り当てられる繰り返し数は、割り当て順に解釈すると次のようになります。
250, 188, 141, 106, 79, 59, 45, 33, 25, 19, 14, 11, 10, 10, 10.
factoring [(<最小チャンクサイズ>)]
ファクタリングスケジューリングでは、ループのすべての繰り返しが処理されるまで、可変数の繰り返し (「最小チャンクサイズ」) を、そのループを処理するそれぞれのプロセッサで処理します。オプションの最小チャンクサイズを指定すると、可変なチャンクサイズが最低でも <最小チャンクサイズ> になるように設定されます。最小チャンクサイズは、正の整定数か、もしくは整数型の変数でなければいけません。変数の最小チャンクサイズが指定された場合は、そのループを開始する前に、その変数が正の整数値であるかどうかが評価されます。最小チャンクサイズが指定されていない場合、もしくは、この値が正でない場合、チャンクサイズはコンパイラによって決められます。次の例を考えてみましょう。
#pragma MP taskloop maxcpus(4)
#pragma MP taskloop schedtype(factoring(10))
for (i=0; i<1000; i++) {
...
}
|
前述の例では、ループを処理するそれぞれのプロセッサに割り当てられる繰り返し数は、割り当て順に解釈すると次のようになります。
125, 125, 125, 125, 62, 62, 62, 62, 32, 32, 32, 32, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10