当前位置:网站首页>【高性能计算】openMP
【高性能计算】openMP
2022-07-30 02:34:00 【可乐大牛】
学习来源
预备知识



parallel for是两个指令的合成,一般用这个而不是单纯用for指令








案例1
#include <iostream>
#include "omp.h"
int main()
{
int tid,mcpu;
tid=omp_get_thread_num(); //返回线程号
mcpu=omp_get_num_threads(); //返回当前并行区域的线程数
printf("---before parallel---\n");
printf("thread %d in %d cpus\n",tid,mcpu);
printf("---during parallel---\n");
#pragma omp parallel num_threads(3) private(tid,mcpu) //开启三个线程 并且指定的两个变量 每个线程都有自己的私有副本
{
tid=omp_get_thread_num();
mcpu=omp_get_num_threads();
printf("thread %d in %d cpus\n",tid,mcpu);
}
printf("---after parallel---\n");
printf("thread %d in %d cpus\n",tid,mcpu);
return 0;
}

OpenMP在并行构造中的运用
常用指令

除此之外,还有一些要求,如:
for指令之后要跟着循环体;
只能是for循环不能是while循环;
for循环中的i必须要是整数,且增量不能改变;
单入口单出口;
循环内的变量是公有的,但是i是私有的;
只有不存在数据相关性的for循环才能用for指令并行优化;
尽可能从最外部开始进行并行,可以节约资源
上面是数据相关性的一个例子
如果不使用collapse 我们只能对i这个层循环并行,内部的j、k是串行的,循环长度变为M;使用collapse(2),能够实现对于i,k两层合并,循环长度变为MxP


私有变量的声明


这个变量的默认值是0,不会继承外部同名变量的值

如果是for循环,最后一次迭代的子线程私有变量的值会传递出去,如果是section的话,同理。

规约
规约:经常对一个变量做某种运算,结果也存到当前变量中


注意:
每一个子线程结束之后,原规约变量的值是不确定的,所有线程执行完毕之后才会确定下来。
线程执行的顺序是不定的
边栏推荐
猜你喜欢

MIT6.S081 小结

杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】

五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解

Type-C charging and OTG chip - LDR6028A

错误:“filesystem“ 不是 “std“ 的成员

MIT6.S081 Summary

【服务器存储数据恢复】华为OceanStor某型号存储raid5数据恢复案例

ButtonStyle, MaterialStateProperty learned by flutter

【内部资源】冲击年薪30W+的软件测试人员,这份资料必须领取

票房破7.9亿美元,最近这部恐龙爽片你看了吗?
随机推荐
浏览器缓存机制
anaconda打开闪退解决
菜刀、冰蝎、蚁剑、哥斯拉的流量特征
Dell's first pure soft product redefines next-generation object storage
Successfully resolved pydotplus.graphviz.InvocationException: GraphViz's executables not found
RAII Technology Learning
Mysql中事务是什么?有什么用?
有一个设计时钟的题目,进行详细分析(三)
复旦-华盛顿大学EMBA科创的奥E丨《神奇的材料》与被塑造的我们
ESP8266 +0.96“ I2C OLED 表盘时钟
新手入门上位机开发 C#语言:PC串口发送数据
记一次搭建conda虚拟环境
A. Strange Birthday Party- Codeforces Round #694 (Div. 1)
JS Bom location 楼层导航效果 offsetTop data-n 方括号选择器
A plastic bottle of ocean "fantasy drifting"
The display and hiding of widgets for flutter learning
Kotlin接口
LeetCode每日一题(874. Walking Robot Simulation)
B. Inflation-Educational Codeforces Round 103 (Rated for Div. 2)
Leetcode.24 两两交换链表中的节点(递归)