第六讲--并行计算基础和操作.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
*/30 */30 Windows 系统下 Fortran 编程 李兴旺 QQ:410328458 长安大学地质工程与测绘学院地球物理系 第六讲 并行计算基础及操作 说明 并行计算方面的内容,我了解不多,也没有太多并行编程经验,下面的内容可能存在一些不足和错误,还请各位批评指正。 本教程主要介绍一些基础知识和操作,未涉及过多的具体函数,旨在使初学者可以成功运行自己的第一个并行程序,深入学习还请仔细阅读教材或规范。 部分代码或操作基于特定的软硬件环境,可能会有一定差异。 1、简介 并行计算主要有三种: 1、单机多核并行:OpenMP 2、多节点并行:MPI 3、显卡加速:CUDA MPI也可用于单机,上述三种方案可混合使用。为了方便并行、减少错误,建议尽量使用纯函数或逐元函数。 注:并行方案很多,此处所列条目并不完整,下文仅介绍前面两种方案。 1、简介 1、OpenMP 现今的处理器一般均包含多个计算核心(例如4核),单台机器(节点)更是可能安装有多个处理器(例如2颗)。然而,串行程序仅能够使用一个处理核心进行计算,最多可使用12.5%的CPU资源。OpenMP并行通过启用多线程来执行任务,可使用该计算机上的任意多个核心进行计算。线程数可以大于8(CPU核数),但计算速度可能降低。 1、简介 2、MPI 假设你有3台这样的机器(或集群),OpenMP只能使用其中一台资源,此时需用MPI实现跨节点并行。MPI并行在每个节点启用一个或多个进程来执行任务。同样,各节点上进程数可以大于该节点的CPU核数,但可能降低计算性能。如果你只有一台机子,也可以使用MPI并行。常用的MPI库有:Intel MPI, MPICH, OpenMPI, MS MPI等。 一个进程可以含有多个线程,自行百度二者的区别。 1、简介 3、CUDA CUDA是 NVIDIA 创造的一个并行计算平台和编程模型,利用图形处理器(GPU)能力,提高计算性能。它需要: 支持CUDA的GPU(比较贵); 支持CUDA的fortran编译器。貌似现在只有PGI支持,可使用免费的社区版; 会CUDA的人。 学习成本太高,暂时放弃。 1、简介 OpenMP MPI 硬件环境 单机 多节点(集群) 实现方式 多线程 多进程 特点 共享内存,各线程可访问同一数据 各进程拥有独立的空间,进程间通过消息传递信息 参考文献 《Parallel Programming in Fortran 95 using OpenMP》Miguel Hermanns 及其中文译本1 《并行计算导论》张林波; 《高性能计算之并行编程技术—— MPI并行程序设计》都志辉; 依赖库 依赖OMP运行库,多数编译器支持,无需额外安装 需额外安装MPI运行库,ivf安装包自带intel mpi库 在线文档 /specifications /doc/current/ 1、/resource_ebook-24-1.html 2、OpenMP 启用OMP并行,只需在 项目-属性 中更改设置即可。选项包括生成并行或串行代码,后者 仅可使用OMP的部分函数和功能,且生成的程序不具有并行执行的能力,该选项较少使用。 2、OpenMP OMP并行库包含了众多函数,使用时须在代码中 use omp_lib。下面介绍两个特殊的标记: !$ !$OMP !$后面跟普通的fortran语句,!$OMP后面则为OMP指令,注意标记和语句(或指令)之间必须有空格。 当关闭OMP选项或者选择生成串行代码时,这两个标记会被识别为注释。合理使用!$标记,并行代码不经任何修改即可转为串行。 2、OpenMP 现以一个例子演示OMP并行的执行情况。假设某反演工作需要迭代多次,每次迭代中均需要计算num个源点产生的场值(num个任务是相互独立的,这是并行计算的基本要求),可分配给多个线程同时执行。 为简化代码,计算场值的任务由简单的函数fun代替。下面给出示例代码,同时展示串行和并行的计算结果。 2、OpenMP 2、OpenMP 代码说明 L21 获取处理器核数,建议线程数不大于核数 L24-34 parallel do指令对,设置并行域,将j循环拆分至各线程。Num_Threads(NumThread):并行域启用的线程数;Default(Shared) Private(k,j):并行域中变量默认为共享,但k和j为私有;Schedule(Guided):指定任务分配方式。 L26 获取当前线程号,线程从0开始编号 L27-29 Critical指令对,同时仅有一个线程执行输出语句,防止冲突 L28 输出执行每次任务的线程号等信息 L30 如果开启OMP,跳过L31的输出语句 2

文档评论(0)

js1180 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档