`
444878909
  • 浏览: 638936 次
文章分类
社区版块
存档分类
最新评论

关于linux下的openmp编程基础

 
阅读更多

原文地址:http://blog.chinaunix.net/uid-13327770-id-2902332.html


2009-06-10 10:56:26

分类:LINUX

OpenMP是专门针对共享地址空间的平行计算机提供的并行计算库,在Intel C++Visual C++ 8.0里通过#pragma支持。用OpenMP,可以不必去写诸如CreateThread之类的线程管理代码,多线程程序写起来比较简洁。而且OpenMP提供了很丰富的指令,对于同步共享变量、合理分配负载等任务,都提供了有效的支持,很值得一学。不过因为这个东西用起来很轻松,稍一疏忽就能酿成愚蠢错误,所以肯定是要经常用才能驾驭好的。一开始用它,犯错误是难免的。下载安装gcc4.2后,编译的时候加上-fopenmp参数即可。

gcc-fopenmptest_omp.c
g++-fopenmptest_omp.cc
gfortran-fopenmptest_omp.f90(95)

尽管很多文献都说gcc4.2以上版本才支持openmp,笔者所用的gcc编译器版本为4.1.1,实验表明也支持openmp,安装fedora 7以上版本,gcc默认就支持openmp.

[xuyc@sv168 openmp]$ gcc -v

使用内建specs

目标:i386-redhat-linux

配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux

线程模型:posix

gcc版本4.1.1 20070105 (Red Hat 4.1.1-52)

例子1helloworld.c
01 #include <stdio.h>

//#include "omp.h"如果用intelicc编译器,就要写上这行
02 int main( argc, argv)
03 int argc;
04 char **argv;
05 {
06 #pragma omp parallel
07 printf( "Hello world!\n" );
08 return 0;
09 }
程序helloworld.c的本质就是在屏幕上打印字符串”Hello world!”
“#pragma omp parallel”是一条OpenMP标准的语句,它的含义是让它后面的语句按照多线程来执行。需要注意的是每个线程都去做相同的事情。

[xuyc@sv168 openmp]$ gcc –fopenmp –ohelloworldhelloworld.c

[xuyc@sv168 openmp]$OMP_NUM_THREADS=10

[xuyc@sv168 openmp]$ exportOMP_NUM_THREADS

[xuyc@sv168 openmp]$ ./helloworld

Hello world!

Hello world!

Hello world!

Hello world!

OMP_NUM_THREADS=2 ./helloc

如果不定义OMP_NUM_THREADS,默认会等于CPU数量,在8核心的机器上,会打印出8"Hello World".

[xuyc@sv168 openmp]$cat /proc/cpuinfo查看CPU核的数量,可以看到有四个核

[xuyc@sv168 openmp]$ cat /proc/cpuinfo

processor: 0

vendor_id: GenuineIntel

cpu family: 6

model: 15

model name: Intel(R) Core(TM)2 Quad CPUQ6600@ 2.40GHz

stepping: 11

cpu MHz: 2400.138

cache size: 4096 KB

fdiv_bug: no

hlt_bug: no

f00f_bug: no

coma_bug: no

fpu: yes

fpu_exception: yes

cpuid level: 10

wp: yes

flags: fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmxest tm2 cx16 xtpr lahf_lm

bogomips: 6002.73

processor: 1

vendor_id: GenuineIntel

cpu family: 6

model: 15

model name: Intel(R) Core(TM)2 Quad CPUQ6600@ 2.40GHz

stepping: 11

cpu MHz: 2400.138

cache size: 4096 KB

fdiv_bug: no

hlt_bug: no

f00f_bug: no

coma_bug: no

fpu: yes

fpu_exception: yes

cpuid level: 10

wp: yes

flags: fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cplvmx est tm2 cx16 xtpr lahf_lm

bogomips: 6002.73

processor: 3

vendor_id: GenuineIntel

cpu family: 6

model: 15

model name: Intel(R) Core(TM)2 Quad CPUQ6600@ 2.40GHz

stepping: 11

cpu MHz: 2400.138

cache size: 4096 KB

fdiv_bug: no

hlt_bug: no

f00f_bug: no

coma_bug: no

fpu: yes

fpu_exception: yes

cpuid level: 10

wp: yes

flags: fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cplvmx est tm2 cx16 xtpr lahf_lm

bogomips: 6002.73

示例xx.c

1#include <stdio.h>

2#include <omp.h>

3int main( int argc, char **argv)

4{

5int rank, size;

6#pragma omp parallel private(rank)

7{

8rank= omp_get_thread_num();

9size= omp_get_num_threads();

10printf( "Hello world! I'm %d of %d\n", rank, size );

11}

12return 0;

13}

[xuyc@sv168 openmp]$ gcc -fopenmp -o xx xx.c

[xuyc@sv168 openmp]$ ./xx

Hello world! I'm 0 of 4

Hello world! I'm 1 of 4

Hello world! I'm 2 of 4

Hello world! I'm 3 of 4

Microsoft Visual Studio .net 2005完全支持OpenMP编程[5]Visual Studio. Net 2005 Professional安装之后,即可编写OpenMP程序,无须另外安装其它软件。当前的Visual Studio. Net 2005完全支持OpenMP 2.0标准。通过新的编译器选项/openmp来支持OpenMP程序的编译和连接,编译器会自动地将用户的代码和OpenMPWindows下实现的库vcomp.dll连接在一起。程序在运行的时候会自动地寻找vcomp.dll。下面用Visual Studio.Net 2005生成一个新OpenMP项目OpenMP1


分享到:
评论

相关推荐

    linux/windows openmp 多核编程资料

    里面包含很多LINUX下与WINDOWS下使用多线程进行多核编程的示例,并且使用openmp对串行代码进行并行化进行了介绍。里面还谈及了很多多线程并行编程的概念及如何有效地使用多线程提高程序运行速率,作了相当清晰的介绍...

    OpenMP编程.ppt

    OpenMP编程.ppt

    openmp编程指南.pdf

    多核并行编程中,openmp作为一个不错的选择,此文档对openmp的特点,编程特性跟据例子进行讲解,有助于快速掌握openmp的编程

    Intel, OpenMP编程

    INTEL 软件学院讲解INTEL工具的PPT系列: 01 Intel 处理器结构 02 Intel 编译器、vtune ...*04 用OpenMP编程 05 Thread building block 06 Thread checker 07 Thread profiler 分开上传,大家看需求下载

    OpenMP+F90并行编程基础

    OpenMP is a framework for shared memory parallel computing. OpenMP is a standard C/C++ and Fortran compilers. Compiler directives indicate where parallelism should be used. C/C++ use #pragma ...

    OpenMP编程指南

    简单的介绍OPenMP及它的语法。适合入门

    OpenMP编程

    OpenMP编程课件ppt 使用Visual Studio 2005编写OpenMP程序

    OpenMP编程指南.ppt

    OpenMP编程指南.ppt

    在C++中使用openmp进行多线程编程

    多线程在实际的编程中的重要性不言而喻。对于C++而言,当我们需要使用多线程时,可以使用boost::thread库或者自从C++ 11开始支持的std::thread,也可以使用操作系统相关的线程API,如在Linux上,可以使用pthread库。...

    openMP编程基础

    介绍openMP的编程规范、各种语句的使用规则

    MPI和OPENMP混合编程详解

    康奈尔大学资源,mpi和openmp混合编程详解,有一定参考价值。

    并行程序设计(openMP编程)

    并行程序设计(openMP编程)

    OpenMP并行程序设计

    openmp快速入门,简单的介绍了openmp的用法,一目了然

    MPI+OpenMP.zip

    并行计算机架构与编程上机实验程序 求矩阵行列式MPI+OpenMP多线程编程 MPI+OpenMP多线程编程的PBS

    openmp 编程

    openmp 经典入门篇 介绍了openmp的入门,实例 给读者一个最简单的入门教学

    OpenMP编程技术总结[归类].pdf

    OpenMP编程技术总结[归类].pdf

    OPenMp多核编程

    OPenMp多核编程命令详解包括:OpenMP简介,基本语法,以及相关练习

    openmp简单易学易用

    在这个学习中,您能了解openmp具体在linux下的操作,简单实习openmp,对它有一个清晰的了解,和简单的性能比较!

    梯形积分法OpenMp

    1.分别实现梯形积分法的Pthread、OpenMP版本,熟悉并掌握OpenMP编程方法,探讨两种编程方式的异同。

Global site tag (gtag.js) - Google Analytics