并行程序设计心得_第1页
并行程序设计心得_第2页
并行程序设计心得_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、MPI 实质上是多进程,并且不支持多线程;2、初始化时在每个处理机结点上创立一个进程,执行期间进程数不能动态转变;3、MPI 其实就是一种在各进程之间进展通讯的标准;4、并行程序设计最常用的两种方法:1,它主要用在共享存储构造中OpenMP2,并到达任务间需要的同步操作,它主要应用于分布式存储构造中MPI5、一个根本的MPI 程序的流程图对于多核程序设计的一点总结CPU下, 是多个线程在同一个CPU 行。的环境下设计出更适合多核系统的程序,则是一个挑战。多个独立的任务,并确定这些任务之间的相互依靠关系,这就称为分解(decomposition)。如下如示:分解方式设计说明任务分解不同的程序

2、行为承受不同的线程实现常用于GUI应用程序数据分解多个线程对不同的数据块执行一样的操作常用于音频、图像处理和科学计算应用程序数据流分解一个线程的输出作为另一个线程的输入应留意尽量避开延迟任务分解:对应用程序依据其执行的功能进展分解的过程称为任务分解(task decomposition)。依据这种方法,就能够对众多的独立任务进展分类。假设其中两个任务能够同时运行,那么开发人员就应当对其进展调度,形成二者之间的并行执行。数据分解:数据分解也称为数据级并行(data-level parallelism)。是将应用程序依据各任务解方式进展分解的应用程序都包含多个线程作。解方式,如典型的生产者/消费者

3、问题。对于任务分解,有两个需要留意的地方:划分的对象是计算,将计算划分为不同的任务数据有相当程序的相交,意味着要重进展数据划分和功能划分。将这几种模型划分成不同的任务,再分别进展并行地运算。对于数据分解,划分的对象是数据,可以是算法的输入数据、中间处理数据和输出数据。在划分时应当考虑到数据上的相应操作。1000来分别计算不同批次的数据。然后再将计算的中间数据加到一起成为最终的结果。线程过多响主要在于:将给定的工作量划分给过多的线程会造成每个线程的工作量过少终止的开销比程序实际工作的时间还要多。的开销、保存和恢复线程cache状态的开销、废除虚存的开销、线程聚拢在一起等待猎取某个锁。怎样解决这个

4、问题:限制可运行线程的个数将计算线程与I/O线程分别开使用已有的技术,如OpenMP,线程池等数据竞争、死锁死锁,想必大家都很生疏。这里谈谈一些简洁的避开死锁的规章: 加锁的挨次是关键,使用嵌套的锁时必需保证以一样的挨次猎取锁防止发生饥饿:即这个代码的执行是否肯定会完毕。不要重复恳求同一个锁越简单的加锁方案越有可能造成死锁设计应力求简洁竞争剧烈的锁 Linux内核中就使用了大内核锁,现在已经把锁给细划到不同的子系统中去了。假设一个数据构造被频繁读取但不被频繁写入,就可以使用读写锁来解决竞争。线程安全函数APUE2上面的线程一章。存储效率问题完成上百次的操作。因此,现在的程序往往受限于存储器的瓶

5、颈。得更加紧凑。其次是cache的利用。可以削减数据在不同CPU的cache间的移动。CPU亲合力(CPU Affinity)就是指在Linux系统中能够将一个或多个进程绑定到一个或多个处理器上运行。一个进程的CPU亲合力掩码打算了该进程将在哪个或哪几个CPUCPU亲合力的掩码可能会获得更好的性能。在下面的例子中讲解了如何利用将某个进程绑定以某个CPU上运行的实例。 HYPERLINK “ :/ :/ 3Ddigest目前双核心的 CPU 当道,AMD 的 Athlon64x2、Intel 的 Pentium-D、Core Duo,以及马上上市的 Core 2 Duo,俨然将成为下一代电脑的主

