天天看点

OpenMP学习笔记之常用指令parallel/sections/critical 其余待续

主要涵盖以下指令:

    • 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
           

single

flush

atomic

master

ordered

threadprivate

继续阅读