1

公園でラインを処理できるように、Visual Studio で C++ でプログラムを作成しています。公園にはすべての顧客が並んでおり、openmp でマルチスレッドを使用して顧客にサービスを提供できるようにしたいと考えています。

プラグマなどを入れると、私が望むものではなく、作成するすべての顧客に対して同時に同じ顧客にサービスを提供する複数のスレッドがあります。

たとえば、2 つのスレッドと 4 人の顧客がいる場合、そのスレッド 1 で顧客 1 を処理し、スレッド 2 で顧客 2 を処理します。次に、スレッド 1 で顧客 3 とスレッド 2 で顧客 4 を同時に処理します。それが可能かどうか、またはより良い方法があるかどうかはわかりませんが、openMP を使用する必要があります。

4

1 に答える 1

1

それぞれ反復を顧客として関連付け、それら (顧客) を静的な方法でスレッドに割り当てることができます。

#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の場合に適しています。同様に、あなたの場合、提供されるまでに異なる時間がかかる消費者がいる場合。

于 2012-11-19T22:54:07.227 に答える