【发布时间】:2017-10-02 22:55:01
【问题描述】:
我是使用 OpenMP 的新手。 我认为使用 max reduction 子句来查找数组的最大元素并不是一个坏主意,但实际上并行 for 循环的运行速度比串行循环慢得多。
int main() {
double sta, end, elapse_t;
int bsize = 46000;
int q = bsize;
int max_val = 0;
double *buffer;
buffer = (double*)malloc(bsize*sizeof(double));
srand(time(NULL));
for(int i=0;i<q;i++)
buffer[i] = rand()%10000;
sta = omp_get_wtime();
//int i;
#pragma omp parallel for reduction(max : max_val)
for(int i=0;i<q; i++)
{
max_val = max_val > buffer[i] ? max_val : buffer[i];
}
end = omp_get_wtime();
printf("parallel maximum time %f\n", end-sta);
sta = omp_get_wtime();
for(int i=0;i<q; i++)
{
max_val = max_val > buffer[i] ? max_val : buffer[i];
}
end = omp_get_wtime();
printf("serial maximum time %f\n", end-sta);
free(buffer);
return 0;}
编译命令
gcc-7 kp_omp.cpp -o kp_omp -fopenmp
执行结果
./kp_omp
parallel maximum time 0.000505
serial maximum time 0.000266
CPU 是 Intel Core i7-6700 8 核。
【问题讨论】:
标签: openmp