我想测量使用C ++(openMP)实现的并行程序的性能
使用此技术测量时间的推荐方法是
double start = omp_get_wtime();
// some code here
double end = omp_get_wtime();
printf_s("Time = %.16g", end - start);
但是我的时间接近0,尽管我等待程序大约8秒钟。 获取执行时间的所有其他方法都返回0.0 还尝试使用这些代码示例
DWORD st = GetTickCount();
time_t time_start = time(NULL);
clock_t start = clock();
auto t1 = Clock::now();
time_t time_finish = time(NULL);
DWORD fn = GetTickCount();
clock_t finish = clock();
auto t2 = Clock::now();
一切都没有成功。程序花费了大量时间。但结果总是为零。 (在调试和释放模式下) 如果我调试逐步结果与零不同。
这是我的并行#pragma指令
#pragma omp parallel default(none) private(i) shared(nSum, nTheads, nMaxThreads, nStart, nEnd, data, modulo) {
#pragma omp master
nTheads = omp_get_num_threads();
nMaxThreads = omp_get_max_threads();
#pragma omp for
for (int i = nStart; i < nEnd; ++i)
{
#pragma omp atomic
nSum += (power(data[i], i) * i) % modulo;
}
}
我的错误在哪里?请帮我。我花了很多时间来解决这个问题。