(i) シーケンシャル スタイルで、(ii) OpenMP ステートメントを使用して .cpp コードを実行しています。時差を見てみます。時間を計算するために、私はこれを使用します:
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
時間は、コードのシーケンシャル (上記) 実行ではかなり正確です。これを実行するのに約 8 秒かかります。コードに OpenMP ステートメントを挿入してから時間を計算すると、時間は短縮されますが、表示される時間はコンソールで約 8 ~ 9 秒ですが、実際にはリアルタイムでわずか 3 ~ 4 秒です。
私のコードが抽象的にどのように見えるかは次のとおりです。
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
#pragma omp parallel for
for( ... )
for( ... )
for (...)
{
...;
}
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
上記のコードを実行すると、時間は短縮されますが、表示される時間はリアルタイムでは正確ではありません。clock() 関数が各スレッドの個々の時間を計算し、それらを合計して表示しているように私には思えます。
誰かがこの理由を教えてくれますか、または OpenMP プログラムで時間を測定するために使用する他のタイミング関数を提案してもらえますか?
ありがとう。