如何回复因为openmp而损坏的内存卡损坏怎么修复

OpenMP多线程编程指南-博泰典藏网
典藏文档 篇篇精品
OpenMP多线程编程指南
导读:OpenMP多线程编程指南(一):基础篇,用于共享内存并行系统的多线程程序设计的一套指导性注释(CompilerDirec,OpenMP支持的编程语言包括C语言、C++和Fortran,只是不能利用多线程来加速程序执行,用于共享内存并行系统的多线程程序设计的一套指导性注释(CompilerDirec,OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言,能被用于显示指导OpenMP多线程编程指南(一):基础篇 蔡 小敏 摘要:OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMP的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。 关键字:模板,富士通南大软件有限公司,论文,英文Microsoft,日文ファイル?テンプレ`ト
1 OpenMP简介
OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。OpenMP是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言,能被用于显示指导多线程、共享内存并行的应用程序编程接口。其规范由SGI发起,具有良好的可移植性,支持多种编言,支持多种平台,包括大多数的类UNIX以及WindowsNT系统。OpenMP最初是为了共享内存多处理的系统结构设计的并行编程方法,与通过消息传递进行并行编程的模型有很大的区别,多个处理器在访问内存的时候使用的是相同的内存编址空间。SMP是一种共享内存的体系结构,同时分布式共享内存的系统也属于共享内存的多处理器结构,分布式共享内存将多机的内存资源通过虚拟化的方式形成一个相同的内存空间提供给多个机子上的处理器使用,OpenMP对这样的机器也提供了一定的支持。所以OpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
OpenMP的编程模型以线程为基础,通过编译指导语句来显示地指导并行化,为编程人员提供了对并行化的完整控制。 OpenMP的执行模型采用Fork-Join的形式,Fork-Join执行模式在开始执行的时候,只有一个叫做“主线程“的运行线程存在。主线程在运行过程中,当遇到需要进行并行计算的时候,派生出线程来 1 进行并行执行,在并行执行的时候,主线程和派生线程共同工作,在并行代码结束后,派生线程退出或者是挂起,不再工作,控制流程回到单独的主线程中。
OpenMP的功能由两种形式提供:编译指导语句和运行时库函数,并通过环境变量的方式灵活控制程序的运行。
编译指导语句: 指的是在编译器编译程序的时候,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语句。在C/C++程序中,OpenMP是以#pragma omp开始,后面跟具体的功能指令。即具有如下的形式: #pragma omp [clause[[,]clause]…s] 其中的directive部分就包含了具体的编译指导语句,包括parallel、for、parallel、for、section、sections、single、mater、ritical、flush、ordered和atomic。这些编译指导语句或者是用来分配任务,或者是用来同步。可选子句clause给出了相应的编译器指导语句的参数,子句可以影响到编译指导语句的具体行为,每个编译指导语句都有一系列适合它的子句。其中有5个编译指导语句不能跟别的子句:master、critical、flush、ordered、atomic。 运行时库函数: OpenMP运行时库函数原本用以设置和获取执行环境相关的信息。其也包含一系列用以同步的API。要使用运行时函数库所包含的函数,应该在相应的源文件中包含OpenMP头文件即omp.h。OpenMP的运行时库函数的使用类似于相应编程语言内部的函数调用。 由编译指导语句和运行时库函数可见,OpenMP同时结合了两种并行编程的方式,通过编译指导语句,可以将串行的程序逐步地改造成一个并行程序,达到增量更新程序的目的,从而减少程序编写人员的一定负担。同时,这样的方式也能将串行程序和并行程序保存在同一个源代码文件当中,减少了维护的负担。OpenMP在运行的时候,需要运行函数库的支持,并会获取一些环境变量来控制运行的过程。这里提到的环境变量是动态函数库中用来控制函数运行的一些参数。 上面讲到的两种形式中,编译指导语句是OpenMP组成中最重要的部分,也是编写OpenMP程序的关键。 编写OpenMP程序
从gcc4.2开始,OpenMP成为其内嵌支持的并行编程规范,可以直接编译内嵌OpenMP语句的C/C++/Fortran95的源代码。gcc4.2之前如果想在C/C++/Fortran中嵌入OpenMP语句的话,需要额外安装库和预处理器才能识别和正确处理这些语句。以下是gcc对OpenMP的支持情况:
gcc 4.2.0开始支持OpenMP v2.5 gcc 4.4.0开始支持OpenMP v2.5及v3.0 /* OpenMP程序结构 */ #include
int var1, var2, var3;
/* Serial code */
/* Begining of parallel section.Fork a team of threads */
/* Spectify variable scoping */
#pragma omp parallel private(var1, var2) shared(var3)
/* Parallel section executed by all threads */
/* All threads join master thread and disband */
} } 编写OpenMP程序的必要步骤: ? 安装支持OpenMP的gcc; ? 编写代码,加入头文件#include “omp.h”; ? 编写源程序; ? 配置环境变量,确定线程的数目; ? 编译程序,编译时需加入-fopenmp选项 ? 执行程序
例子 在/* Hello World 程序 */ #include
int main() {
int nthreads,
/* Fork a team of threads */
#pragma omp parallel private(nthreads, tid)
/* Obtain and print thread id */
tid = omp_get_thread_num();
printf(\n\
/* Only master thread does this */
if(tid == 0)
} nthreads = omp_get_num_threads(); printf(\n\执行结果 % gcc omp。c (由单线程来执行) % 。/a。out Hello, world。
% gcc -fopenmp omp。c (由多线程来执行) % 。/a。out Hello, world。 Hello, world。 Hello, world。 Hello, world。 环境变量 OpenMP可以使用环境变量OMP_NUM_THREADS以控制执行线程的数量。 例子 % gcc -fopenmp omp。c
% setenv OMP_NUM_THREADS 2(由2个线程来执行) % 。/a。out Hello, world。 Hello, world。
使用上的注意点 5
结束语 本文介绍了什么是OpenMP,以及OpenMP的工作原理。
[1] OpenMP官方网站,http://openmp.org.
4 [2] 日本信赖性学会?论文投稿规定, http://reaj.i-juse.co.jp/paper/kitei.html [3] 日本信赖性学会?研究论文书写方法, http://reaj.i-juse.co.jp/paper/kakikata.html
5 包含总结汇报、农林牧渔、表格模板、出国留学、外语学习、高中教育、初中教育以及OpenMP多线程编程指南等内容。
相关内容搜索上传用户:guzidvzulp资料价格:5财富值&&『』文档下载 :『』&&『』学位专业:&关 键 词 :&&&&&权力声明:若本站收录的文献无意侵犯了您的著作版权,请点击。摘要:(摘要内容经过系统自动伪原创处理以避免复制,下载原文正常,内容请直接查看目录。)跟着盘算机硬件的赓续成长,如今的多核处置器曾经愈来愈成熟,今朝推出的小我PC机处置器曾经是双核或四核,是以,充足应用多核处置器的优势曾经势在必行。在如许的情形下,以OpenMP为代表的同享存储模子编程技巧跟着多核技巧的提高而迅猛地成长起来。OpenMP编程模子是近年来在同享存储体系基本上鼓起的并行编程模子,今朝在Windows和Unix/Linux平台上都有详细的完成,是一种异常合适同享存储体系的编程尺度。应用OpenMP编写并行法式比传统的MPI开辟法式加倍简略,这是因为OpenMP应用多线程技巧,比MPI的多过程方法治理加倍节俭开支。是以,OpenMP已成为同享存储编程模子现实上的尺度。本文起首研讨了多核存储系统构造及顺应该系统构造的并行盘算模子,在此基本长进一步研讨了并行法式设计模子和设计办法,剖析了影响多核并行盘算机能的重要身分,为进一步研讨多核情况下OpenMP并行算法的设计及并行法式的开辟奠基了基本。经由过程剖析OpenMP编程模子,重点研讨了OpenMP并行编程形式的设计情势fork一join形式和SPMD形式的法式设计,并经试验剖析比拟了两种形式开辟法式的特色,验证了应用SPMD形式开辟的年夜型运用法式具有的机能开支较小、可扩大性好等长处。在研讨OpenMP并行法式的开支模子的基本上,剖析了影响OpenMP并行算法机能的身分,提出了一套OpenMP法式的优化办法。优化办法包含并行域的扩大和归并、Cache射中率优化、轮回调剂方法优化、变量属性优化、处置器线程绑定优化和下降伪同享成绩的优化等。经由过程试验测试注解,这些优化办法在处理现实成绩中获得了较好的运用后果。本文剖析了年夜型稀少矩阵的构造特色,并应用CSR紧缩存储方法对稀少矩阵停止紧缩存储,从而节俭了稀少矩阵的存储空间。在此基本上,进一步剖析了因为紧缩存储构造而招致的机能身分,并提出了响应的OpenMP编程处理计划。设计和完成了求解年夜型稀少矩阵特点值的逆幂法,而且完成了逆幂法求解进程中求解年夜型稀少方程组的共轭梯度法(CG)。经由过程剖析逆幂法和共轭梯度法的内涵并行性,设计了应用OpenMP停止逆幂法和共轭梯度法的并行化计划,而且给出了详细完成办法。经由过程试验和成果注解,应用SPMD形式设计的OpenMP并行法式在求解年夜型稀少矩阵运用中具有优越的机能表示,可以或许年夜幅度晋升法式机能。本文提出的OpenMP并行法式优化办法也在求解年夜型稀少矩阵成绩上获得了验证,理论注解,经由过程综合应用这些并行法式优化办法,可以或许明显地晋升OpenMP运用法式的机能。Abstract:Followed by the growth of computer hardware ceaselessly, today's multi-core processors have become increasingly mature, today launched personal PC processor was a dual core or quad core, is to the advantage of full use of multi-core processor once it is imperative. In such circumstances, to OpenMP on behalf of the shared memory programming model skills followed by multi nuclear skills improve and rapid growing up. OpenMP programming model is in recent years in a shared storage system basically muster the parallel programming model, currently in the windows and UNIX / Linux platforms are complete, is a very suitable shared storage system programming scale. The application of OpenMP to write parallel French than the traditional French Open MPI more simple, this is because the OpenMP application of multithread technique, multi process MPI governance than double spending. So OpenMP has become a reality on the shared memory programming model scale. This paper studies the multi nuclear storage system construction and CIS should system structure of parallel computing model, on the basis of the further discussion of the parallel French mold design and design methods, analysis of the impact of multi-core parallel computing function status, for further discussion of multiple cores OpenMP parallel algorithm design and parallel French development has laid the foundation. Through the analysis of the process of OpenMP programming model, focus on the research of the OpenMP parallel programming design situation fork a join form and SPMD style of French design and the test analysis and compare the two forms of development characteristics of French, verify the application of SPMD model to develop the large French has the function of low cost and expand the advantage of using. French spending in the research of OpenMP parallel model basically, analysis of the OpenMP parallel algorithm is proposed to optimize the function of identity, to a French OpenMP. The optimization approach consists of a parallel domain expansion and merging, cache hit rate optimization, cycle adjustment optimization method and attribute variables optimization, a processor thread bound optimization and decreased false sharing performance optimization. Through the test process test, the optimal way to obtain a better use of the consequences in dealing with the reality of achievement. This paper analyzes the structural features of large sparse matrix, and the application of CSR compression storage method on the sparse matrix storage so as to stop tightening, save the storage space sparse matrix. This basically, further analysis because of the tight storage structure incurred by the function of identity, and proposed treatment plan in response to the OpenMP programming. The design and completion of solving large sparse matrix eigenvalue inverse power method, and completed the conjugate gradient method for solving the inverse power method in solving process of large sparse equations (CG). Through the analysis of the connotation of the inverse power method and the conjugate gradient method of parallelism, the design and application of OpenMP parallel program stop inverse power method and the conjugate gradient method, and gives the specific method. Through the process test results and annotations, application of SPMD form design OpenMP parallel solving large sparse matrix in French use has advantages in performance, can greatly promote the function of french. The OpenMP parallel French optimization method in solving large sparse matrix problems are given to verify theoretical annotation, via a process of comprehensive application of these parallel French optimization method, may obviously promotion OpenMP using French function.目录:摘要4-6Abstract6-7第1章 引言11-15&&&&1.1 概述11-13&&&&&&&&1.1.1 并行计算技术的发展前景11-12&&&&&&&&1.1.2 多核处理器的发展12&&&&&&&&1.1.3 共享存储编程模型研究现状12-13&&&&1.2 本文的主要研究工作13-15&&&&&&&&1.2.1 研究内容13-14&&&&&&&&1.2.2 本文的创新点14-15第2章 多核并行计算概述15-25&&&&2.1 多级存储体系结构15-17&&&&&&&&2.1.1 Cache 映射策略15-16&&&&&&&&2.1.2 并行计算机的访存模型16-17&&&&2.2 并行计算模型17-18&&&&&&&&2.2.1 SIMD 同步并行计算模型17-18&&&&&&&&2.2.2 MIMD 异步并行计算模型18&&&&2.3 并行程序设计模型18-19&&&&&&&&2.3.1 共享变量模型18-19&&&&&&&&2.3.2 消息传递模型19&&&&&&&&2.3.3 数据并行模型19&&&&2.4 并行程序设计方法19-22&&&&&&&&2.4.1 数据分解法19&&&&&&&&2.4.2 分治法19-20&&&&&&&&2.4.3 流水线模式20&&&&&&&&2.4.4 任务并行20-21&&&&&&&&2.4.5 任务图调度法21&&&&&&&&2.4.6 动态任务调度法21-22&&&&2.5 影响多核并行计算性能的因素22-25&&&&&&&&2.5.1 Cache 命中率问题22-23&&&&&&&&2.5.2 伪共享问题23-25第3章 OpenMP 编程模式与程序性能优化方法25-44&&&&3.1 OpenMP 编程模型25-29&&&&&&&&3.1.1 OpenMP 介绍25-27&&&&&&&&3.1.2 内存模型27-28&&&&&&&&3.1.3 并行方式28&&&&&&&&3.1.4 嵌套并行28-29&&&&&&&&3.1.5 数据环境29&&&&&&&&3.1.6 OpenMP 编译及处理器绑定29&&&&3.2 OpenMP 并行程序的编程模式29-31&&&&&&&&3.2.1 fork-join 模式30&&&&&&&&3.2.2 SPMD 模式30-31&&&&3.3 OpenMP 性能分析31-32&&&&&&&&3.3.1 OpenMP 开销模型31&&&&&&&&3.3.2 影响OpenMP 并行算法性能的因素31-32&&&&3.4 OpenMP 并行程序优化方法32-44&&&&&&&&3.4.1 并行域的扩展与合并32-35&&&&&&&&3.4.2 Cache 命中率优化35-37&&&&&&&&3.4.3 循环调度方式优化37-38&&&&&&&&3.4.4 变量属性的优化38-39&&&&&&&&3.4.5 处理器线程绑定优化39-41&&&&&&&&3.4.6 降低伪共享问题的优化方法41&&&&&&&&3.4.7 并行程序性能优化方法实验与分析41-44第4章 大型稀疏矩阵的OpenMP 算法研究及实现44-61&&&&4.1 解大型稀疏矩阵特征值串行算法44-48&&&&&&&&4.1.1 逆幂法44-45&&&&&&&&4.1.2 共轭梯度法45-48&&&&4.2 解大型稀疏矩阵特征值并行化研究48-49&&&&&&&&4.2.1 并行化的必要性和可行性48-49&&&&&&&&4.2.2 并行算法设计难点49&&&&4.3 大型稀疏矩阵向量乘积并行算法设计49-51&&&&&&&&4.3.1 CSR 存储结构49-50&&&&&&&&4.3.2 稀疏矩阵向量乘积的OpenMP 并行算法50-51&&&&&&&&4.3.3 稀疏矩阵向量乘积的性能分析51&&&&4.4 大型稀疏矩阵向量乘积并行算法优化51-56&&&&&&&&4.4.1 寄存器分块算法51-53&&&&&&&&4.4.2 Cache 分块算法53-54&&&&&&&&4.4.3 数据压缩优化方法54-56&&&&&&&&4.4.4 循环优化方法56&&&&4.5 解大型稀疏矩阵特征值的OpenMP 并行算法实现56-61&&&&&&&&4.5.1 OpenMP 并行化的一般方法56-57&&&&&&&&4.5.2 逆幂法并行化的实现方法57-58&&&&&&&&4.5.3 共轭梯度法求解大型稀疏方程组的并行化的实现方法58-61第5章 算法性能测试与性能分析61-66&&&&5.1 测试环境61&&&&5.2 测试结果及分析61-66&&&&&&&&5.2.1 稀疏矩阵的规模小于Cache 存储容量的测试61-63&&&&&&&&5.2.2 稀疏矩阵的规模大于Cache 存储容量的测试63-66结论66-68致谢68-69参考文献69-72攻读学位期间取得的成果72分享到:相关文献|在法汉-汉法词典中发现10个解释错误,并通过审核,将获赠《法语助手》授权一个
添加笔记:
<div id="correct" title="在法汉-汉法词典中发现10个解释错误,并通过审核,将获赠《法语助手》授权一个">有奖纠错
OpenMP Architecture Review Board (ARB)于1997年10月发布了OpenMP for Fortran 1.0。次年的10月,发布了C/C++的标准。2000年,发布了Fortran语言的2.0版本,并于2002年发布了C/C++语言的2.0版本。2005年,包含Fortran和C/C++的2.5版本发布了。
在2008年5月发布了3.0版。3.0中的新功能包括任务(tasks)和任务结构(task construct)的概念。这些新功能总结在OpenMP3.0规范的附录F中。
OpenMP规范的3.1版于日发布。
4.0版本在2013年7月发布,它增加或改进以下功能:支持加速器,原子性,错误处理,线程关联,任务扩展,减少用户定义的SIMD支持和Fortran 2003的支持。
OpenMP提供的这种对于并行描述的高层抽象降低了并行编程的难度和复杂度,这样进程员可以把更多的精力投入到本身,而非其具体实现细节。对基于数据分集的多线程进程设计,OpenMP是一个很好的选择。同时,使用OpenMP也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程进程设计中的难题,但在OpenMP中,OpenMP库从进程员手中接管了部分这两方面的工作。
#pragma omp &directive& [clause[[,] clause] ...]
其中,directive共11个:
内存位置将会原子更新(Specifies that a memory location that will be updated atomically.)
线程在此等待,直到所有的线程都运行到此barrier。用来同步所有线程。
其后的代码块为,任意时刻只能被一个线程运行。
所有线程对所有共享对象具有相同的内存视图(view of memory)
用在for循环之前,把for循环并行化由多个线程执行。循环变量只能是整型
指定由主线程来运行接下来的程序。
指定在接下来的代码块中,被并行化的 for循环将依序运行(sequential loop)
代表接下来的代码块将被多个线程并行各执行一遍。
将接下来的代码块包含将被并行执行的section块。
之后的程序将只会在一个线程(未必是主线程)中被执行,不会被并行执行。
threadprivate
指定一个变量是线程局部存储(thread local storage)
共计13个clause:
copyin 让threadprivate的变量的值和主线程的值相同。
copyprivate 不同线程中的变量在所有线程**享。
Specifies the behavior of unscoped variables in a parallel region.
firstprivate
对于线程局部存储的变量,其初值是进入并行区之前的值。
判断条件,可用来决定是否要并行化。
lastprivate 在一个循环并行执行结束后,指定变量的值为循环体在顺序最后一次执行时取得的值,或者#pragma sections在中,按文本顺序最后一个section中执行取得的值。
忽略barrier的同步等待。
num_threads
设置线程数量的数量。默认值为当前计算机硬件支持的最大并发数。一般就是CPU的内核数目。超线程被操作系统视为独立的CPU内核。
使用于 for,可以在将循环并行化的时候,将程序中有标记 directive ordered 的部份依序运行。
指定变量为线程局部存储。
Specifies that one or more variables that are private to each thread are the subject of a reduction operation at the end of the parallel region.
设置for循环的并行化方法;有 dynamic、guided、runtime、static 四种方法。
schedule(static, chunk_size) 把chunk_size数目的循环体的执行,静态依序指定给各线程。
schedule(dynamic, chunk_size) 把循环体的执行按照chunk_size(缺省值为1)分为若干组(即chunk),每个等待的线程获得当前一组去执行,执行完后重新等待分配新的组。
schedule(guided, chunk_size) 把循环体的执行分组,分配给等待执行的线程。最初的组中的循环体执行数目较大,然后逐渐按指数方式下降到chunk_size。
schedule(runtime)
循环的并行化方式不在编译时静态确定,而是推迟到进程执行时动态地根据环境变量OMP_SCHEDULE 来决定要使用的方法。
shared 指定变量为所有线程共享。
OpenMP的库函数
OpenMP定义了20多个库函数:
1.void omp_set_num_threads(int _Num_threads);
在后续并行区域设置线程数,此调用只影响调用线程所遇到的同一级或内部嵌套级别的后续并行区域.说明:此函数只能在串行代码部分调用.
2.int omp_get_num_threads(void);
返回当前线程数目.说明:如果在串行代码中调用此函数,返回值为1.
3.int omp_get_max_threads(void);
如果在进程中此处遇到未使用 num_threads() 子句指定的活动并行区域,则返回进程的最大可用线程数量.说明:可以在串行或并行区域调用,通常这个最大数量由omp_set_num_threads()或OMP_NUM_THREADS环境变量决定.
4.int omp_get_thread_num(void);
返回当前线程id.id从1开始顺序编号,主线程id是0.
5.int omp_get_num_procs(void);
返回进程可用的处理器数.
6.void omp_set_dynamic(int _Dynamic_threads);
启用或禁用可用线程数的动态调整.(缺省情况下启用动态调整.)此调用只影响调用线程所遇到的同一级或内部嵌套级别的后续并行区域.如果 _Dynamic_threads 的值为非零值,启用动态调整;否则,禁用动态调整.
7.int omp_get_dynamic(void);
确定在进程中此处是否启用了动态线程调整.启用了动态线程调整时返回非零值;否则,返回零值.
8.int omp_in_parallel(void);
确定线程是否在并行区域的动态范围内执行.如果在活动并行区域的动态范围内调用,则返回非零值;否则,返回零值.活动并行区域是指 IF 子句求值为 TRUE 的并行区域.
9.void omp_set_nested(int _Nested);
启用或禁用嵌套并行操作.此调用只影响调用线程所遇到的同一级或内部嵌套级别的后续并行区域._Nested 的值为非零值时启用嵌套并行操作;否则,禁用嵌套并行操作.缺省情况下,禁用嵌套并行操作.
10.int omp_get_nested(void);
确定在进程中此处是否启用了嵌套并行操作.启用嵌套并行操作时返回非零值;否则,返回零值.
互斥锁操作
嵌套锁操作
11.void omp_init_lock(omp_lock_t * _Lock);
12. void omp_init_nest_lock(omp_nest_lock_t * _Lock);
初始化一个(嵌套)互斥锁.
13.void omp_destroy_lock(omp_lock_t * _Lock);
14.void omp_destroy_nest_lock(omp_nest_lock_t * _Lock);
结束一个(嵌套)互斥锁的使用并释放内存.
15.void omp_set_lock(omp_lock_t * _Lock);
16.void omp_set_nest_lock(omp_nest_lock_t * _Lock);
获得一个(嵌套)互斥锁.
17.void omp_unset_lock(omp_lock_t * _Lock);
18.void omp_unset_nest_lock(omp_nest_lock_t * _Lock);
释放一个(嵌套)互斥锁.
19.int omp_test_lock(omp_lock_t * _Lock);
20.int omp_test_nest_lock(omp_nest_lock_t * _Lock);
试图获得一个(嵌套)互斥锁,并在成功时放回真(true),失败是返回假(false).
21.double omp_get_wtime(void);
获取wall clock time,返回一个double的数,表示从过去的某一时刻经历的时间,一般用于成对出现,进行时间比较.
此函数得到的时间是相对于线程的,也就是每一个线程都有自己的时间.
22.double omp_get_wtick(void);
得到clock ticks的秒数.
在 omp parallel 段内的进程代码由多线程来运行:
int main(int argc, char* argv[])
#pragma omp parallel
printf("Hello, world.\n");
% gcc omp.c (由单线程来运行)
Hello, world.
% gcc -fopenmp omp.c (由多线程来运行)
Hello, world.
Hello, world.
Hello, world.
Hello, world.
OpenMP可以使用环境变量 OMP_NUM_THREADS以控制运行线程的数量。
% gcc -fopenmp omp.c
% setenv OMP_NUM_THREADS 2(由2线程来运行)
setenv是CSH的指令
在bash shell 环境中 要用export
% export OMP_NUM_THREADS=2 (由2线程来运行)
Hello, world.
Hello, world.
优点和缺点
可移植的多线程代码(在C/C++和其他语言中,人们通常为了获得多线程而调用特定于平台的原语)
简单,没必要向MPI中那样处理消息传递
数据分布和分解由指令自动完成
增量并行,一次可以只在代码的一部分执行,对代码不需要显着的改变
统一的顺序执行和并行执行的代码,在顺序执行编译器上,OpenMP的执行按照注释进行对待;
在一般情况下,使用OpenMP并行时原始的(串行)代码语句不需要进行修改,这减少不经意间引入错误的机会。
同时支持粗粒度和细粒度的并行
存在引入难以调试的同步错误和竞争条件的风险
目前,只能在共享内存的多处理器平台高效运行
需要一个支持OpenMP的
可扩展性是受到内存架构的限制
不支持比较和交换
缺乏可靠的错误处理
缺乏对线程与处理器映射的细粒度控制
在上不能使用
很容易出现一些不能共享的代码
多线程的可执行文档的启动需要更多的时间,可能比单线程的运行的慢,因此,使用多线程一定要有其他有优势的地方
很多情况下使用多线程不仅没有好处,还会带来一些额外消耗
作为高层抽象,OpenMP并不适合需要复杂的线程间同步和互斥的场合。 OpenMP的另一个缺点是不能在非共享内存系统(如)上使用。在这样的系统上,使用较多。
编译器支持
主流C/C++编译器,如gcc与visual C++,都内在支持OpenMP。一般都必须在进程中#include &omp.h&
gcc编译时需使用编译选项-fopenmp。但是,如果编译为目标文档与链接生成可执行文档是分开为两步操作,那幺链接时需要给出附加库gomp,否则会在链接时报错“undefined reference to `omp_get_thread_num'"。
Visual C++需要在IDE的编译选项-&语言-&支持OpenMP。这实际上使用了编译选项/openmp
关注我们的微信
下载手机客户端
赞助商链接
““猫耳法语”汇聚8年来6000多位一对一优秀学员出众的考试、面签技巧。TEFAQ-B2保分课程、CELA留学保签直通车。mor-
欧洲最具活力的中文社区.最大的关于法国的中文网络平台
法语爱好者的家园 留学与考试的助手 提供各种法语相关的信息与服务

我要回帖

更多关于 内存卡损坏怎么修复 的文章

 

随机推荐