OpenMP Tutorial学习笔记(2)OpenMP编程模型

OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#ProgrammingModel


理解OpenMP的编程模型是学习好OpenMP的第一步。

(1)Shared Memory, Thread Based Parallelism:

OpenMP是基于共享内存和线程的并行模型。

(2)Explicit Parallelism:

OpenMP是明确的并行,并不是自动并行。提供给开发人员对并行的完全控制

(3)Fork - Join Model:

OpenMP使用经典的Fork-Join模型,如下图所示:

OpenMP Tutorial学习笔记(2)OpenMP编程模型_第1张图片

因此,所有的OpenMP程序都开始于一个主线程,通过主线程创建一组任务进行并行,然后进行同步等。

PS:好像一般的线程模型都是fork/join的模型?

(4)Compiler Directive Based:

OpenMP是基于编译器指令的。通过在源码中插入编译器的指令,告诉编译器如何进行并行化。所以,OpenMP依赖于编译器的实现。

(5)Nested Parallelism Support:

支持嵌套并行化,但是,最终是否支持仍然是依赖编译器的实现。

(6)Dynamic Threads

动态修改线程数量。对于并行区的线程数量,可以动态的修改。依赖于编译器实现。

(7)I/O

OpenMP不负责IO的并行化,所以需要开发人员自己保证IO的争取性,比如多个线程同时读取同一个文件的情况。

(8)Memory Model: FLUSH Often?

内存模型,是否经常刷新。OpenMP对于线程内存是一种"relaxed-consistency" and "temporary"的视图模式,即线程可以cache自己的数据并不一定需要实时保证和实际内存一致性。所以,对于共享数据需要实时一致性的情况,开发人员要自行刷新数据,保证各个线程的数据一致性。



你可能感兴趣的:(JOIN,thread,编程,compiler,编译器,nested)