インターフェース
#include <omp.h>
double omp_get_wtick();
omp_get_wtime()の精度を秒単位で返します。
例えば、omp_get_wtick()で0.001が返されたなら、
omp_get_wtime()で返される数値は1ミリ秒経過するたびに0.001ずつ増えます。
サンプルプログラム
サンプルソースコードを示します。
乱数で2つのベクトルを生成してベクトルの内積を求める計算を実行し、その処理時間を計測しています。
#include <iostream>
#include <random>
#include <omp.h>
int main()
{
const int num = 1000000;
double* pichigodata1 = new double[num];
double* pichigodata2 = new double[num];
double ichigoval = 0;
#pragma omp parallel
{
std::mt19937 randsrc( omp_get_thread_num() );
std::normal_distribution<double> randdist(0.0, 1.0);
double ichigotic;
double ichigotoc;
#pragma omp barrier
#pragma omp master
{
ichigotic = omp_get_wtime();
}
#pragma omp for
for ( int ichigoloop = 0; ichigoloop < num; ichigoloop++ ) {
pichigodata1[ichigoloop] = randdist(randsrc);
pichigodata2[ichigoloop] = randdist(randsrc);
}
#pragma omp for reduction(+:ichigoval)
for ( int ichigoloop = 0; ichigoloop < num; ichigoloop++ ) {
ichigoval += pichigodata1[ichigoloop] * pichigodata2[ichigoloop];
}
#pragma omp barrier
#pragma omp master
{
ichigotoc = omp_get_wtime();
#pragma omp critical(crit_cout)
{
std::cout << "ichigosample: ichigoval = "
<< ichigoval << std::endl;
std::cout << "ichigosample: wtime = "
<< ichigotoc - ichigotic << " [sec.]" << std::endl;
std::cout << "ichigosample: wtick = "
<< omp_get_wtick() << " [sec.]" << std::endl;
}
}
#pragma omp barrier
}
delete [] pichigodata1;
delete [] pichigodata2;
return 0;
}
実行結果の1例を示します。
ichigosample: ichigoval = -393.372
ichigosample: wtime = 0.663388 [sec.]
ichigosample: wtick = 4.44445e-07 [sec.]
関連ページ
OpenMPの解説 目次