暑期学校 | 阳王东:异构计算机系统上协同并行计算与应用(1)

发布时间:2018-07-23浏览量:97

本次暑期学校邀请到湖南城市学院信息与电子工程学院院长阳王东教授给我们带来关于《异构计算机系统上协同并行计算与应用》的3个系列报告。在20~22日期间,阳教授围绕 “基于OpenMP的CPU并行编程技术”,“基于CUDA的GPU体系结构与并行编程技术”,“CPU-GPU异构体系结构的应用”等3个关键问题介绍他所在团队的主要工作。

阳教授指出目前计算机体系结构发展的未来趋势,即GPU等异构加速器在内存带宽,性能功耗比等方面大幅度领先目前发展逐渐进入瓶颈期的CPU。因此,近5年入围top500的超算中广泛采用CPU+GPU或CPU+MIC等异构计算解决方案。然而异构体系结构的引入,使得异构系统的上进行编程和性能优化的复杂度大幅度提高。为了发挥不同异构硬件的性能优势,提高异构编程开发效率,阳教授所在的团队长期致力于为国产异构超算平台提供高性能异构编程工具和框架支持。在此次系列汇报中,阳教授与大家分享了异构体系结构编程技术的宝贵经验。

20日下午,阳王东教授来为我们带来了《异构计算机系统上协同并行计算与应用》系列主题报告第一场,围绕如何充分利用多核CPU计算资源,讲述在高性能计算框架OpenMP上的并行编程与优化技术。

1532343026443059384.jpg

在这次课程中,阳教授围绕如何充分利用多核CPU计算资源,讲述了在高性能计算框架OpenMP上的并行编程与优化技术。传统的并行编程技术中,程序员需要直接控制线程的创建、运行、同步、销毁过程,造成了工作量和难度的剧增,尤其是当计算任务很复杂时。OpenMP在编程语言层次提供了可开关的并行导语,由编译器自动将单核串行的程序转换成多核并行程序,而这个过程对程序员完全透明的,显著提高了开发和调试效率。

阳教授提到,计算密集型程序中往往包括大量耗时的循环操作,OpenMP的设计思想正是将这些天然并行的循环操作展开,进行并行化处理。程序员可以通过使用OpenMP提供的导语指定需要并行的范围,OpenMP内建的策略,将循环范围切分成多个任务,交给不同线程,并调度到对应的CPU核心上运行。而对于存在逻辑依赖的代码范围,则不需要加上并行导语,以便串行运行,保障结果正确性。在OpenMP代码运行中,程序按照并行域和串行域交替的形态利用多核CPU资源,实现高性能计算。

1532343253908034892.jpg

图1:并行域与串行域的交替形式

阳教授还介绍了OpenMP并行编程中面临的种种挑战。对于OpenMP采用的循环展开方式,往往会遇到潜在的数据依赖。由于CPU多核并行时,各个线程的准确执行顺序是未知的,这往往造成很多难以调试的严重错误。因此OpenMP提供了多种解决方法,但是这些方法的思想是统一的,即通过合理分区、私有变量、原子操作等技术,使得每个线程之间尽可能独立的运行,而对于无法独立的部分,需要仔细地设计同步机制。


撰稿人:李志方

排版:吴双