主要涵盖以下指令:
-
- parallel
- parallel for
- sections
- critical
- single
- flush
- atomic
- master
- ordered
- threadprivate
parallel
用在一个代码段之前,表示这段代码将被多个线程并行执行
parallel for
用于for循环之前,将循环分配到多个线程中并行执行.
注意区分parallel for和parallel。前者是多个线程分别执行循环的一部分,后者是多个线程都执行完整的循环。
用于此构造的子句有schedule、shared、default、reduction、collapse等。
sections
用在可能会被并行执行的代码段之前,通过section将代码块划分给不同线程执行。
c/c++
#pragma omp [parallel] sections [子句]
{
#pragma omp section
{
代码块
}
}
只有添加参数parallel时,sections后的section代码块才会并行执行,否则为串行,即所有代码块由主线程顺序执行。
critical
critical的语义是指在任意时刻只有一个(或是最多一个)线程在执行临界区内的代码, 其目的是对于临界区内的线程之间共享的资源进行保护,比如几个线程对一个公共链表进行插入或删除操作,此时就需要使用critical, 否者该链表中的数据可能不一致。临界区的代码应该是一个块结构(structured block), 其中不允许有返回(return), 退出(exit), 或者从里面跳出(go to)语句。
c/c++
#pragma omp critical [ name ] newline
structured_block