OpenMP框架入门

OpenMP 框架是使用 C、C++ 和 Fortran 进行并发编程的一种强大方法。GNU Compiler Collection (GCC) V4.2 支持 OpenMP 2.5 标准,而 GCC 4.4 支持最新的 OpenMP 3 标准。包括 Microsoft? Visual Studio 在内的其他编译器也支持 OpenMP。在本文中,您可以学习使用 OpenMP 编译指示 (pragma),寻找对 OpenMP 提供的一些应用程序编程接口 (API) 的 支持,并使用一些并行算法对 OpenMP 进行测试。本文将使用 GCC 4.2 作为首选编译器。

入门

OpenMP 的 一大特点就是您只需完成标准的 GCC 安装即可。支持 OpenMP 的程序必须使用 -fopenmp 选项进行编译。

您的第一 个 OpenMP 程序

让我们先从一个 Hello, World! 打印应用程序开始,它包括一个额外的编译指示。清单 1 显示了 相关代码。

清单 1. 使用了 OpenMP 的 Hello World 程序

#include <iostream>
int main()
{
  #pragma omp parallel
  {
    std::cout << "Hello World!\n";
  }
}

在使用 g++ 编译和运行清单 1 中的代码时,控制台中应该会显示一个 Hello, World!。现在,使用 -fopenmp 选项重 新编译代码。清单 2 显示了输出。

清单 2. 使用 -fopenmp 命令编译并运行代码

tintin$ g++ 

test1.cpp -fopenmp
tintin$ ./a.out
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

发生了什么?#pragma omp parallel 仅在您指定了 -fopenmp 编译器选项后才会发挥作用。在编译 期间,GCC 会根据硬件和操作系统配置在运行时生成代码,创建尽可能多的线程。每个线程的起始例程为代码块中位于指令 之后的代码。这种行为是 隐式的并行化,而 OpenMP 本质上由一组功能强大的编译指示组成,帮您省去了编写大量样本文 件的工作。(为了进行比较,您需要了解使用 Portable Operating System Interface (POSIX) 线程 [pthreads] 实现您 刚才的程序将会怎样)。我使用的计算机运行的是 Intel? Core i7 处理器,有四个物理核心,每个核心有两个逻辑核心, 因此清单 2 的输出看上去非常合理(8 个线程 = 8 个逻辑核心)。

接下来,让我们详细了解并行编译指示。

使用 OpenMP 实现并行处理的乐趣

使用编译命令的 num_threads 参数控制线程的数量非常简单。下面显示 了 清单 1 中的代码,可用线程的数量被指定为 5(如 清单 3 所示)。

清单 3. 使用 num_threads 控制线程的数 量

#include <iostream>
int main()
{
  #pragma omp parallel num_threads(5)
  {
    std::cout << "Hello World!\n";
  }
}

这里没有使用 num_threads 方法,而是使用另一种方法来修改运行代码的线程的数量。这还会将我们带到您将要使用的 第一个 OpenMP API:omp_set_num_threads。在 omp.h 头文件中定义该函数。不需要链接到额外的库就可以获得 清单 4 中的代码,只需使用 -fopenmp。

清单 4. 使用 omp_set_num_threads 对线程的创建进行调优

