计算机专业中并行运算如何,并行计算课程教学方法

摘要:结合在并行编程实践和《并行计算》课程教学经验,分析了面向非计算机专业学生的《并行计算》课程的设计原则和目标,探索了《并行计算》课程的教学内容设计。通过基础知识与并行编程知识讲授并重、讲授与实做并重的授课方式,重点培养学生应用并行计算解决实际应用问题的能力。

关键词:并行计算;教学方法;探讨

一课程设计原则和目标

(一)设计原则

《并行计算》课程的学习内容主要包括:并行算法设计、并行计算机体系结构和并行编程三部分[1]。该课程面向的学员大部分为船舶与海洋工程专业,具有明显的跨学科的特点,课程教学的最终目的是培养学生用并行计算的思想解决相关领域内具体应用问题的并行求解的能力,因此,课程应在围绕基本理论开展的同时,针对学生的具体情况,结合船舶与海洋工程专业各领域对并行计算应用的具体需求开展设计,避免出现重理论、轻实践的情况。

(二)设计目标

根据《并行计算》课程的特点和授课对象的特点,课程设计目标如下: (1)在教学内容上,讲授必要的计算机结构、编程的基础知识,弥补非计算机专业学生计算机基础知识的不足;(2)为了达到与各专业实际应用相结合的目的,根据不同专业应用背景设置具体的实做内容;同时,课程进行中引导不同专业学生之间对各自的并行计算问题进行交流与总结,达到相互学习,共同进步的目的。

二教学内容设计

根据课程的总体规划,《并行计算》课程的教学内容分为讲授和实做两部分,讲授部分主要包括:基本知识点、并行算法设计和实现、典型应用问题并行算法设计等内容的讲授,实做部分主要包括:熟悉并行计算机和编程环境,典型数值计算方法并行算法实现,专业应用问题并行算法设计与实现及讨论。

(一)讲授

(1)基础知识点

《并行计算》课程基础知识点的讲授主要包括五部分内容,一是普及非计算机专业学生关于并行计算系统的基本知识,二是以MPI为例讲授消息传递并行编程的基本思想和方法,三是讲解并行程序的性能评价和优化方法[3],四是以OpenMP为例讲授共享存储并行编程的基础知识,五是讲授MPI+OpenMP混合编程的方法和实现。1)并行计算概述。首先,从对并行计算应用需求谈起,介绍并行计算的应用方向和领域;接着,给出并行计算的概念,包括:并行计算的定义、高性能计算机TOP排名、并行计算分类等;然后,介绍国内外并行计算发展历史,结合并行计算机的发展历程讲授向量机、共享存储多处理机计算机、分布式共享存储并行计算机、大规模并行计算机、集群等概念;最后,结合本单位在并行计算研究和应用中取得的成果,讲授并行计算在实际中的具体应用。2)并行计算机体系结构与编程模型。结合具体的超级计算机示例,首先介绍并行计算机的体系结构相关的知识点;再讲授进程与线程这两个核心概念和编程环境;最后介绍并行编程模型和并行程序设计的基本思想。3)MPI消息传递并行编程。讲授内容主要包括:基础概念、基础编程、高级编程三部分。其中基础概念包括:MPI发展历史、MPI实现种类、MPI程序的一般结构、MPI程序的编译与运行、MPI数据类型以及6个最基本的MPI调用等内容;基本编程主要结合一些容易理解和实现应用问题的并行实现,介绍编写基本MPI程序的相关知识点,具体包括MPI程序设计的基本模式、通信域、消息、点对点通信等相关概念;高级编程主要结合实际案例介绍编写高效MPI程序的相关知识点,以ð值数值并行求解为例,分别使用点对点、聚合通信对其进行实现,分析比较不同实现方法的优缺点和使用范围。4)并行程序性能评价和优化方法。讲授内容主要包括基本概念、并行程序性能评价方法、并行程序性能优化方法等内容。其中,基本概念主要包括:并行程序执行时间、加速比、效率等内容;性能评价方法,主要讲述:加速比、数值效率、并行效率的概念;性能优化,分别讲述串行程序性能优化、并行程序性能优化的常用方法。5)OpenMP共享存储并行编程。讲授内容主要包括:基础概念、OpenMP指导语句、数据环境控制三部分。其中,基础概念包括:OpenMP发展历史、OpenMP指导语句、OpenMP存储模型等内容;OpenMP指导语句部分包括:parallel结构、工作共享结构、Tasking子句、结构嵌套规则等内容;数据环境控制包括:变量共享和私有、并行域边界数据处理、数据环境控制等内容。6)MPI+OpenMP混合并行编程。教书内容主要包括:MPI+OpenMP混合编程模式的结构、MPI+OpenMP混合编程模式的实现和性能评价三部分。

