私は自分のコードパフォーマンス(OpenCLカーネルの実行)を測定しようとしていますが、スピードアップを本当に理解する必要があります。clock()関数とclock_gettime()関数を使用してみました。
最初のケースでは、私のコードは単純でわかりやすく、正しく測定されています。
struct timespec start_r, start_m, stop_r, stop_m;
double realtime, monotonic;
time_t start2 = clock();
if(clock_gettime(CLOCK_REALTIME, &start_r) == -1) {
cout << "clock realtime error!" << endl;
}
if(clock_gettime(CLOCK_MONOTONIC, &start_m) == -1) {
cout << "clock realtime error!" << endl;
}
double res = 0.0;
for(unsigned long i = 0; i < total; i++) {
res += data[i];
}
cout << "res = " << res << endl;
time_t end2 = clock();
if(clock_gettime(CLOCK_REALTIME, &stop_r) == -1) {
cout << "clock realtime error!" << endl;
}
if(clock_gettime(CLOCK_MONOTONIC, &stop_m) == -1) {
cout << "clock realtime error!" << endl;
}
cout << "Time clock() = " << (end2 - start2)/(double)CLOCKS_PER_SEC << endl;
realtime = (stop_r.tv_sec - start_r.tv_sec) + (double)(stop_r.tv_nsec - start_r.tv_nsec) / (double)BILLION;
monotonic = (stop_m.tv_sec - start_m.tv_sec) + (double)(stop_m.tv_nsec - start_m.tv_nsec) / (double)BILLION;
cout << "Realtime = " << realtime << endl << "Monotonic = " << monotonic << endl;
それは理解できる結果をもたらします-3つの結果はすべてほぼ同じです。
OpenCLカーネルの実行時間の測定に関しては、まったく同じことを行いますが、得られる結果はひどいものです。
Time = 0.04
Realtime = 0.26113
Monotonic = 0.26113
何が悪いのか教えていただけますか?OpenCLカーネルのパフォーマンスを測定する通常の問題である場合、それを測定するための最良の方法を提案できますか?ありがとう!