ページ 11

OpenMPで計測時間を加える方法を教えて下さい。

Posted: 2013年2月01日(金) 14:30
by Kyu
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;
}

Re: OpenMPで計測時間を加える方法を教えて下さい。

Posted: 2013年2月01日(金) 14:54
by Kyu
コードを貼り付けることをしていなかったので直しました。

コード:

#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で計測時間を加える方法を教えて下さい。

Posted: 2013年2月01日(金) 15:01
by Kyu
ソースコードの色分けができない・・・

Re: OpenMPで計測時間を加える方法を教えて下さい。

Posted: 2013年2月01日(金) 15:41
by h2so5
コードタグの言語名にc_macは指定できません。そのような言語はありません。
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;
}

Re: OpenMPで計測時間を加える方法を教えて下さい。

Posted: 2013年2月02日(土) 19:52
by Kyu
お礼の返事が遅れてすみません。

なるほどコードの色分けができなかったのは、コードの言語が間違いだったからですね。
ご指摘だけでなく質問に対する返答も頂き、どうもありがとうございました。
無事に時間を計測することができました。