openMP

多核编程框架
授权协议 Apache-2.0
开发语言 C/C++
所属分类 程序开发、 并发/并行处理框架
软件类型 开源软件
地区 不详
投 递 者 饶德元
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套编译指令 (Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMP的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMP提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMP 时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。

OpenMP提供的这种对于并行描述的高层抽象降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本 身,而非其具体实现细节。对基于数据分集的多线程程序设计,OpenMP是一个很好的选择。同时,使用OpenMP也提供了更强的灵活性,可以较容易的适 应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,但在OpenMP中,OpenMP库从程序员手中接管了部分这两方面的工作。

但是,作为高层抽象,OpenMP并不适合需要复杂的线程间同步和互斥的场合。

OpenMP的另一个缺点是不能在非共享内存系统(如计算机集群)上使用。在这样的系统上,MPI使用较多。

  • OpenMP的介绍及简单使用 OpenMP是一个跨平台的多线程实现,由主线程生成一系列的子线程,并将任务划分给这些子线程进行执行。这些子线程会并行运行,由运行时环境将线程分配给不同的处理器。 即 主线程–>(生成)子线程 子线程并行运行(分配给不同的处理器) 主流 C++ 编译器,如 gcc、Visual C++ 都支持 OpenMP 现在主流且较新的 Linux 发行版本,使用 gcc/g++

 相关资料
  • 本文向大家介绍什么是多核编程?,包括了什么是多核编程?的使用技巧和注意事项,需要的朋友参考一下 多核编程有助于创建并发系统以部署在多核处理器和多处理器系统上。多核处理器系统基本上是在一个芯片中具有多个执行核心的单个处理器。它在主板或芯片上具有多个处理器。多处理器系统中可能包含现场可编程门阵列(FPGA)。FPGA是一种集成电路,其中包含一组可编程逻辑块和一个可重配置互连的层次结构。输入数据被处理以

  • 在撰写此书时,CPU 架构的景观正以几十年来最快的速度发生变化。 定义并发和并行 一个并发程序需要同时处理多个互不相关的任务。考虑一下游戏服务器的例子:典型做法是将数十个组件组合起来,其中的每一个都与外部有复杂交互。可能其中某个组件负责多个用户间聊天;另外一些负责处理玩家的输入,并且将更新后的状态返回给客户端;同时还有其他程序执行物理计算。 并发程序的正确运转并不需要多核,尽管多核可以提高执行效率

  • 当我尝试以下代码时 我还是并行编程的新手。我怎么能得到一个并行版本比顺序版本更快?

  • 问题内容: 我想学习lLinux内核编程。 这样做的出发点是什么?要解决的一些较简单的问题是什么? 问题答案: 尝试掌握Robert Love关于Linux内核编程的书。它非常简洁,易于遵循。 在那之后或与此同时,您可能想看一看“了解Linux内核”。但是我不建议在早期阶段使用它。 另外,请参阅Linux内核编程指南。由于可以从编程内核模块中学到很多东西,因此该指南将对您有所帮助。是的,有关大量信

  • 问题内容: 我有为共享内存机器(在C和FORTRAN中)编码OpenMP的经验,可以执行简单的任务,例如矩阵加法,乘法等(仅看它如何与LAPACK竞争)。我知道OpenMP足以执行简单的任务,而无需查看文档。 最近,我转向项目的Python,除了绝对的基础知识之外,我对Python没有任何经验。 我的问题是: 在Python中使用OpenMP的 最简单 方法是什么?最简单的说,我是指在程序员方面花

  • 我一直在用OpenMP调用这个 在C11 std::threads中(我相信这些只是pthreads) 但是,OpenMP的实现速度是原来的两倍——更快!我本以为C11线程会更快,因为它们更低级。注意:上面的代码在一个循环中不仅被调用了一次,而且可能被调用了10000次,所以这可能与此有关吗? 编辑:为了澄清,在实践中,我要么使用OpenMP,要么使用C 11版本——不是两者都使用。当我使用Ope