OpenMP 参考(指令详解)
共享工作(Work-Sharing) 结构
- 共享工作结构将它作用的代码段在抵达此代码段的线程中分开执行
- Work-sharing 不会产生新线程
- 进入工作共享结构时没有关卡,但结束时会有
Work-Sharing 结构的种类:
注意: 关于Fortran 的workshare 结构稍后讨论
DO / for - 在一组线程中共享循环中的计数器 (iteration). 表示一种 “数据并行处理”. | SECTIONS - 将工作分成独立,不关联的片段。 每个片段被一个线程执行。用来实现一种 “函数并行处理” | SINGLE - 串行化代码段 |
|
|
|
规则:
- 为了能并行执行此指令,一个工作共享结构必须被并行区域动态封闭
- 一个线程组到达一个工作共享结构时,要么全部全线程被占用,要么不占用
- 线程组的所有成员必须以相同的顺序到达连续的工作共享结构
DO / for 指令
目的:
- DO/for指令表明接下来的循环将被并行执行。前提是一个并行区域已经被初始化,否则以串行的方式执行。
格式:
Fortran | !$OMP DO [clause ...] SCHEDULE (type [,chunk]) ORDERED PRIVATE (list) FIRSTPRIVATE (list) LASTPRIVATE (list) SHARED (list) REDUCTION (operator | intrinsic : list) COLLAPSE (n) do_loop !$OMP END DO [ NOWAIT ] |
C/C++ | #pragma omp for [clause ...] newline schedule (type [,chunk]) ordered private (list) firstprivate (list) lastprivate (list) shared (list) reduction (operator: list) collapse (n) nowait for_loop |
子句:
- SCHEDULE: 描述线程组中的线程分配多少次循环。 默认schedule依赖于具体实现
STATIC
循环按照chunk的值被等分并静态赋予线程。如果没有指定chunk,那么将均分此循环。
DYNAMIC
循环按照chunk的值被等分并动态赋予线程。如果一个线程完成了一个分支,那么它将继续运行下一个分支。默认的chunk值为1.
GUIDED
如果chunk为1,每个分支的值为剩余的循环次数除以线程数量,减少到1.如果chunk的值为K(比1大),每块分支也以同样的方式分配迭代次数,只是每块的迭代次数不小于K。默认chunk的值为1.
RUNTIME
调度的策略依赖于运行时的环境变量OMP_SCHEDULE.为这个子句指定chunk的值是非法的。
AUTO
调度策略依赖于编译器或者运行时系统
- NO WAIT / nowait: 如果指定了,线程在并行循环结束时不会同步.
- ORDERED: 指定该循环迭代必须以串行方式执行.
- COLLAPSE:指定在一个嵌套循环中,多少次循环被折叠到一个大的迭代空间并根据schedule子句来划分。所有相关循环中的迭代的执行顺序决定迭代空间中折叠迭代的顺序。
- 其他的子句将在Data Scope Attribute Clauses 章节介绍
规则:
- DO循环不能是DO WHILE循环,也不能没有循环控制。循环迭代变量必须是整型,并且对于所有的线程,循环控制参数都一样
- 程序的正确性不能取决于那个线程执行了特定的迭代
- 与DO/for 指令关联的循环要按照标准格式书写
- 由于不同的线程在赋值时并不同步,chunk的值必须指定为一个循环的不变整型表达式
- RDERED, COLLAPSE 和SCHEDULE 子句只可选其一.
- 查看OpenMP的相关文档获得额外的信息
范例: DO / for 指令
- 对vector执行加法操作的简单程序
- 数组A, B, C, and 变量N 被所有线程共享.
- 变量I对每个线程都是私有的;每个线程都会有一个它的唯一copy .
- 循环的迭代将被动态地以CHUNK为单位分发.
- 线程在完成各自的独立的工作时并不进行同步(NOWAIT).
Fortran - DO Directive Example PROGRAM VEC_ADD_DO INTEGER N, CHUNKSIZE, CHUNK, I PARAMETER (N=1000) PARAMETER (CHUNKSIZE=100) REAL A(N), B(N), C(N) ! Some initializations DO I = 1, N A(I) = I * 1.0 B(I) = A(I) ENDDO CHUNK = CHUNKSIZE !$OMP PARALLEL SHARED(A,B,C,CHUNK) PRIVATE(I) !$OMP DO SCHEDULE(DYNAMIC,CHUNK) DO I = 1, N C(I) = A(I) + B(I) ENDDO !$OMP END DO NOWAIT !$OMP END PARALLEL END |
·
C / C++ - for Directive Example #include <omp.h> #define CHUNKSIZE 100 #define N 1000 main () { int i, chunk; float a[N], b[N], c[N]; /* Some initializations */ for (i=0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE; #pragma omp parallel shared(a,b,c,chunk) private(i) { #pragma omp for schedule(dynamic,chunk) nowait for (i=0; i < N; i++) c[i] = a[i] + b[i]; } /* end of parallel section */ } |
SECTIONS 指令
目的:
- SECTIONS指令是一种非迭代式工作共享结构。它指定段中的代码被分配到线程组的线程中执行。
- 独立的SECTION指令嵌套在SECTIONS指令中。每个SECTION仅被线程组中的一个线程执行。不同的段可能被不同的线程执行。在实现允许的情况下,如果一条线程足够快,它可能会执行好几个代码段。
格式:
Fortran | !$OMP SECTIONS [clause ...] PRIVATE (list) FIRSTPRIVATE (list) LASTPRIVATE (list) REDUCTION (operator | intrinsic : list) !$OMP SECTION block !$OMP SECTION block !$OMP END SECTIONS [ NOWAIT ] |
C/C++ | #pragma omp sections [clause ...] newline private (list) firstprivate (list) lastprivate (list) reduction (operator: list) nowait { #pragma omp section newline structured_block #pragma omp section newline structured_block } |
子句:
- 如果NOWAIT/nowait子句没有被使用,在SECTIONS指令结束时会有一个隐藏的关卡(barrier)
- 更多子句在Data Scope Attribute Clauses 章节详细讨论.
问答:
| 如果线程数量和SECTIONS的数量不一样会怎样?比SECTIONS多呢?比SECTIONS少呢?
|
| |
| 哪条线程执行哪块SECTION? |
规则:
- section块要按照格式书写(It is illegal to branch into or out of section blocks.)
- SECTION指令只能出现在SECTIONS指令的静态范围内
范例: SECTIONS 指令
- 展示不同的工作块被不同的线程执行的简单程序
Fortran - SECTIONS Directive Example PROGRAM VEC_ADD_SECTIONS INTEGER N, I PARAMETER (N=1000) REAL A(N), B(N), C(N), D(N) ! Some initializations DO I = 1, N A(I) = I * 1.5 B(I) = I + 22.35 ENDDO !$OMP PARALLEL SHARED(A,B,C,D), PRIVATE(I) !$OMP SECTIONS !$OMP SECTION DO I = 1, N C(I) = A(I) + B(I) ENDDO !$OMP SECTION DO I = 1, N D(I) = A(I) * B(I) ENDDO !$OMP END SECTIONS NOWAIT !$OMP END PARALLEL END |
·
C / C++ - sections Directive Example #include <omp.h> #define N 1000 main () { int i; float a[N], b[N], c[N], d[N]; /* Some initializations */ for (i=0; i < N; i++) { a[i] = i * 1.5; b[i] = i + 22.35; } #pragma omp parallel shared(a,b,c,d) private(i) { #pragma omp sections nowait { #pragma omp section for (i=0; i < N; i++) c[i] = a[i] + b[i]; #pragma omp section for (i=0; i < N; i++) d[i] = a[i] * b[i]; } /* end of sections */ } /* end of parallel section */ } |
WORKSHARE 指令
目的:
- Fortran 适用
- WORKSHARE指令将密封的结构块分成一些独立的工作单元来执行,每个工作单元被执行一次。
- 结构块只能由如下组成:
- array assignments
- scalar assignments
- FORALL statements
- FORALL constructs
- WHERE statements
- WHERE constructs
- atomic constructs
- critical constructs
- parallel constructs
- 更多信息请查看OpenMP API 文档.
格式:
Fortran | !$OMP WORKSHARE structured block !$OMP END WORKSHARE [ NOWAIT ] |
规则:
- 除了ELEMENTAL函数,该结构不能包含任何用户函数调用.
范例: WORKSHARE 指令
- Simple array and scalar assigments shared by the team of threads. A unit of work would include:
- Any scalar assignment
- For array assignment statements, the assignment of each element is a unit of work
Fortran - WORKSHARE Directive Example PROGRAM WORKSHARE INTEGER N, I, J PARAMETER (N=100) REAL AA(N,N), BB(N,N), CC(N,N), DD(N,N), FIRST, LAST ! Some initializations DO I = 1, N DO J = 1, N AA(J,I) = I * 1.0 BB(J,I) = J + 1.0 ENDDO ENDDO !$OMP PARALLEL SHARED(AA,BB,CC,DD,FIRST,LAST) !$OMP WORKSHARE CC = AA * BB DD = AA + BB FIRST = CC(1,1) + DD(1,1) LAST = CC(N,N) + DD(N,N) !$OMP END WORKSHARE NOWAIT !$OMP END PARALLEL END |
SINGLE Directive
目的:
- SINGLE 指令表示其作用的代码将单线程执行.
- 当执行非线程安全代码段(如I/O)时会派上用场
格式:
Fortran | !$OMP SINGLE [clause ...] PRIVATE (list) FIRSTPRIVATE (list) block !$OMP END SINGLE [ NOWAIT ] |
C/C++ | #pragma omp single [clause ...] newline private (list) firstprivate (list) nowait structured_block |
子句:
- 除非指定了NOWAIT/nowait指令,线程组中没有执行SINGLE指令的线程将在密封代码块的结束处等待.
- 更多的子句描述见Data Scope Attribute Clauses 章节.
规则:
- SINGLE块要按照格式书写(It is illegal to branch into or out of a SINGLE block. )
合并的并行工作共享结构
OpenMP提供了三个方便指令:
-
- PARALLEL DO / parallel for
- PARALLEL SECTIONS
- PARALLEL WORKSHARE (fortran 适用)
- 大多数情况下,这些指令的行为和一个独立的PARALLEL指令后面紧跟一个单独的work-sharing指令相同
- 大多数对指令的法则,子句和限制都有效。更多细节参考OpenMP API.
- 下面是一个使用PARALLEL DO/PARALLEL FOR联合指令的范例 .
Fortran - PARALLEL DO Directive Example PROGRAM VECTOR_ADD INTEGER N, I, CHUNKSIZE, CHUNK PARAMETER (N=1000) PARAMETER (CHUNKSIZE=100) REAL A(N), B(N), C(N) ! Some initializations DO I = 1, N A(I) = I * 1.0 B(I) = A(I) ENDDO CHUNK = CHUNKSIZE !$OMP PARALLEL DO !$OMP& SHARED(A,B,C,CHUNK) PRIVATE(I) !$OMP& SCHEDULE(STATIC,CHUNK) DO I = 1, N C(I) = A(I) + B(I) ENDDO !$OMP END PARALLEL DO END |
·
C / C++ - parallel for Directive Example #include <omp.h> #define N 1000 #define CHUNKSIZE 100 main () { int i, chunk; float a[N], b[N], c[N]; /* Some initializations */ for (i=0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE; #pragma omp parallel for / shared(a,b,c,chunk) private(i) / schedule(static,chunk) for (i=0; i < n; i++) c[i] = a[i] + b[i]; } |
TASK 构造
目的:
- OpenMP 3.0的新构造
- TASK构造定义一个显式任务,该任务被遇到的线程执行,或者被线程组中的其他线程推迟执行
- 数据共享属性子句决定它的数据环境
- Task的执行遵从任务调度-更多信息请查看OpenMP3.0参考文档
Format:
Fortran | !$OMP TASK [clause ...] IF (scalar expression) UNTIED DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE) PRIVATE (list) FIRSTPRIVATE (list) SHARED (list) block !$OMP END TASK |
C/C++ | #pragma omp task [clause ...] newline if (scalar expression) untied default (shared | none) private (list) firstprivate (list) shared (list) structured_block |
子句和限制:
</div>
<!-- <div class="reward_box">
<div class="tit">
<button class="btn_reward"><i class="icon iconfont icon-dashang-"></i></button>
</div>
<dl class="clearfix">
<dt><a href="#" target="_blank">近期打赏</a></dt>
<dd><a href="#" target="_blank"><img src="http://avatar.csdn.net/9/3/2/2_nzf_001.jpg" alt="聂兆芳" title="聂兆芳"></a></dd>
<dd><a href="#" target="_blank"><img src="http://avatar.csdn.net/9/3/2/2_nzf_001.jpg" alt="聂兆芳" title="聂兆芳"></a></dd>
<dd><a href="#" target="_blank"><img src="http://avatar.csdn.net/9/3/2/2_nzf_001.jpg" alt="聂兆芳" title="聂兆芳"></a></dd>
<dd><a href="#" target="_blank"><img src="http://avatar.csdn.net/9/3/2/2_nzf_001.jpg" alt="聂兆芳" title="聂兆芳"></a></dd>
<dd><a href="#" target="_blank"><img src="http://avatar.csdn.net/9/3/2/2_nzf_001.jpg" alt="聂兆芳" title="聂兆芳"></a></dd>
</dl>
</div>-->
<ul class="article_collect clearfix csdn-tracking-statistics" data-mod="popu_378" style="display: none;">
<li class="tit">本文已收录于以下专栏:</li>
</ul>
<div class="comment_box clearfix">
<div id="comment_form">
<div id="commentsbmitarear">
<!-- <h6><span>0</span>条评论</h6> -->
<!-- <dl class="clearfix" id="commentbox">
<dt>
<a href="http://my.csdn.net/u014731650"><img src="http://avatar.csdn.net/D/0/8/1_u014731650.jpg" ></a>
</dt>
<dd>
<a href="http://my.csdn.net/u014731650" target="_blank">u014731650</a>
</dd>
<dd class="txt_tip"><span id="tip_comment" class="tip"></span></dd>
</dl> -->
<div class="comment_area clearfix" style="height: 60px;">
<div class="userimg"><a href="http://my.csdn.net/u014731650"><img src="http://avatar.csdn.net/D/0/8/1_u014731650.jpg"></a></div>
<form action="/saga1979/comment/submit?id=6265564" method="post" onsubmit="return subform(this);" id="commentform">
<textarea class="comment_content" name="comment_content" id="comment_content" placeholder="发表你的评论" style="height: 40px;"></textarea>
<div class="bot_bar clearfix" style="opacity: 0;">
<div id="ubbtools" class="add_code">
<a href="#insertcode" code="code" target="_self"><i class="icon iconfont icon-daima"></i></a>
</div>
<input type="hidden" id="comment_replyId" name="comment_replyId">
<input type="hidden" id="comment_userId" name="comment_userId" value="">
<input type="hidden" id="commentId" name="commentId" value="">
<input type="submit" class="btn btn-redborder" value="发表评论">
<span id="tip_comment" class="tip">
<div style="display: none;" class="csdn-tracking-statistics" data-mod="popu_384"><a href="#" target="_blank" class="comment_area_btn">发表评论</a></div>
<div id="lang_list" code="code">
<a href="#html" style="width:95px;" class="long_name" target="_self">HTML/XML</a>
<a href="#objc" style="width:95px;" class="long_name" target="_self">objective-c</a>
<a href="#delphi" style="width:58px;" class="zhong_name" target="_self">Delphi</a>
<a href="#ruby" class="zhong_name" target="_self">Ruby</a>
<a href="#php" target="_self">PHP</a>
<a href="#csharp" class="duan_name" target="_self">C#</a>
<a style=" border-right: none;" href="#cpp" class="duan_name" target="_self">C++</a>
<a style=" border-bottom:none;width:95px;" href="#javascript" class="long_name" target="_self">JavaScript</a>
<a style=" border-bottom:none;width:95px;" href="#vb" class="long_name" target="_self">Visual Basic</a>
<a style=" border-bottom:none;" href="#python" class="zhong_name" target="_self">Python</a>
<a style=" border-bottom:none;" href="#java" class="zhong_name" target="_self">Java</a>
<a style="border-bottom:none;" href="#css" class="duan_name" target="_self">CSS</a>
<a style="border-bottom:none;" href="#sql" class="duan_name" target="_self">SQL</a>
<a style="border:none; " href="#plain" class="duan_name" target="_self">其它</a>
<span class="arrb"></span>
</div>
</span></div>
</form>
</div>
</div>
</div>
</div>
<div class="comment_li_outbox"></div>
<div class="more_comment" style="display: none;">
<div id="comment_bar" class="trackgin-ad" data-mod="popu_385"></div>
</div>
<h3 class="recommend_tit">相关文章推荐</h3>
<div class="recommend_list clearfix">
<dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="true" data-dsm="post">
<dd>
<h2><a href="/augusdi/article/details/8807757" target="_blank" strategy="BlogCommendFromBaidu_0">OpenMP中数据属性相关子句详解(2):shared/default/copyin/copyprivate子句的使用</a></h2>
<div class="summary">
(1) sharedshared子句可以用于声明一个或多个变量为共享变量。所谓的共享变量,是值在一个并行区域的team内的所有线程只拥有变量的一个内存地址,所有线程访问同一地址。所以,对于并行区域内的...
</div>
<ul>
<li class="avatar_img"><a href="http://blog.csdn.net/Augusdi" target="_blank" strategy="BlogCommendFromBaidu_0"><img src="http://avatar.csdn.net/D/A/7/2_augusdi.jpg" alt="Augusdi" title="Augusdi"></a></li>
<li class="user_name"><a href="http://blog.csdn.net/Augusdi" target="_blank">Augusdi</a></li>
<li class="time">2013-04-16 11:02</li>
<li class="visited_num"><i class="icon iconfont icon-read"></i><span>4280</span></li>
</ul>
</dd>
</dl>
<dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="true" data-dsm="post">
<dd>
<h2><a href="/zsc09_leaf/article/details/7759180" target="_blank" strategy="BlogCommendFromBaidu_1">OpenMP 参考(子句)</a></h2>
<div class="summary">
Data Scope Attribute Clauses
也叫Data-sharing属性子句对数据作用域的理解与应用是OpenMP编程的重要因素因为OpenMP是基于内存共享编程模型的,很多变…
- zsc09_leaf
- 2012-07-18 14:54
- 3325
<!--dl class="clearfix csdn-tracking-statistics" data-mod="popu_393">
<dt><a href="http://edu.csdn.net/huiyiCourse/series_detail/64?utm_source=blog10" target="_blank"><img class="maxwidth" src="https://img-blog.csdn.net/20170928113144608" alt="" title=""></a></dt>
<dd>
<div class="summary">
<h2><a href='http://edu.csdn.net/topic/python1?utm_source=blog10' target='_blank'>伤心啊!年度热门编程语言排行榜出来了...</a></h2> <div class="summary">近期,IEEE Spectrum 发布了第四届顶级编程语言交互排行榜。结合 10 个线上数据源的 12 个标准,对 48 种语言进行了排行!此外,七牛云许式伟曾说过Go语言会取代Java...气氛... </div>
</div>
</dd>
</dl-->
<script>
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div id="' + s + '"></div>');
(window.slotbydup=window.slotbydup || []).push({
id: '4765209',
container: s,
size: '808,120',
display: 'inlay-fix'
});
})();
</script><div id="_m0q5wum6nkfwqo6g4cwbqpvi"></div><script charset="utf-8" src="http://pos.baidu.com/scjm?di=4765209&dri=0&dis=0&dai=0&ps=11776x33&dcb=___adblockplus&dtm=SSP_JSONP&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1508223385739&ti=OpenMP%20%E5%8F%82%E8%80%83%EF%BC%88%E6%8C%87%E4%BB%A4%E8%AF%A6%E8%A7%A3%EF%BC%89%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=1&pcs=1196x652&pss=1196x11798&cfv=0&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1508223385&rw=652&ltu=http%3A%2F%2Fblog.csdn.net%2Fsaga1979%2Farticle%2Fdetails%2F6265564&ecd=1&uc=1512x900&pis=-1x-1&sr=1600x900&tcn=1508223386"></script><a href="http://www.baidu.com/cb.php?c=IgF_pyfqnHmsrHTYrjT0IZ0qnfK9ujYzP1D4P1Tk0Aw-5Hc3rHnYnHb0TAq15HfLPWRznjb0T1dWnWm1nHPWn1TdrHcLmHf30AwY5HDdnj6znWn1PWb0IgF_5y9YIZ0lQzq-uZR8mLPbUB48ugfEpZNGXy-jULNzTvRETvNzpyN1gvw-IA7GUatvrjqdIAdxTvqdThP-5yF_UvTkn0KzujYkrfKBUHYs0ZKz5H00Iy-b5HDdP1f1PWD0Uv-b5HDzrH63nHf0mv-b5HTzPWb1n6KEIv3qn0KsXHYznjm0mLFW5HDsrjD3" target="_blank">
<dl class="clearfix csdn-tracking-statistics" data-mod="popu_393">
<dt><img class="maxwidth" src="http://ubmcmm.baidustatic.com/media/v1/0f000D9ndwDBR6CkQlDgK0.jpg" alt="" title=""></dt>
<dd>
<div class="summary">
<h2>2万和5万,人工智能行业薪酬曝光,程序员如何搭边AI领域?</h2> <div class="summary">人工智能目前是一个快速增长的领域,对开发者的需求也是杠杠滴,那么2万和5万,AI领域的开发者都需要了解什么?掌握什么?阿里人工智能实验室高级算法专家是这么说的...</div>
</div>
</dd>
</dl>
<dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="true" data-dsm="post">
<dd>
<h2><a href="/gengshenghong/article/details/6957594" target="_blank" strategy="BlogCommendFromBaidu_2">OpenMP Tutorial学习笔记(5)OpenMP指令之共享工作构造(Work-Sharing)</a></h2>
<div class="summary">
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#WorkSharing
共享工作构造:Work-Sharing Constr…
- gengshenghong
- 2011-11-10 22:15
- 2350
<dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="true" data-dsm="post">
<dd>
<h2><a href="/hyqsong/article/details/50198551" target="_blank" strategy="BlogCommendFromBaidu_3">openMP(并行计算) 超简单快速上手</a></h2>
<div class="summary">
简介:
OpenMp是并已被广泛接受的,用于共享内存并行系统的多处理器程序设计的一套指导性的编译处理方案。
OpenMP支持的编程语言包括C语言、C++和Fortran;
OpenMp提供了对并行算法…
- hyqsong
- 2015-12-06 21:29
- 1320
<dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="true" data-dsm="post">
<dd>
<h2><a href="/scythe666/article/details/45499631" target="_blank" strategy="BlogCommendFromBaidu_4">OpenMP #pragma omp parallel for并行化小探究</a></h2>
<div class="summary">
今天用了一下openmp,本人表示非常喜欢openmp的傻瓜化模式,导入一个头文件直接parallel for#include
#include using namespace std;int ma…
- Scythe666
- 2015-05-05 10:47
- 2124
-
openmp在多重循环内的简单使用及其详解
由于项目需求,在三重循环内加入了并行计算,但由于只能在内层循环加入,而内层循环只有32维度,因此速度提高的也就那么几毫秒。 在此 不再将代码贴出! 以下是转载的别人博客中的详细讲解,很不错! …- Allyli0022
- 2016-09-29 15:44
- 3189
-
在C++中使用openmp进行多线程编程
声明:本文是基于Joel Yliluoma写的Guid into OpenMP:Easy multithreading programming for C++而写的,基本是按照自己的理解,用自己语言组…- acaiwlj
- 2015-11-13 15:53
- 3841
-
openMP编程(上篇)之指令和锁
parallel : #include “omp.h” //openmp的头文件
- g425680992
- 2017-04-19 21:43
- 145
-
OpenMP 之for指令并行求和(学习笔记)
OpenMP 并行求和并行区域方法 开启两个并行线程程序如下:- XX_123_1_RJ
- 2014-09-10 11:45
- 997
-
OpenMP3.0的新特性Task指令基础
从OpenMP3.0开始,OpenMP增加了task指令,这是OpenMP3.0中最激动人心的一个新特性。 本文的”术语“大多数是根据个人理解用词,不保证用词准确性。 (1)task基础 Ope…- gengshenghong
- 2011-11-23 23:22
- 3150
-
OpenMP 参考(子句)
原文:https://computing.llnl.gov/tutorials/openMP/- saga1979
- 2011-03-30 09:51
- 2523
-
OpenMP 参考 (同步构造)
原文:https://computing.llnl.gov/tutorials/openMP/- saga1979
- 2011-03-29 09:42
- 4479
-
MPI和OPENMP混合编程详解
- 2016-12-21 16:38
- 993KB
- 下载
-
OpenMP并行程序设计——for循环并行化详解
在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以重点介绍一下OpenMP中for循环的应用。个人感觉只要掌握了文中讲的这些就足够了,如果想要学…- zhongkejingwang
- 2014-10-22 18:12
- 7766
-
OpenMP并行程序设计——for循环并行化详解
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++中使用OpenMP优化代码方便又简单,代…- a18831629729
- 2017-08-07 13:22
- 45
-
OpenMP中omp_set_dynamic()和OMP_DYNAMIC环境变量详解
理解这部分内容之前,先要理解omp_get_num_threads()和omp_get_max_threads()的含义和区别,参考:http://blog.csdn.net/gengshenghon…- gengshenghong
- 2011-11-23 14:40
- 3303
-
OpenMP中数据属性相关子句详解(1):private/firstprivate/lastprivate/threadprivate之间的比较
private/firstprivate/lastprivate/threadprivate,首先要知道的是,它们分为两大类,一类是private/firstprivate/lastprivate子句…- gengshenghong
- 2011-11-22 11:11
- 8647
-
OpenMP并行程序设计——for循环并行化详解
在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以重点介绍一下OpenMP中for循环的应用。个人感觉只要掌握了文中讲的这些就足够了,如果想要学…- u010839382
- 2016-10-06 22:34
- 242
-
OpenMP并行构造的schedule子句详解
schedule子句是专门为循环并行构造的时候使用的子句,只能用于循环并行构造(parallel for)中。 根据OpenMP Spec(http://openmp.org/mp-document…- gengshenghong
- 2011-11-22 23:22
- 10369
-
OpenMP并行构造的schedule子句详解
摘要: schedule子句是专门为循环并行构造的时候使用的子句,只能用于循环并行构造(parallel for)中。上面知道,schedule只能用于循环并行构造中,其作用是用于控制循环并行结构的任…- horizons_kong
- 2016-12-26 14:12
- 84
-
OpenMP Tutorial学习笔记(10)OpenMP指令之数据范围属性的子句
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#Clauses (1)Summary: 在OpenMP的指令中,有…- gengshenghong
- 2011-11-14 21:35
- 1210
-
OpenMP Tutorial学习笔记(4)OpenMP指令之同步构造(Parallel)
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#ParallelRegion Parallel指令。 (1)Paralle…- gengshenghong
- 2011-11-10 19:41
- 3275
-
OpenMP并行程序设计——for循环并行化详解
在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以重点介绍一下OpenMP中for循环的应用。个人感觉只要掌握了文中讲的这些就足够了,如果想要学…- u010525856
- 2017-07-18 15:48
- 108
-
OpenMP中数据属性相关子句详解(2):shared/default/copyin/copyprivate子句的使用
(1) shared shared子句可以用于声明一个或多个变量为共享变量。所谓的共享变量,是值在一个并行区域的team内的所有线程只拥有变量的一个内存地址,所有线程访问同一地址。所以,对于并行区域…- gengshenghong
- 2011-11-22 14:29
- 4109
-
OpenMP并行程序设计——for循环并行化详解
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++中使用OpenMP优化代码方便又简单…- horizons_kong
- 2016-12-27 14:40
- 141
-
OpenMP并行程序设计——for循环并行化详解
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++中使用OpenMP优化代码方便又简单,代…- l281865263
- 2015-04-15 20:22
- 475
-
OpenMP并行程序设计——for循环并行化详解
… 转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++中使用OpenMP优化代码方便又简…- a18831629729
- 2017-08-07 13:30
- 54
-
OpenMP Tutorial学习笔记(8)OpenMP指令之同步构造(Synchronization Constructs)
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#Synchronization 同步构造:Synchronization…- gengshenghong
- 2011-11-14 20:07
- 1412
-
OpenMP Tutorial学习笔记(9)OpenMP指令之THREADPRIVATE指令
OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#THREADPRIVATE (1)指令作用: threadpriv…- gengshenghong
- 2011-11-14 20:30
- 2813
-
欧姆龙cj系列指令详解
- 2016-02-23 15:18
- 51.06MB
- 下载
-
C54xx系列DSP指令详解
- 2015-05-09 10:43
- 727KB
- 下载
-
R700指令集架构参考手册第三章——控制流(CF)程序
R700指令集架构参考手册第三章——控制流程序- zenny_chen
- 2011-01-12 22:51
- 1463
-
DVD 光盘指令格式详解
- 2015-03-24 10:34
- 380KB
- 下载
-
R700指令集架构参考手册第二章——2.6 数据共享
R700指令集架构参考手册第二章——2.6 数据共享- zenny_chen
- 2011-01-03 23:41
- 1629
-
flash - AVM2 指令参考
flash的VM指令网上很少有介绍 指令列表 // width jumps term thro calls push pop pop_ex use_l def_l name {…- zzz3265
- 2014-06-14 14:11
- 1471
-
dos指令大全 详解版
- 2014-09-04 21:52
- 1.09MB
- 下载
-
Git常用指令,留作参考
git init &…- userNameSoHard
- 2016-12-27 14:43
- 85
-
C++ #pragma 预处理指令详解
- 2015-03-09 09:26
- 107KB
- 下载
-
【学习笔记】Dockerfile指令–参考手册学习总结
Dockerfile是docker用于构建image的文件。当执行 docker build 指令时,docker会根据Dockerfile和上下文(context)来执行构建image的命令。简单总…- li_ximin
- 2017-04-14 14:30
- 310
-
Linux指令详解.pdf
- 2015-05-27 15:13
- 291KB
- 下载
-
Linux 指令详解
- 2014-09-13 16:14
- 291KB
- 下载
-
vi指令参考手册
Linux内核移植和根文件系统制作第一章移植内核… 21.1 Linux内核基础知识… 21.1.1 Linux版本… 21.1.2 什么是标准内核… 21.1.3 Linux操作系…- kflower
- 2011-03-17 10:03
- 341
-
arm汇编指令集(详解)
- 2014-04-28 16:01
- 2.30MB
- 下载
-
HP-UX基本指令快速参考
HP-UX基本指令快速参考 操作命令 1-1.处理目录 pwd: 显示当前工作目录&& cd directory_path: 更改目录&& cd: 更改为主目录&am…- rocklei123
- 2015-02-02 10:37
- 453