C言語で1~99までの総和を並列で求めるプログラムを作ってみたのですが、これに計算にかかる時間計測を表示できるように加えたいのですが初心者のためやり方がわかりません。
どのように改良するべきなのか教えて下さい。よろしくお願いします。
(ちなみに使用はiMacでやっています)
#include <omp.h>
#include <stdio.h>
int main()
{
int tsum, sum, i;
sum = 0;
#pragma omp parallel private(tsum) num_threads(4)
{
tsum = 0;
#pragma omp for nowait
for(i=0; i<100; i++)
{
tsum+=i;
}
printf(" thread=%d, tsum=%d.\n",omp_get_thread_num(),tsum);
#pragma omp critical
{
sum+=tsum;
}
}
printf(" sum=%d.\n",sum);
return 0;
}
OpenMPで計測時間を加える方法を教えて下さい。
-
Kyu
Re: OpenMPで計測時間を加える方法を教えて下さい。
コードを貼り付けることをしていなかったので直しました。
#include <omp.h>
#include <stdio.h>
int main()
{
int tsum, sum, i;
sum = 0;
#pragma omp parallel private(tsum) num_threads(4)
{
tsum = 0;
#pragma omp for nowait
for(i=0; i<100; i++)
{
tsum+=i;
}
printf(" thread=%d, tsum=%d.\n",omp_get_thread_num(),tsum);
#pragma omp critical
{
sum+=tsum;
}
}
printf(" sum=%d.\n",sum);
return 0;
}
Re: OpenMPで計測時間を加える方法を教えて下さい。
コードタグの言語名にc_macは指定できません。そのような言語はありません。
Macで時間計測をする場合、一番精度の高いタイマーはmach_absolute_time()です。
Macで時間計測をする場合、一番精度の高いタイマーはmach_absolute_time()です。
#include <omp.h>
#include <stdio.h>
#include <mach/mach_time.h>
int main()
{
int tsum, sum, i;
// 開始時間
__int64_t start_time = mach_absolute_time();
sum = 0;
#pragma omp parallel private(tsum) num_threads(4)
{
tsum = 0;
#pragma omp for nowait
for(i=0; i<100; i++)
{
tsum+=i;
}
printf(" thread=%d, tsum=%d.\n", omp_get_thread_num(),tsum);
#pragma omp critical
{
sum+=tsum;
}
}
// 終了時間
__int64_t end_time = mach_absolute_time();
// ナノ秒単位に変換
mach_timebase_info_data_t base;
mach_timebase_info(&base);
__int64_t nsec = (end_time - start_time) * base.numer / base.denom;
printf(" sum=%d.\n(%lld ns)", sum, nsec);
return 0;
}
-
Kyu
Re: OpenMPで計測時間を加える方法を教えて下さい。
お礼の返事が遅れてすみません。
なるほどコードの色分けができなかったのは、コードの言語が間違いだったからですね。
ご指摘だけでなく質問に対する返答も頂き、どうもありがとうございました。
無事に時間を計測することができました。
なるほどコードの色分けができなかったのは、コードの言語が間違いだったからですね。
ご指摘だけでなく質問に対する返答も頂き、どうもありがとうございました。
無事に時間を計測することができました。