(2)并行算法的设计与实现

本部分内容,主要讲授如何运用MPI并行编程环境完成数值积分、矩阵相乘、线性方程组求解、FFT等典型的数值求解问题的并行算法设计、实现和程序性能的优化[4,5],同时,以ð的数值求解为例讲授MPI+OpenMP混合并行编程模式的设计实现及性能分析。重点培养学生运用并行计算的手段解决实际应用问题的能力。1)数值积分并行求解。以梯形积分公式(ð的数值求解)为例,分别讲述如何采用简单区域分解、主从模式数值积分并行算法设计和实现,并对两种方法的优缺点和并行程序的执行效率进行分析比较。2)矩阵相乘并行求解。主要讲授如何采用行行、行列、列行、列列四种划分方法实现矩阵相乘的并行算法的设计和实现,并结合并行算法对以上四种划分方法的计算量和通信量进行比较分析。3)线性方程组并行求解。主要讲述LU分解、三对角方程组求解得并行算法的设计和实现。4)FFT求解的并行实现。主要讲述一维、二维FFT算法的并行算法设计和实现,及其在多项式相乘、循环矩阵方程组求解中的应用。5)MPI+OpenMP混合并行编程。主要讲述如何在SMP集群上,采用MPI+OpenMP二级混合并行编程方法实现ð的数值并行求解,并结合测试结果,比较MPI、OpenMP、MPI+OpenMP三种并行模式的优缺点和使用范围。

(二)实做与讨论

实做与环节采用“基础十领域”的方式,与讲述部分穿插进行,实验既包含典型的MPI案例编程实现,又包括面向各专业自身领域的并行应用开发。在基础实验环节,由每个学生独立完成,学生结合教师对MPI、OpenMP编程知识点的讲授,以ð值并行求解、矩阵相乘、线性方程组并行求解等典型应用计算问题作为研究对象,采用不同的并行算法和通信方式,反复练习和比较分析,强化学生对MPI、OpenMP及混合编程并行编程基础知识的理解。在领域并行应用开发实验环节,实做部分主要为选择2-3个专业领域中常用问题,采用学生做、学生讲方式的方式进行,带领学生一起完成应用问题的并行求解,锻炼学生应用前面所学的并行算法设计、编程等基础知识解决学术研究和专业领域内具体问题的并行处理的能力。

(三)考核方式

《并行计算》课程的考核可以采用笔试+实做的考核方式,以考核学生对《并行计算》课程基本知识点的掌握情况和应用并行计算解决实际问题的能力,实现对学生并行计算理解与应用能力的综合评价。

三总结

随着并行计算机的普及和应用需求的增长,对并行计算基础知识的教学提出了新的要求。本文针对并行计算课程,结合作者在教学过程中的经验和思考,就如何在非计算机专业的学生中开展课程的教与学进行了探讨。

参考文献

[1]张林波,迟学斌,莫则尧,等.并行计算导论[M].北京:清华大学出版社,2006.

[2]徐新海,唐玉华,林宇斐.跨专业并行计算基础课程教学设计[J].计算机教育,2014,(23):106-109.

[3]MichaelJ.Quinn著,陈文光,武永卫等译.MPI与OpenMP并行程序设计[M].北京:清华大学出版社,2004.

[4]陈国良,等.并行算法实践[M].北京:高等教育出版社,2004.

[5]BarryWilkinson,MichaelAllen著,陆鑫达等译.并行程序设计[M].北京:机械工业出版社,2002.

作者:范培勤 韩梅 单位:海军潜艇学院

