#pragma omp parallel for 并行for
添加
#pragma omp parallel for
可以让for并行计算,提高效率。
首先要项目开启对openmp的支持
属性-》》c/c+±》》语言-》》OpenMP支持 打开就可以了,用法如下:
#include <omp.h>
#include <cstdio>
#include <cstdlib>//用到rand()函数
#include <ctime> //用到clock()函数
const int maxn = 1e8;
int main()
{
int begintime, endtime;
printf("It is use parallel compute:\n");
begintime = clock(); //计时开始
#pragma omp parallel for
for (int i = 0; i < maxn; ++i);
endtime = clock(); //计时结束
printf("\n\nRunning Time:%dms\n", endtime - begintime);
printf("\n\n\nIt is not use parallel compute:\n");
begintime = clock(); //计时开始
for (int i = 0; i < maxn; ++i);
endtime = clock(); //计时结束
printf("\n\nRunning Time:%dms\n", endtime - begintime);
return 0;
}
可以指定并行的线程数。
#include <omp.h>
#include <cstdio>
#include <cstdlib>//用到rand()函数
#include <ctime> //用到clock()函数
const int maxn = 1e8;
int main()
{
int begintime, endtime;
int nthreads;
printf("It is use parallel compute:\n\n\n");
#pragma omp parallel
nthreads = omp_get_num_threads();
printf("Now, it is %d threads\n", nthreads);
begintime = clock(); //计时开始
#pragma omp parallel for
for (int i = 0; i < maxn; ++i);
endtime = clock(); //计时结束
printf("\nRunning Time:%dms\n", endtime - begintime);
#pragma omp parallel
nthreads = 12;
omp_set_num_threads(nthreads);
printf("\nNow, it is %d threads\n", nthreads);
begintime = clock(); //计时开始
#pragma omp parallel for
for (int i = 0; i < maxn; ++i);
endtime = clock(); //计时结束
printf("\nRunning Time:%dms\n", endtime - begintime);
printf("\nIt is not use parallel compute:\n");
begintime = clock(); //计时开始
for (int i = 0; i < maxn; ++i);
endtime = clock(); //计时结束
printf("\nRunning Time:%dms\n", endtime - begintime);
return 0;
}
但并行计算要确保处理的数据没有先后顺序性
参考:https://www.freesion.com/article/64571448599/