哈尔滨工业大学计算机科学与技术学院
并行处理与体系结构
哈尔滨工业大学计算机科学与技术学院
第 2章 并行 编程基础
??1 并行编程综述
??2 进程任务和线程
??3 并行性问题
??4 交互和通信问题
哈尔滨工业大学计算机科学与技术学院
?1 并行编程综述
? 并行编程处于令人遗憾的状况,
? 并行软件开发远落后于并行硬件的进展。
缺少合适的并行软件是阻碍主流用户接
纳并行计算的主要原因。
? 与顺序计算相比,当今的并行系统软件
和应用软件不仅数量很少,而且功能性也
相当原始。
? 隧道之末总有阳光。
哈尔滨工业大学计算机科学与技术学院
一,并行编程缘何艰难
? 在并行编程中有许多不同的模型。是
一个更复杂的智力活动。
? 并行程序的编译器、调试程序、以及
特征分析器 (profiler)要比串行程序
落后得多。
哈尔滨工业大学计算机科学与技术学院
哈尔滨工业大学计算机科学与技术学院
?1.顺序编程
?长期以来已建立了许多算法范例
?一些实现指导用户从事算法设计。
哈尔滨工业大学计算机科学与技术学院
2.并行编程
?并行编程处于初级阶段;
?对于并行问题的应用,不太可
能有一个现成的并行代码;
?并行代码的机器不同。
哈尔滨工业大学计算机科学与技术学院
?并行编程也不支持成熟、通用和稳
定的工具;
?并行算法范例仍未能被很好地理解
或被广泛地接受;
?不存在单一、通用的机器模型;
?并行编程的模型有两级,而在每一
级上又有许多不同模型。
哈尔滨工业大学计算机科学与技术学院
?与顺序语言在编程或自然模型级上缺
少代可扩展和异构可扩展的能力
? 这些并行语言大多数在当前系统上使
用的并行语言均是 Fortran或 C的某种
扩展。
?一个编程模型即是程序员在开发一个
并行程序时所见到和使用的模型。
哈尔滨工业大学计算机科学与技术学院
? 一个自然模型是由一个特定并行计算机平
台所提供的、用户可见的最低层的编程模
型。其他的编程模型可在此自然模型上加
以实现。
? 例如,在一个 SGI PowerChallenge计算机上
(它是 SMP),自然模型为共享变量模型 (如
SGIPowerC)。
? 数据并行 (如 HPF)和消息传送 (如 MPl)可在其
顶部实现。
哈尔滨工业大学计算机科学与技术学院
3.并行编程进展
? 尽管以上的回顾较为悲观,但在并行
编程领域已有了许多进步,
? 已开发了许多并行算法。
? 尽管大多数算法基于非现实的 PRAM模型,
但其中某些在作适当修正后可以实用。
? 已涌现一小批简单的并行算法范例,
且已逐步为用户所接受。
哈尔滨工业大学计算机科学与技术学院
? 自然模型正集中趋向于两种模型,
?适用于 PVP,SMP和 DSM的单地址空间
的共享变量模型;
?适用于 MPP和机群的多地址空间的消
息传递模型。
?SIMD模型已从主流、通用并行计算
机淡出,但对于如同语言、图象和
多媒体处理的专用嵌入式应用仍非
常有用 。
哈尔滨工业大学计算机科学与技术学院
? 高层并行编程模型
趋向于 3种标准模型,
? 数据并行 (如 HPF),
? 消息传递 (如 HPVM和 MPl)
? 共享变量 (如 HANSI X3H5)。
此外还有一种模型 ----串转并;
? 用户只需编写顺序程序,其中的蕴式并行
性由并行化编译器 (如 Kap)进行析取 。
哈尔滨工业大学计算机科学与技术学院
?4.吞吐率处理
? 在一个问题的处理上,并行少,串行
多。
? 增加多个独立顺序作业的系统吞吐
率。
? 顺序程序并行系统 (SPPS)模型,也称
为吞吐率处理。
哈尔滨工业大学计算机科学与技术学院
?二、并行编程环境
?1,一个典型的并行处理系统
? 如图所示的结构
? 无论是算法还是源代码均需显式地并
行化。
哈尔滨工业大学计算机科学与技术学院
哈尔滨工业大学计算机科学与技术学院
?编译器将源代码翻译成二进制代码
在并行平台上运行,
?该平台包含操作系统和在它之下的并
行计算机硬件。
?任何编程语言均有运行时间支持系
统,它是与用户代码连接程序。
哈尔滨工业大学计算机科学与技术学院
?2.环境工具
? 一个环境工具是指任何硬件和软件的实用
程序,以帮助用户程序的开发和执行。
? 编程环境 (或简称环境 ):所有这类工具集
合。
? 工具的实例包括操作系统实用程序、程序
设计语言、编译器以及运行时间库等。
? 环境工具是那些通常与操作系统或程序设
计语言无关的工具集。
哈尔滨工业大学计算机科学与技术学院
?环境工具包括以下类型,
?作业管理工具
?包括网络排队系统 (NQS)和负载共享
工具 (LSF)。
哈尔滨工业大学计算机科学与技术学院
?调试工具
?性能工具
?它们用来监控用户应用程序以识
别性能瓶颈之所在。
哈尔滨工业大学计算机科学与技术学院
?三、并行编程方法
目前在实际的并行计算机中广泛
使用的并行编程模型有 4种,
?蕴式;
?数据并行;
?消息传递;
?共享变量。
哈尔滨工业大学计算机科学与技术学院
?有三种扩展方法,
?库子程序、新语言构造以及编译
器命令。
?库子程序
?除了在顺序语言中可用的标准库外,
加入一组新的库函数,以支持并行
化和交互操作。
?这种库的实例包括 MPI消息传递以及
POSIX Pthreads多线程库。
哈尔滨工业大学计算机科学与技术学院
?新构造
?扩展程序设计语言使其具有某些新
构造,以支持并行化和交互。例如
Fortran 90中密集数据操作。
?编译器命令
?程序设计语言不变,但加入称为编
译器命令 (或 pragmas)的格式化注
解。
哈尔滨工业大学计算机科学与技术学院
?示例,
? 用一段简单代码来说明这些方法。
? 所有 3个并行程序均执行相同的如图
所示的串行 C代码的计算。
哈尔滨工业大学计算机科学与技术学院
?串行代码段
? for ( i = 0; i < N; i ++ ) A[i] = b[i] * b[i+1];
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];
? 使用库例程的等效并行代码
? id = my_process_id();
? p = number of processes();
? for(i=id;i<N;i=i+p) A[i]=b[i]*b[i+1];
? barrier();
? for(i=id;i<N;i=i+p) c[i]=A[i] +A[i+1];
哈尔滨工业大学计算机科学与技术学院
?串行代码段
? for ( i = 0; i < N; i ++ ) A[i] = b[i] * b[i+1];
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];
?Fortran90中使用数组操作的等效代
码
? my-processid(),
number_of_processes(),and barrier()
? A(0:N-1) = b(0:N-1) * b(1:N)
? c = A(0:N-1) + A(1:N)
哈尔滨工业大学计算机科学与技术学院
? 串行代码段
? for ( i = 0; i < N; i ++ ) A[i] = b[i] * b[i+1];
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];
? SGI powerC中使用 pragma的等效代码
? # pragma parallel
? #pragma shared ( A,b,c)
? #pragma local ( i )
? {#pragma pfor iterate (i=0; N:1)
? for(i=0;i<N;i++)
? #pragma synchronize
? #pragma pfor iterate (i=0; N:1)
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];}
哈尔滨工业大学计算机科学与技术学院
三种方法的比较,
哈尔滨工业大学计算机科学与技术学院
?可用 3种方法实现任何编程模
型
?在任何并行平台上,3种方法和编
程模型可以各种方式组合。
哈尔滨工业大学计算机科学与技术学院
?例题,
? Cray MPP编程模型,设计一个称为 Cray
Craft的集成编程工具;
? 使用上述所有 3种方法 (新构造、库函数和
编译器命令 )实现了数据并行 (Fortran
90)、共享变量 (工作共享 )以及消息传递
(PVM)编程模型。
并行处理与体系结构
哈尔滨工业大学计算机科学与技术学院
第 2章 并行 编程基础
??1 并行编程综述
??2 进程任务和线程
??3 并行性问题
??4 交互和通信问题
哈尔滨工业大学计算机科学与技术学院
?1 并行编程综述
? 并行编程处于令人遗憾的状况,
? 并行软件开发远落后于并行硬件的进展。
缺少合适的并行软件是阻碍主流用户接
纳并行计算的主要原因。
? 与顺序计算相比,当今的并行系统软件
和应用软件不仅数量很少,而且功能性也
相当原始。
? 隧道之末总有阳光。
哈尔滨工业大学计算机科学与技术学院
一,并行编程缘何艰难
? 在并行编程中有许多不同的模型。是
一个更复杂的智力活动。
? 并行程序的编译器、调试程序、以及
特征分析器 (profiler)要比串行程序
落后得多。
哈尔滨工业大学计算机科学与技术学院
哈尔滨工业大学计算机科学与技术学院
?1.顺序编程
?长期以来已建立了许多算法范例
?一些实现指导用户从事算法设计。
哈尔滨工业大学计算机科学与技术学院
2.并行编程
?并行编程处于初级阶段;
?对于并行问题的应用,不太可
能有一个现成的并行代码;
?并行代码的机器不同。
哈尔滨工业大学计算机科学与技术学院
?并行编程也不支持成熟、通用和稳
定的工具;
?并行算法范例仍未能被很好地理解
或被广泛地接受;
?不存在单一、通用的机器模型;
?并行编程的模型有两级,而在每一
级上又有许多不同模型。
哈尔滨工业大学计算机科学与技术学院
?与顺序语言在编程或自然模型级上缺
少代可扩展和异构可扩展的能力
? 这些并行语言大多数在当前系统上使
用的并行语言均是 Fortran或 C的某种
扩展。
?一个编程模型即是程序员在开发一个
并行程序时所见到和使用的模型。
哈尔滨工业大学计算机科学与技术学院
? 一个自然模型是由一个特定并行计算机平
台所提供的、用户可见的最低层的编程模
型。其他的编程模型可在此自然模型上加
以实现。
? 例如,在一个 SGI PowerChallenge计算机上
(它是 SMP),自然模型为共享变量模型 (如
SGIPowerC)。
? 数据并行 (如 HPF)和消息传送 (如 MPl)可在其
顶部实现。
哈尔滨工业大学计算机科学与技术学院
3.并行编程进展
? 尽管以上的回顾较为悲观,但在并行
编程领域已有了许多进步,
? 已开发了许多并行算法。
? 尽管大多数算法基于非现实的 PRAM模型,
但其中某些在作适当修正后可以实用。
? 已涌现一小批简单的并行算法范例,
且已逐步为用户所接受。
哈尔滨工业大学计算机科学与技术学院
? 自然模型正集中趋向于两种模型,
?适用于 PVP,SMP和 DSM的单地址空间
的共享变量模型;
?适用于 MPP和机群的多地址空间的消
息传递模型。
?SIMD模型已从主流、通用并行计算
机淡出,但对于如同语言、图象和
多媒体处理的专用嵌入式应用仍非
常有用 。
哈尔滨工业大学计算机科学与技术学院
? 高层并行编程模型
趋向于 3种标准模型,
? 数据并行 (如 HPF),
? 消息传递 (如 HPVM和 MPl)
? 共享变量 (如 HANSI X3H5)。
此外还有一种模型 ----串转并;
? 用户只需编写顺序程序,其中的蕴式并行
性由并行化编译器 (如 Kap)进行析取 。
哈尔滨工业大学计算机科学与技术学院
?4.吞吐率处理
? 在一个问题的处理上,并行少,串行
多。
? 增加多个独立顺序作业的系统吞吐
率。
? 顺序程序并行系统 (SPPS)模型,也称
为吞吐率处理。
哈尔滨工业大学计算机科学与技术学院
?二、并行编程环境
?1,一个典型的并行处理系统
? 如图所示的结构
? 无论是算法还是源代码均需显式地并
行化。
哈尔滨工业大学计算机科学与技术学院
哈尔滨工业大学计算机科学与技术学院
?编译器将源代码翻译成二进制代码
在并行平台上运行,
?该平台包含操作系统和在它之下的并
行计算机硬件。
?任何编程语言均有运行时间支持系
统,它是与用户代码连接程序。
哈尔滨工业大学计算机科学与技术学院
?2.环境工具
? 一个环境工具是指任何硬件和软件的实用
程序,以帮助用户程序的开发和执行。
? 编程环境 (或简称环境 ):所有这类工具集
合。
? 工具的实例包括操作系统实用程序、程序
设计语言、编译器以及运行时间库等。
? 环境工具是那些通常与操作系统或程序设
计语言无关的工具集。
哈尔滨工业大学计算机科学与技术学院
?环境工具包括以下类型,
?作业管理工具
?包括网络排队系统 (NQS)和负载共享
工具 (LSF)。
哈尔滨工业大学计算机科学与技术学院
?调试工具
?性能工具
?它们用来监控用户应用程序以识
别性能瓶颈之所在。
哈尔滨工业大学计算机科学与技术学院
?三、并行编程方法
目前在实际的并行计算机中广泛
使用的并行编程模型有 4种,
?蕴式;
?数据并行;
?消息传递;
?共享变量。
哈尔滨工业大学计算机科学与技术学院
?有三种扩展方法,
?库子程序、新语言构造以及编译
器命令。
?库子程序
?除了在顺序语言中可用的标准库外,
加入一组新的库函数,以支持并行
化和交互操作。
?这种库的实例包括 MPI消息传递以及
POSIX Pthreads多线程库。
哈尔滨工业大学计算机科学与技术学院
?新构造
?扩展程序设计语言使其具有某些新
构造,以支持并行化和交互。例如
Fortran 90中密集数据操作。
?编译器命令
?程序设计语言不变,但加入称为编
译器命令 (或 pragmas)的格式化注
解。
哈尔滨工业大学计算机科学与技术学院
?示例,
? 用一段简单代码来说明这些方法。
? 所有 3个并行程序均执行相同的如图
所示的串行 C代码的计算。
哈尔滨工业大学计算机科学与技术学院
?串行代码段
? for ( i = 0; i < N; i ++ ) A[i] = b[i] * b[i+1];
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];
? 使用库例程的等效并行代码
? id = my_process_id();
? p = number of processes();
? for(i=id;i<N;i=i+p) A[i]=b[i]*b[i+1];
? barrier();
? for(i=id;i<N;i=i+p) c[i]=A[i] +A[i+1];
哈尔滨工业大学计算机科学与技术学院
?串行代码段
? for ( i = 0; i < N; i ++ ) A[i] = b[i] * b[i+1];
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];
?Fortran90中使用数组操作的等效代
码
? my-processid(),
number_of_processes(),and barrier()
? A(0:N-1) = b(0:N-1) * b(1:N)
? c = A(0:N-1) + A(1:N)
哈尔滨工业大学计算机科学与技术学院
? 串行代码段
? for ( i = 0; i < N; i ++ ) A[i] = b[i] * b[i+1];
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];
? SGI powerC中使用 pragma的等效代码
? # pragma parallel
? #pragma shared ( A,b,c)
? #pragma local ( i )
? {#pragma pfor iterate (i=0; N:1)
? for(i=0;i<N;i++)
? #pragma synchronize
? #pragma pfor iterate (i=0; N:1)
? for(i=0;i<N;i++) c[i]=A[i]+A[i+1];}
哈尔滨工业大学计算机科学与技术学院
三种方法的比较,
哈尔滨工业大学计算机科学与技术学院
?可用 3种方法实现任何编程模
型
?在任何并行平台上,3种方法和编
程模型可以各种方式组合。
哈尔滨工业大学计算机科学与技术学院
?例题,
? Cray MPP编程模型,设计一个称为 Cray
Craft的集成编程工具;
? 使用上述所有 3种方法 (新构造、库函数和
编译器命令 )实现了数据并行 (Fortran
90)、共享变量 (工作共享 )以及消息传递
(PVM)编程模型。