1. OpenMP简介
- 通过多线程实现并行
- 开放式的多处理框架 Open Multi-Process
- 统一内存访问 : 多个CPU共享同一片内存,pthread/OpenMP在CPU上执行,属于统一内存访问
- 非统一内存访问: 每个CPU有单独的Memory, 如MPI,通过总线通信的方式获取内存信息
OpenMP与PThread
- pthread需要明确指定每个线程的行为,openmp只需简单的生命代码段需要并行即可
- pthread依赖pthreads库,能被任意C编译器使用,openmp依赖openmp库,还依赖编译器支持某些特定操作
- pthread可通过编写代码明确线程执行的过程,而openmp难以对底层的线程交互进行编程
Fork与Join
- Fork: 由主线程创建出一系列并行化执行的子线程(派生)
- Join: 多个线程完成工作之后,进行同步与终止,回到主线程执行(合并)
2. OpenMP使用
- OpenMP提供基于指令的共享内存API
- 编译器需要支持pragma指令提示的语句编译
- 在系统中加入预处理指令一般是用来允许不符合C语言基本规划的行为
OpenMP parallel 指定并发线程数目
- 编译器指令: #pragma omp parallel num_thre