并行程序设计课程全过程多途径思政建设方案
2023-12-11熊智蔡玲如洪秀秀
熊智 蔡玲如 洪秀秀
摘 要:并行计算的应用领域越来越广泛,众多计算机类专业都将并行程序设计作为必修课程。依据ACM/IEEE计算课程体系规范,结合国产超级计算机的发展,该文梳理该课程的教学内容和包括思政目标在内的课程目标,进而设计全过程多途径的总体思政方案。思政元素涵盖所有5个思政目标,且较好地分布在全部5个知识单元中,教学方法和工具均根据各个思政元素的特点量身选择或设计。该文最后论述两个课程思政设计案例供相关课程参考,包括通过引导加速比上限的讨论强调辩证地理解相關规律,以及借助互斥锁的线上实践培养严谨求实的治学态度。
关键词:并行程序设计;课程思政;课程目标;加速比;互斥锁
中图分类号:G641 文献标志码:A 文章编号:2096-000X(2023)35-0181-04
Abstract: The application areas of parallel computing are becoming more and more extensive, and many computer science majors have taken Parallel Programming as a compulsory course. Based on the specification of ACM/IEEE computing course system, combined with the development of domestic supercomputers, this paper sorts out the teaching content of the course and the objectives of the course including the ideological and political objectives, and then designs a whole process and multi-pathway ideological and political education plan. The ideological and political elements cover all five ideological and political objectives and are well distributed in all five knowledge units, and the teaching methods and tools are selected or designed according to the characteristics of each ideological and political element. Finally, two cases of the ideological and political education are discussed for reference of related courses, including emphasizing the dialectical understanding of the relevant laws by guiding the discussion on the upper limit of the speedup ratio, and cultivating the rigorous and realistic academic attitude with the help of the online practice of mutex locks.
Keywords: Parallel Programming; curriculum ideological and political education; course objective; speedup ratio; mutex lock
在高性能计算中,通常需要处理大量的数据和复杂的计算任务,这些任务需要在短时间内完成。并行计算可以通过将任务分解成多个子任务,然后在多个处理器或分布式的计算机上并行执行这些子任务,最后将结果合并的方法提高计算速度。越来越多的科学研究和重大攻关项目都需要借助于高性能计算。高性能计算已经成为继理论分析和实验研究之后的第三种科学研究方法和手段,在保障国家安全、开发新能源、促进科技发展等方面有着直接的作用,是衡量一个国家科技水平和综合国力的重要标志,是当今科技进步与创新突破的“发动机”。
ACM/IEEE计算课程体系规范[1]是ACM(国际计算机学会)和IEEE(电气与电子工程师协会)计算机分会联合,组织全球计算机教育专家共同制定的计算机类专业课程体系规范,具有很高的权威性。随着云计算、人工智能和大数据的蓬勃发展,并行计算的应用领域越来越广泛,众多计算机类专业都将其作为必修的课程内容,例如《计算机科学课程体系规范2013》将并行和分布式计算作为一个专门的知识领域;在《计算机工程课程体系指南2016》中,算法知识领域包括并行算法和多线程知识单元,计算机体系结构和组成知识领域包括分布式系统体系结构知识单元;在《本科数据科学课程计算能力模型2021》中,大数据系统知识领域包括并行计算框架和并行程序设计知识单元。
互联网上各种信息鱼龙混杂,而大学生正处于思想活跃阶段,极易受到各种思潮的影响[2]。仅通过政治理论课程对大学生进行思想政治教育存在形式单一、效果不佳等问题,社会主义核心价值观、道德品质、职业素养等方面的教育应该出现在所有课程的教学中,以实现全程育人、全方位育人。课程思政是指在高等教育中,将思想政治教育融入到各个学科的专业课程中,推动思政教育与专业课程相融合,充分发挥思政课程与课程思政的合力,从而提升课程育人实效的创新教育模式[3],是贯彻执行党的二十大报告中关于落实立德树人根本任务,培养德智体美劳全面发展的社会主义建设者和接班人的要求[4],是把思想政治工作贯穿教学全过程,实现全程育人的重要举措。在并行程序设计课程中实施课程思政有助于为我国培养优秀的高性能计算人才,提升我国的科技竞争力。本文探索并行程序设计课程多途径全过程的课程思政方案,给出总体方案和若干具体思政案例的设计。
一 课程内容与目标
本课程采用基于OBE(Outcome-Based Education,以学习成果为导向的教育)理念的课程教学,构建“专业+思政+能力”的OBE课程大纲,并严格按照大纲开展教学活动。在前期教学研究与实践[5]的基础上,本课程设立了12个教学目标(即预期学习结果),见表1。在专业方面,本课程的主要内容包括并行计算的基础知识和并行计算行业的4种主流技术:适用于单机多核的Pthread和OpenMP技术,适用于集群的MPI技术,以及适用于GPU的CUDA技术。尤其,本课程密切关注ACM/IEEE计算课程体系规范,根据其中并行计算相关的知识单元调整教学内容。
程序设计处处蕴含着人类思维的智慧[6],具有丰富的思政元素。在思政方面,本课程深入挖掘教学内容中蕴含的思政元素,对于理论部分,注重科学思维方法的训练和辩证唯物主义的教育,培养学生探索未知、实事求是、勇攀科学高峰的责任感和使命感;对于实践部分,则注重培养学生精益求精的大国工匠精神,激发学生科技报国的家国情怀和使命担当。考虑到专业课的思政目标不宜过多,而要少而精,要掷地有声,经过最终精心的筛选与组织,为该课程确立了5个思政目标,见表1。在能力方面,本课程设置了较多学时的实践环节,培养学生并行计算的实践能力,主要包括并行程序的设计与测试、实践报告的撰写和文献资料的收集应用。尤其,本课程以“神威·太湖之光”和“天河二号”為例,让学生了解主流的并行计算技术与软件,并让实践内容与超级计算行业的实际应用接轨,提升学生的实战能力。
中国工程教育专业认证协会于2022年7月发布了新的工程教育认证标准[7],其中的毕业要求包括工程知识、设计/开发解决方案、环境和可持续发展、职业规范、沟通等12条要求。对于其中的环境和可持续发展及职业规范,计算机专业可将其分别具体化为“正确理解和评价复杂计算机软硬件系统的工程实践对环境和社会可持续发展的影响”和“具备人文社会科学素养、民族自豪感和社会责任感,在计算机软硬件系统实践中遵守法律法规、职业道德和规范,承担责任、履行义务”。毕业要求是确定教学内容的依据[8],并行程序设计12个课程目标对毕业要求的支撑情况见表1,该课程共支撑5条毕业要求,尤其对职业规范有很好支撑,并且是少数几门支撑环境和可持续发展这一毕业要求的课程之一。
二 课程思政方案的总体设计
课程思政以专业知识为载体,将思想政治内容融入其中,赋予专业知识以思政意义。在讲授每个知识点时,教师根据知识内容的特点,首先选择合适的教学方法,然后在恰当的地方通过案例、类比、讨论、探究或程序演示等方式引入思政元素,让学生悟出思政元素,做到水到渠成,润物无声,最后教师再给予总结以夯实思政效果。并行程序设计的总体课程思政方案见表2,主要具有如下两个特点。
全过程:首先,本课程充分挖掘课程中的思政元素然后进行删选,使得思政元素能涵盖所有(5个)思政目标,且在各思政目标中分布较为均匀。尤其,思政元素较好地分布在全部(5个)知识单元中,以让思政教育持续整个学期。其次,充分利用课上教学、课后作业和课内外实践等教学环节开展全方位的课程思政,实现不同层面的育人功能。最后,本课程充分利用新型教学手段,借助雨课堂、微信群等平台把握学生全过程的学习参与情况,让学生看到自己在习惯、态度、规范和责任感等方面的不足,并及时纠正或改进。
多途径:本课程根据各个思政元素的特点,量身选择或设计学生最容易领会的教学方式、方法和工具。合理应用线上和线下教学方式,灵活运用探究式、试错法、启发式和翻转课堂等教学方法,结合使用课程网站、微信群、虚拟化软件、在线会议和MOOC网站等平台和工具精心设计思政方案。尤其本课程注重引导学生主动思考和探究,以保证课程思政的效果[9]。此外,在线教学提供了很好的实践环境,学生在电脑面前,就能够随时编写和运行代码并通过屏幕共享分享实践结果。
三 课程思政案例
(一) 加速比上限
采用p个处理器并行化一个串行程序,运行时间由T(1)变为T(p),则加速比为S(p)=T(1)/T(p)。假设该程序的总计算量为1,其中串行部分占f(0≤f≤1),并行部分占1-f。在总计算量不变的前提下,采用越多的处理器计算运行时间越短,因此Amdahl加速比计算如下:S(p)=T(1)/T(p)=1/(f+(1-f)/p)。容易证明,S(p)≤p和S(p)≤1/f,前者表示加速比不超过处理器的数量,后者表示即使采用无穷多个处理器,加速比也不可能超过1/f。
针对S(p)≤p,教师给出如下实例让学生讨论。给定一个数组中有400个无序排列的数,现要从中找到指定的一个数,假设要找的数位于第308个。由于这些数没有排序,因此只能一一比对。如果采用一个处理器,一共需要比对308次即可。如果采用4个处理器,给每个处理器分配100个数,那么第4个处理器只需比对8次即可通知所有处理器结束比对。因此加速比为308/8=38.5,超过了处理器的数量4,与加速比不超过处理器数量的结论矛盾。让学生讨论给出解释。在讨论过程中给学生如下启发和引导。
1)加速比公式是唯一的吗?(不唯一,例如还有Gustafson加速比)。
2)不同加速比的区别是什么?(前提不同,Amdahl加速比的前提是总计算量一定,Gustafson加速比的前提是计算时间一定)。
3)Amdahl加速比适用于这里吗?(不适用,因为采用4个处理器并行计算时实际计算量发生了变化,总共比对的次数变少了)。
经过上述启发,学生明白了由于实际总计算量发生了变化,因此不适合运用Amdahl加速比进行评估。最后教师总结:任何规律都是有前提的,在运用一个规律时,先看前提是否成立,否则就犯了逻辑错误。
对于S(p)≤1/f,学生能够得到“要想提高加速比就要充分挖掘程序中能够并行处理的部分”这一结论。教师进一步强调:①上述加速比计算公式是理想的公式,其忽略了并行化的开销并假设负载绝对均衡;②在并行计算中,多核、集群、GPU等硬件仅仅只是基础,要想写出高效的并行程序,还需要设计好的方法和算法;③有些结论看似“悲观”,但同时也指明了方向。
(二) 互斥锁
此部分采用线上方式通过网络会议进行授课。讲完互斥锁的原理和API后,教师让学生立即在线练习,用Pthread编写4个线程并行计算0+1+2+…+99的程序。程序的主要代码片段如下:
void *sum_thread(void *arg) {
int id = *((int *)arg); //线程编号0~3
for (int i=id; i<100; i+=4) {
pthread_mutex_lock(&fastmutex);
sum += i; //sum为全局变量
pthread_mutex_unlock(&fastmutex);
}
}
由于sum是全局变量,因此“sum += i;”为临界区,需要采用互斥锁进行保护。程序运行结果为4 950,学生基本上都能正确写出该程序。然后让学生注释掉互斥锁的加锁和解锁操作,然后编译运行。虽然该程序是错误的,但基本上所有的学生都发现,运行多次结果依然为4 950。接着,教师将如下shell脚本共享给学生:
for((i=0;i<1000;i++));
do
./mutex #path of the program
done;
让学生用该脚本重复运行程序1 000次,观察结果。学生们会纷纷报告,只有少数几次的结果不为4 950,其他均为4 950。也就是说,在这里即使不用互斥锁保护临界区,绝大多数情况下结果都是正确的。
最后教师强调:①并行程序的推进存在一定的随机性,不能仅靠几次运行来测试程序的正确性,而要有严谨求实的科学精神和对用户负责的职业精神,必须从方法上确保程序正确。②辩证唯物主义认为,现实的任何事物都具有必然和偶然的双重属性,只有认识必然性才能把握规律性。错误的程序可能偶然结果正确,但只要运行足够多次,必然会出错。
四 结束语
并行程序设计是面向计算机类专业开设的专业课程,课程团队始终坚持理论与实践相结合的原则,对教学内容和方法不断进行改进以提升教学质量。本课程坚持把立德树人作为中心环节,积极推进课程思政,为实现中华民族伟大复兴和中国梦培养求真务实、精益求精的卓越计算机专业人才。本文梳理了该课程的思政目标、知识目标和能力目标,根据挖掘的各思政元素的特点设计思政方案,并给出了两个课程思政设计案例。接下来,课程团队将进一步梳理和优化思政元素,并与其他程序设计类课程进行相互协调,确保课程思政效果。考核是教学工作的重要环节之一,如何为各个思政目标量身定制考核方案也是接下来的研究方向。
参考文献:
[1] ACM, IEEE-CS. Computing Curricula 2020: Paradigms for Global Computing Education [R]. New York: Association for Computing Machinery, 2020.
[2] 方贵盛,王红梅.工程类专业课程思政融入路径探索[J].教育教学论坛,2023(26):169-172.
[3] 周筱芬,周姣术,陶洁.“三全育人”视域下计算机类课程思政资源的探索[J].当代教育理论与实践,2022,14(3):23-28.
[4] 孙亮,徐震,佟德志.高等工程教育中课程思政的“八个维度”[J].天津师范大学学报(社会科学版),2023(3):64-71.
[5] 熊智,蔡玲如.基于混合式教学和课程思政的并行程序设计教学设计[J].计算机教育,2021(11):167-171.
[6] 张芳芳,姜翠美,肖中俊,等.程序设计基础课程思政建设[J].高教学刊,2023(19):189-192.
[7] 中国工程教育专业认证协会.工程教育认证标准[EB/OL].[2023-04-21].https://www.ceeaa.org.cn/gcjyzyrzxh/rzcxjbz/gcjyrzbz/tybz/630662/index.html.
[8] 鄭苑丹.面向工程教育专业认证的“计算机网络”课程教学探索[J].工业和信息化教育,2023(1):40-44.
[9] 王方,柴建,王燕妮.高校教师课程思政的难点、方法与对策[J].高等工程教育研究,2023(1):122-127.
[10] 熊智,赵悦源,许建龙,等.应用服务器集群能耗与性能平衡的在线实时优化[J].控制与决策,2021,36(11):2589-2598.