それぞれの反復を顧客として関連付け、それら (顧客) を静的な方法でスレッドに割り当てることができます。
#pragma omp parallel for schedule(static, CHUNKSIZE)
for(i = 0; i < customer_max; i++)
{
// do something with customers
}
static : この分散スレッドでは、実際のループの実行前に、スレッドの作業が静的に事前計算されます。デフォルトでは、反復はスレッド間で均等に分割されます。ただし、パラメーターに整数を指定すると、分散は連続する反復CHUNKSIZE
のサイズのチャンクをスレッドに割り当てます。CHUNKSIZE
2 つのスレッドと 4 人の顧客の例では、CHUNKSIZE = 1 を使用します。したがって、スレッド 0 はコスチューム 0 と 2 の両方を実行し、スレッド 2 はコスチューム 1 と 3 を実行します。
を指定しない場合CHUNKSIZE
、スレッド 0 が最初の 2 人の顧客を実行し、スレッド 1 が残りの 2 人を実行します。
一方、各スレッドが動的な方法で顧客にサービスを提供することを希望する場合は、動的分散を使用できます。
#pragma omp parallel for schedule(dynamic)
for(i = 0; i < customer_max; i++)
{
// do something with customers
}
動的スケジュールは、時間的に大きく変化する作業を実行する反復を伴うforの場合に適しています。同様に、あなたの場合、提供されるまでに異なる時間がかかる消費者がいる場合。