1. 设计目的、意义(功能描述) 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。本次大作业主要是对蒙特·卡罗方法进行并行处理,通过OpenMP、MPI、.NET、Java、Win32API等一系列并行技术和并行机制对该算法进行并行处理,从而也进一步熟悉了蒙特·卡罗方法的串行算法和并行算法,实现了用蒙特·卡罗方法计算出半径为1单位的球体的体积,体会到了并行技术在实际生活的应用。 2. 方案分析(解决方案) 蒙特·卡罗方法(Monte Carlo method)是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。球的体积可以估算为:位于点模型内随机点个数与全体随机点个数的比值乘以包围盒的体积算的。 3. 设计分析 3.1 串行算法设计 假定球体用B表示,半径r=1单位,B1是包含B的参考立方体(在本例是边长为2的正方体),在B1产生N个均匀分布的伪随机点。对每个随机点检测其是否在B内,假设位于B内的随机点个数为N(in)(<=N),应用蒙特卡洛算法,则B的体积为 V=V1(N(in)/N) 其V1是B1的体积。如果产生足够多的随机点,理论上可以获得任意逼近精度。 算法描述如下: BEGIN N=_MAX; FOR I=0;I<_MAX;I++ X=RANDOM(); Y=RANDOM(); Z=RANDOM(); IF (X*X+Y*Y+Z*Z)<=1 COUNT++; END IF; END FOR; BULK=V1*(COUNT/_MAX); END; 本算法主要是在参考立方体的选取上和定义的_MAX的值对结果影响较大,所以应该选择合适的数。 3.2 并行算法设计 对FOR循环进行划分使用两个处理器完成计算。例如对一个长为n的序列,首先划分得到两个长为n/2的序列,将其交给两个处理器分别处理;而后进一步划分得到四个长为n/4的序列,再分别交给四个处理器处理;如此递归下去最终得到结果。当然这是理想的划分情况,如果划分步骤不能达到平均分配的目的,那么结果的效率会相对较差。 伪代码如下: BEGIN N=_MAX; FOR1 I=0;I<_MAX/2;I++ X1=RANDOM(); Y1=RANDOM(); Z1=RANDOM(); IF (X1*X1+Y1*Y1+Z1*Z1)<=1 COUNT1++; END IF; END FOR1; FOR2 I=_MAX/2+1;I<_MAX;I++ X2=RANDOM(); Y2=RANDOM(); Z2=RANDOM(); IF (X2*X2+Y2*Y2+Z2*Z2)<=1 COUNT2++; END IF; END FOR2; BULK=V1*((COUNT1+ COUNT2)/_MAX); END; 3.3 理论加速比分析 实验大量数据所产生的加速比比小量数据所产生的加速比要体现得更明显,并且数据生成的并行加速比随着处理器核的增加而增加。设处理器个数为p,数据量为n,由于正常情况下该快速排序算法的复杂度为O(nlogn),并行处理的时间复杂度为O(klogk),其k=n/p,所以并行算法的时间复杂度为O((n/p)log(n/p)),理论加速比为nlogn/((n/p)log(n/p))=p+logp. 4. 功能模块实现与最终结果分析 4.1 基于OpenMP的并行算法实现 4.1.1 主要功能模块与实现方法 利用了OpenMP里面的#omp parallel sections将对两个for循环用两个线程并行化执行,以多线程方式并行运行程序,并行的算法步骤如下: (1)初始化_max = 10000000; (2)创建两个线程; (3)由OpenMP编译指导语句控制产生并行执行代码区段; (4)将数据存放到tianqing_count; (5)各线程调用算法得出结果; 并行算法的部分代码如下: #pragma omp parallel for private(tianqing_x,tianqing_y,tianqing_z) reduction(+:tianqing_count2) for (tianqing_i = 0; tianqing_i<tianqing_max; tianqing_i++) { tianqing_x = rand(); tianqing_x = tianqing_x / 32767; tianqing_y = rand(); tianqing_y = tianqing_y / 32767; tianqing_z = rand(); tianqing_z = tianqing_z / 32767; if ((tianqing_x*tianqing_x + tianqing_y*tianqing_y + tianqing_z*tianqing_z) work1.pSumto(b, 0, MAXN - 1)); Thread newthread1 = new Thread(thread1); 创建Work类的对象work2; ThreadStart thread2 = new ThreadStart(() => work2.pSumto(c, 0, MAXN - 1)); Thread newthread2 = new Thread(thread2); stopwatch.Start(); 启动线程1和线程2; 等待进程结束; stopwatch.Stop(); 得到结果; 4.5.2 实验加速比分析 实验创建了两个线程,通过多次测试,得出实验结果:由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.6~2.7左右。 4.6 并行计算技术在实际系统的应用 4.6.1 主要功能模块与实现方法 该飞机订票系统主要实现了对机票的一些基本信息进行存储和管理的功能。在系统实现了对机票信息的增删改查,考虑到查询的方便性,对机票按照航班号进行排序,而此排序方法用并行快速排序运用进来。利用OpenMP的并行技术,对机票信息按顺序排列好,并分析了实验过程的加速比。 4.6.2 实验加速比分析 实验创建了两个线程,通过多次测试,得出实验结果:当数据量比较大时,加速比理论在1.9左右。数据量较大时体现出来的加速比更准确。由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.2~2.4左右。 5. 设计体会 虽然没有按时完成作业,但这份报告花了我好几天的时间,从开始的搭建并行计算平台到最后的程序运行成功可以说是对我的一个锻炼。每一次的遇到问题与每一次的解决问题都是一个成长。每一次遇到问题和解决问题都是一种锻炼,一种尝试,从我们上并行计算课我懂得了很多电脑硬件和软件的知识,这些可能对于我们这个专业以后都是没有机会接触的,所以我觉得选择了并行计算与多核多线程技术这门课是非常正确的。对OpenMP、MPI、WIN32API、Java、.NET的并行技术有了一定的了解。在搭建MPI并行程序这块,学习的知识尤为增加,这些都是在不断的摸索、学习学会的。 这次的大作业虽然是对以前实验的整合,但它加深了我对并行计算的印象,也使我对并行计算知识的理解更加深刻,也使我认识到了自己很多不足之处。学习并行计算的历程不会因为完成本次大作业而停止,我们是为了用知识武装大脑而学习,通过学习充实自己的生活,要努力学习,争取以后能够完成规模更大的程序。
1. 设计目的、意义(功能描述) 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。本次大作业主要是对蒙特·卡罗方法进行并行处理,通过OpenMP、MPI、.NET、Java、Win32API等一系列并行技术和并行机制对该算法进行并行处理,从而也进一步熟悉了蒙特·卡罗方法的串行算法和并行算法,实现了用蒙特·卡罗方法计算出半径为1单位的球体的体积,体会到了并行技术在实际生活的应用。 2. 方案分析(解决方案) 蒙特·卡罗方法(Monte Carlo method)是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。球的体积可以估算为:位于点模型内随机点个数与全体随机点个数的比值乘以包围盒的体积算的。 3. 设计分析 3.1 串行算法设计 假定球体用B表示,半径r=1单位,B1是包含B的参考立方体(在本例是边长为2的正方体),在B1产生N个均匀分布的伪随机点。对每个随机点检测其是否在B内,假设位于B内的随机点个数为N(in)(<=N),应用蒙特卡洛算法,则B的体积为 V=V1(N(in)/N) 其V1是B1的体积。如果产生足够多的随机点,理论上可以获得任意逼近精度。 算法描述如下: BEGIN N=_MAX; FOR I=0;I<_MAX;I++ X=RANDOM(); Y=RANDOM(); Z=RANDOM(); IF (X*X+Y*Y+Z*Z)<=1 COUNT++; END IF; END FOR; BULK=V1*(COUNT/_MAX); END; 本算法主要是在参考立方体的选取上和定义的_MAX的值对结果影响较大,所以应该选择合适的数。 3.2 并行算法设计 对FOR循环进行划分使用两个处理器完成计算。例如对一个长为n的序列,首先划分得到两个长为n/2的序列,将其交给两个处理器分别处理;而后进一步划分得到四个长为n/4的序列,再分别交给四个处理器处理;如此递归下去最终得到结果。当然这是理想的划分情况,如果划分步骤不能达到平均分配的目的,那么结果的效率会相对较差。 伪代码如下: BEGIN N=_MAX; FOR1 I=0;I<_MAX/2;I++ X1=RANDOM(); Y1=RANDOM(); Z1=RANDOM(); IF (X1*X1+Y1*Y1+Z1*Z1)<=1 COUNT1++; END IF; END FOR1; FOR2 I=_MAX/2+1;I<_MAX;I++ X2=RANDOM(); Y2=RANDOM(); Z2=RANDOM(); IF (X2*X2+Y2*Y2+Z2*Z2)<=1 COUNT2++; END IF; END FOR2; BULK=V1*((COUNT1+ COUNT2)/_MAX); END; 3.3 理论加速比分析 实验大量数据所产生的加速比比小量数据所产生的加速比要体现得更明显,并且数据生成的并行加速比随着处理器核的增加而增加。设处理器个数为p,数据量为n,由于正常情况下该快速排序算法的复杂度为O(nlogn),并行处理的时间复杂度为O(klogk),其k=n/p,所以并行算法的时间复杂度为O((n/p)log(n/p)),理论加速比为nlogn/((n/p)log(n/p))=p+logp. 4. 功能模块实现与最终结果分析 4.1 基于OpenMP的并行算法实现 4.1.1 主要功能模块与实现方法 利用了OpenMP里面的#omp parallel sections将对两个for循环用两个线程并行化执行,以多线程方式并行运行程序,并行的算法步骤如下: (1)初始化_max = 10000000; (2)创建两个线程; (3)由OpenMP编译指导语句控制产生并行执行代码区段; (4)将数据存放到tianqing_count; (5)各线程调用算法得出结果; 并行算法的部分代码如下: #pragma omp parallel for private(tianqing_x,tianqing_y,tianqing_z) reduction(+:tianqing_count2) for (tianqing_i = 0; tianqing_i<tianqing_max; tianqing_i++) { tianqing_x = rand(); tianqing_x = tianqing_x / 32767; tianqing_y = rand(); tianqing_y = tianqing_y / 32767; tianqing_z = rand(); tianqing_z = tianqing_z / 32767; if ((tianqing_x*tianqing_x + tianqing_y*tianqing_y + tianqing_z*tianqing_z) work1.pSumto(b, 0, MAXN - 1)); Thread newthread1 = new Thread(thread1); 创建Work类的对象work2; ThreadStart thread2 = new ThreadStart(() => work2.pSumto(c, 0, MAXN - 1)); Thread newthread2 = new Thread(thread2); stopwatch.Start(); 启动线程1和线程2; 等待进程结束; stopwatch.Stop(); 得到结果; 4.5.2 实验加速比分析 实验创建了两个线程,通过多次测试,得出实验结果:由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.6~2.7左右。 4.6 并行计算技术在实际系统的应用 4.6.1 主要功能模块与实现方法 该飞机订票系统主要实现了对机票的一些基本信息进行存储和管理的功能。在系统实现了对机票信息的增删改查,考虑到查询的方便性,对机票按照航班号进行排序,而此排序方法用并行快速排序运用进来。利用OpenMP的并行技术,对机票信息按顺序排列好,并分析了实验过程的加速比。 4.6.2 实验加速比分析 实验创建了两个线程,通过多次测试,得出实验结果:当数据量比较大时,加速比理论在1.9左右。数据量较大时体现出来的加速比更准确。由上面的理论加速比分析可知,当线程数为2时,理论加速比为2+log2=3.但由于实际操作硬件设备以及内存分配的影响,实验加速比达不到理论值3.实验加速比在2.2~2.4左右。 5. 设计体会 虽然没有按时完成作业,但这份报告花了我好几天的时间,从开始的搭建并行计算平台到最后的程序运行成功可以说是对我的一个锻炼。每一次的遇到问题与每一次的解决问题都是一个成长。每一次遇到问题和解决问题都是一种锻炼,一种尝试,从我们上并行计算课我懂得了很多电脑硬件和软件的知识,这些可能对于我们这个专业以后都是没有机会接触的,所以我觉得选择了并行计算与多核多线程技术这门课是非常正确的。对OpenMP、MPI、WIN32API、Java、.NET的并行技术有了一定的了解。在搭建MPI并行程序这块,学习的知识尤为增加,这些都是在不断的摸索、学习学会的。 这次的大作业虽然是对以前实验的整合,但它加深了我对并行计算的印象,也使我对并行计算知识的理解更加深刻,也使我认识到了自己很多不足之处。学习并行计算的历程不会因为完成本次大作业而停止,我们是为了用知识武装大脑而学习,通过学习充实自己的生活,要努力学习,争取以后能够完成规模更大的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值