炼数成金 门户 CUDA 查看内容

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

2015-9-11 13:08| 发布者: 炼数成金_小数| 查看: 1258| 评论: 0|原作者: gengshenghong|来自: CSDN

摘要: 理解OpenMP的编程模型是学习好OpenMP的第一步。OpenMP是基于共享内存和线程的并行模型。OpenMP是明确的并行,并不是自动并行。提供给开发人员对并行的完全控制。因此,所有的OpenMP程序都开始于一个主线程,通过主线 ...

模型 编程 源码

理解OpenMP的编程模型是学习好OpenMP的第一步。
(1)Shared Memory, Thread Based Parallelism:
OpenMP是基于共享内存和线程的并行模型。

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

(3)Fork - Join Model:
OpenMP使用经典的Fork-Join模型,如下图所示:
https://computing.llnl.gov/tutorials/openMP/images/fork_join1.gif
因此,所有的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自己的数据并不一定需要实时保证和实际内存一致性。所以,对于共享数据需要实时一致性的情况,开发人员要自行刷新数据,保证各个线程的数据一致性。

鲜花

握手

雷人

路过

鸡蛋

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

热门文章

     

    GMT+8, 2020-1-21 18:40 , Processed in 0.127181 second(s), 23 queries .