(1)共享内存并行编程概述:了解共享内存系统的体系结构特点(SMP、NUMA)。理解线程的概念及其与进程的区别。掌握OpenMP作为事实标准的共享内存并行编程模型的发展历程与核心优势。了解并行计算的动机:缩短计算时间、解决更大规模问题。学习OpenMP在现代多核处理器和高性能计算集群单计算节点上的应用价值。
(2)OpenMP编程模型与执行模型:掌握OpenMP的fork-join执行模型,理解主线程与工作线程的协作关系。学习OpenMP编译制导指令(#pragma omp)、运行时库函数(omp_*)和环境变量(OMP_*)的三层架构。理解并行区域的概念,掌握线程创建、销毁的生命周期管理。
(3)开发环境搭建:掌握OpenMP开发环境的配置方法,学习GCC、Intel编译器中的OpenMP编译选项(-fopenmp、-qopenmp)。熟悉环境变量设置(OMP_NUM_THREADS、OMP_PROC_BIND、OMP_PLACES)。编写并运行第一个OpenMP程序(Hello World),体验多线程并行执行的基本流程。
(4)并行区域与线程管理:学习使用#pragma omp parallel创建并行区域,掌握线程数的设置方法(num_threads子句、omp_set_num_threads函数、OMP_NUM_THREADS环境变量)。理解并行区域的嵌套机制。掌握线程编号获取(omp_get_thread_num)和线程总数获取(omp_get_num_threads)方法。
(5)工作共享构造(Worksharing):掌握循环并行化指令#pragma omp for的使用方法,理解循环迭代在不同线程间的分配策略:静态调度(static)、动态调度(dynamic)、引导调度(guided)、自动调度(auto)、运行时调度(runtime)。学习#pragma omp sections实现任务并行,#pragma omp single/master实现单线程执行。掌握#pragma omp task实现不规则循环和递归算法的并行化。
(6)数据环境管理:理解共享内存模型中的变量作用域,掌握private、firstprivate、lastprivate、shared、default等数据属性子句的使用方法。学习threadprivate指令实现线程私有全局变量。理解数据共享与私有化的性能影响。
(7)同步机制:掌握OpenMP的同步操作:barrier屏障(#pragma omp barrier)、critical临界区(#pragma omp critical)、atomic原子操作(#pragma omp atomic)、ordered有序执行(#pragma omp ordered)、locks锁机制(omp_lock_t)。理解不同同步机制的性能开销与适用场景。通过π计算案例实践归约操作的正确实现。
(8)归约操作:深入学习reduction归约子句的原理与使用,实现求和、求积、最大值、最小值等常见归约操作的并行化。理解归约操作的内部实现机制。对比手动实现归约(critical区)与reduction子句的性能差异。
(9)任务并行化:掌握OpenMP任务并行化机制,学习使用#pragma omp task和#pragma omp taskwait实现递归算法(如归并排序、快速排序)的并行化。理解任务依赖关系管理(#pragma omp task depend)。了解taskgroup、taskyield等高级任务特性。
(10)NUMA架构优化:理解NUMA(非一致内存访问)架构对OpenMP程序性能的影响。学习线程与数据亲和性设置方法(proc_bind子句、OMP_PLACES、OMP_PROC_BIND环境变量),优化内存访问局部性。通过矩阵乘法案例实践不同数据划分策略(切片法、分块法)的性能差异,理解伪共享(false sharing)问题的成因与解决方法。
(11)OpenMP 4.0+新特性:学习向量化指令(#pragma omp simd),实现SIMD并行化,发挥现代CPU的向量处理能力。了解设备构造(#pragma omp target)实现GPU等加速器卸载计算的基本用法。了解OpenMP 5.0/5.1中的新增特性。
(12)综合项目实战:结合所学知识,完成一个完整的OpenMP并行化项目(如矩阵乘法优化、数值积分计算、图像处理算法加速、热传导方程求解)。涵盖串行程序分析、并行化设计、代码实现、性能调优和结果分析的全流程,形成规范的OpenMP并行程序项目报告。