#include <omp.h>
#include <iostream>
int main()
{
  omp_set_num_threads(5);
  #pragma omp parallel
  {
    std::cout << "Hello World!\n";
  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索编译
, 编译器
, 标准
, 程序
, fortran
, openmp
支持
openmp 入门、spring框架入门、restful框架案例入门、ssh框架入门教程、java spring框架 入门,以便于您获取更多的相关知识。

时间: 2024-09-29 03:24:49

OpenMP框架入门的相关文章

Java Mybatis框架入门基础教程_基础知识

一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

PHP的Yii框架入门使用教程_php实例

安装 Yii 的安装由如下两步组成: 从 yiiframework.com 下载 Yii 框架. 将 Yii 压缩包解压至一个 Web 可访问的目录. Tip|提示: 安装在 Web 目录不是必须的,每个 Yii 应用都有一个入口脚本,只有它才必须暴露给 Web 用户.其它 PHP 脚本(包括 Yii)应该保护起来不被 Web 访问,因为它们可能会被黑客利用.需求 安装完 Yii 以后你也许想验证一下你的服务器是否满足使用 Yii 的要求,只需浏览器中输入如下网址来访问需求检测脚本: http:

Laravel 5 框架入门(四)完结篇_php实例

Page 和评论将使用 Eloquent 提供的"一对多关系".最终,我们将得到一个个人博客系统的雏形,并布置一个大作业,供大家实战练习. 1. 初识 Eloquent Laravel Eloquent ORM 是 Laravel 中非常重要的部分,也是 Laravel 能如此流行的原因之一.中文文档在: 1. http://laravel-china.org/docs/5.0/eloquent 2. http://www.golaravel.com/laravel/docs/5.0/

CI框架入门示例之数据库取数据完整实现方法_php实例

本文实例讲述了CI框架入门示例之数据库取数据完整实现方法.是写给初学者看的,这是最简单可以调通的例子.分享给大家供大家参考.具体实现方法如下: 1.下载CI框架 2.配置 database.php配置: 为数据库服务器设置 connection 参数: 复制代码 代码如下: $db['default']['hostname'] = "your-db-host";  $db['default']['username'] = "your-username";  $db[

CI框架入门之MVC简单示例_php实例

本文实例讲述了CI框架入门之MVC简单示例.分享给大家供大家参考,具体如下: 最简单的CI模型: 注意:模型需要用到数据库 配置文件在appcation/config.php 这里我们要用到数据库,需要将databases.php中的相关参数填写一下,具体不再赘述. 直接进入主题: MVC: 1.首先谈"M" 模型 CI中的模型存放在application/models文件夹里 命名规则是:类名_model.php 文件中只包含一个类: 如: class Nb_model extend

CI框架入门之MVC简单示例

本文实例讲述了CI框架入门之MVC简单示例.分享给大家供大家参考,具体如下: 最简单的CI模型: 注意:模型需要用到数据库 配置文件在appcation/config.php 这里我们要用到数据库,需要将databases.php中的相关参数填写一下,具体不再赘述. 直接进入主题: MVC: 1.首先谈"M" 模型 CI中的模型存放在application/models文件夹里 命名规则是:类名_model.php 文件中只包含一个类: 如: class Nb_model extend

超级给力的JavaScript的React框架入门教程_基础知识

 React 是 Facebook 里一群牛 X 的码农折腾出的牛X的框架. 实现了一个虚拟 DOM,用 DOM 的方式将需要的组件秒加,用不着的秒删.React 扮演着 MVC 结构中 V 的角色, 不过你要是 Flux 搭配使用, 你就有一个很牛X的能让轻松让 M 和 V 同步的框架了,Flux 的事以后再说~组件们 在 React 中,你可以创建一个有特殊功能的组件,这在 HTML 元素里你是打着灯笼也找不到的,比如这个教程里的下拉导航.每个组件都有自己的地盘(scope),所以我们定义一

Laravel 5 框架入门(三)_php实例

本篇教程中,我们将利用 Laravel 5 自带的开箱即用的 Auth 系统对我们的后台进行权限验证,并构建出前台页面,对 Pages 进行展示. 1. 权限验证 后台地址为 http://localhost:88/admin ,我们的所有后台操作都将在此页面或其子页面下进行.利用 Laravel 5 提供的 Auth,我们只需要改动很少部分的路由代码便可以实现权限验证功能. 首先,将路由组的代码改为: 复制代码 代码如下: Route::group(['prefix' => 'admin',

Laravel 5 框架入门(二)构建 Pages 的管理功能_php实例

我们将改变学习路线,不再像 Laravel 4 教程那样先构建登录系统.在本篇教程中,我们将一起构建 Pages 的管理功能,尝试 Laravel 的路由和 PHP 的命名空间. 1. 路由 Laravel 中的路由,跟其他 PHP 框架一样,作用是把各种请求分流到各个控制器. 在 `learnlaravel5/app/Http/routes.php` 的末尾添加以下代码: 复制代码 代码如下: Route::group(['prefix' => 'admin', 'namespace' =>