6、流尤其是超低价的Pentium D,确定是现阶段 C/P 值极高的双核心 CPU。但是双核心有什麼用呢?对於一般单一执行绪single thread的程式,多核心的处理器并没有方法提升它的处理效能;不过对於多执行绪multi thread的程式,就可以透过不同的核心同时计算,来 十次,都丢给同一颗核心做的话,自然就是 10 秒 * 10 次,也就是 100 秒了;但是以多执行绪的程式来说,它可以把这一件事,分给两颗核心各自做,每颗核心各做 5 次,所以所需要的时间就只需要 50 秒!OpenMP诞生于1997年目前正在制定并马上推出OpenMP 3.0版本 HYPERLINK “ :/ ope

7、/“ 标准版本2.5,2022年5月,支持Fortran/C/C+面对共享内存以及分布式共享内存的多处理器多线程并行编程语言一种能够被用于显式指导多线程、共享内存并行的应用程序编程接口API具有良好的可移植性,支持多种编程语言支持多种平台优点是简洁、通用,有利于快速开发并行程序大多数的类UNIX系统以及Windows NT系统Windows 2022,Windows XP,Windows Vista等从物理划分上共享内存和分布式内存是两种根本的并行计算机存储方式除此之外分布式共享内存也是一种越来越重要的并行计算机存储方式;共享内存多处理器内存是共享的,某一个处

8、理器写入内存的数据会马上被其它处理器访问到分布式内存每一个处理器或者一组处理器有一个自己私有的内存单元共享或者不共享一个公用的内存单元P0P1P0P1P2Pn共享内存目前业界流行的共享内存模型开发标准是OpenMP。OpenMP 定义了一套编译指导语句,用于指定程序的并行性、数据的共享/私有等信息。其目标是为SMP 系统供给可移植、可扩展的开发接口。Intel,DEC,Silicon Graphics,Kuch & Associates 和IBM 早在15 年前就联合定义了OpenMP 早期标准。的OpenMP 标准由OpenMP Architecture Review Board 于1997

9、 年推出,现在已进展到2.0 版。作为一套可移植可扩展的标准OpenMP 为程序员供给 OpenMP 在全部的架构上都支持使用C/C+FORTRAN 进展共享内存并行编程,包括基于Microsoft? WindowsNT? 和UNIX?操作系统的构架OpenMP C/C+和FORTRAN 创立多线程应用。对于包含有多个耗时的循环的应用,OpenMP 线程组来串行执行。OpenMP 使用fork- join 并行机制,程序首先挨次执行,然后转换成为并行程序。OpenMP 允许程序员使用划分良好的循环级并行机制来扩展应用,实现多处理。它们编码。展望:OpenMP 将成为支持SMP 系统编程的主要标

10、准,将来的工作在于争辩和开发更加有效的OpenMP 编译器,以及更加强大友好的开发、调试工具。原理:以线程为根底,通过编译指导语句来显式地指导并行化,为编程人员供给了对并行化的完整的把握。承受Fork-Join的形式fork-Join执行模式在开头执行的时候,只有主线程的运行线程存在主线程在运行过程中,当遇到需要进展并行计算的时候,派生出Fork,创立线程或者唤醒已有线程线程来执行并行任务在并行执行的时候,主线程和派生线程共同工作在并行代码完毕执行后,派生线程退出或者挂起,不再工作,把握流程回到单独的主线程中Join,即多线程的会和。OpenMP的功能由两种形式供给编译指导语句运行时库函数通过

11、环境变量的方式机敏把握程序的运行编译指导语句在编译器编译程序的时候,会识别特定的注释这些注释就包含着OpenMP程序的一些语义#pragma omp clause , clause其中directive局部就包含了具体的编译指导语句,包括parallel,for,parallelfor,section, sections, single, master, critical, flush, ordered和atomic。在无法识别OpenMP语义的一般编译器中,这些注释被无视将串行的程序逐步地改造成一个并行程序运行时库函数OpenMP运行时函数库原本用以设置和猎取执行环境相关的信息,它们当中也包含一系列用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论