For parallel
程序员文章站
2022-07-12 19:58:37
...
// 循环并行化(loop parallelize)是指使用OpenMP的parallel for
// 指导语句将C/C++的for循环并行化,即将循环中的迭代(平均)
// 分配给线程组中的各个线程分别执行后在汇总。
// 格式#pragma omp parallel for[子句[子句...]](换行符)
// 限制,必须是for循环
// 循环并行化编译指导语句可以加载任意一个循环(包括嵌套循环)
// 之前,则对应的最近的循环语句(不是外嵌套循环)被并行化
// 子句可以是下列的语句;
// Schedule(type [,chunk])
// ordered
// private(list)
// firstprivate(list)
// lastprivate(list)
// shared(list)
// reduction(operator: list)
// nowait
// 其中的schedule子句描述如何将循环的迭代划分线程组中的线程
// 如果没有指定块(chunk)大小,迭代会尽可能的平均分配给每个
// 线程;type为static时,循环被分成大小为chunk的块,静态
// 分配给线程;type为dynam时,循环被动态划分为大小为chunk
// 的块,动态分配给线程
// 当N固定,每个线程执行的循环的大小不同,也会影响执行所需时间
const int N = 100000000;
const int ChunkSize = 10000;
long lStart = GetTickCount();
int i, chunk;
float *a = new float[N];
float *b = new float[N];
float *c = new float[N];
for(i = 0; i < N; i++)
a[i] = b[i] = i * 1.0;
chunk = ChunkSize;
long lEnd = GetTickCount();
cout << "未并行化循环所用时间:" << lEnd - lStart << endl;
// 每个线程执行100个循环
lStart = GetTickCount();
#pragma omp parallel for shared(a, b, c, chunk) private(i) schedule(static, chunk)
for(i = 0; i < N; i++)
a[i] = b[i] = i * 1.0;
//c[i] = a[i] + b[i];
lEnd = GetTickCount();
cout << "并行化循环所用时间:" << lEnd - lStart << endl;
推荐阅读
-
C#使用Parallel类进行多线程编程实例
-
Parallel.ForEach 使用多线遍历循环
-
Java垃圾收集器——Parallel、G1收集器日志分析及性能调优示范
-
Intel Parallel Studio XE怎么安装?Intel Parallel Studio XE 2018安装图文教程
-
Parallel.For
-
GNU Parallel的具体使用
-
如何利用多核CPU来加速你的Linux命令(GNU Parallel)
-
C#使用Parallel类进行多线程编程实例
-
15分钟并行神器gnu parallel入门指南
-
[20180316]理解db file parallel read等待事件.txt