【发布时间】:2020-08-11 11:20:57
【问题描述】:
串行版本比并行版本花费的时间更少。
/*Serial Version*/
double start = omp_get_wtime();
for (i = 0; i < 1100; i++) {
for (j = i; j < i + 4; j++) {
fprintf(new_file, "%f ", S[j]);
}
fprintf(new_file, "\n");
m = compute_m(S + i, 4);
find_min_max(S + i, 4, &min, &max);
S_i = inf(m, min, b);
S_s = sup(m, max, b);
if (S[i + 2] < S_i)
Res[i] = S_i;
else if (S[i + 2] > S_s)
Res[i] = S_s;
else
Res[i] = ECG[i + 2];
fprintf(output_f, "%f\n", Res[i]);
}
double end = omp_get_wtime();
printf("\n ------------- TIMING :: Serial Version -------------- ");
printf("\nStart = %.16g\nend = %.16g\nDiff_time = %.16g\n", start, end, end - start);
#Parallel version
double start = omp_get_wtime();
#pragma omp parallel for
for (i = 0; i < 1100; i++) {
#pragma omp parallel for
for (j = i; j < i + 4; j++) {
serial code ...
}
serial code ...
}
double end = omp_get_wtime();
printf("\n ------------- TIMING :: Serial Version -------------- ");
printf("\nStart = %.16g\nend = %.16g\nDiff_time = %.16g\n", start, end, end - start);
我试了多次,为什么串行执行总是更快?
为什么这里的串行执行速度更快?我是否以正确的方式计算执行时间?
【问题讨论】:
-
取决于“序列号”是什么。如果它的执行速度相当快,那么没有明显的理由说明多线程会更有效。串行版本可能会导致更好的缓存使用等。如果没有真正的代码,就无法推测原因。
-
虽然您可以尝试注释掉内部循环 #pragma omp 看看是否有什么不同。
-
@Lundin 串行代码包括一些操作,如读取、写入文本文件和计算一些参数,我想并行化 for 循环以比较串行版本和并行版本
-
串行代码包括一些操作,例如在文本文件中读取、写入 I/O 是一种可靠的方法,可以将大量负载与并行程序联系起来。除非,也就是说,你有一个并行文件系统 - 你呢?
标签: c parallel-processing openmp