下载此文档

OpenMP编程指南.pdf


文档分类:IT计算机 | 页数:约30页 举报非法文档有奖
1/30
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/30 下载此文档
文档列表 文档介绍
: .

  
int main(int argc, char* argv[]) 

     clock_t t1 = clock(); 
#pragma omp parallel for 
     for ( int j = 0; j < 2; j++ ){ 
         test(); 
     } 
     clock_t t2 = clock(); 
     printf("Total time = %d\n", t2‐t1); 
  
     test(); 
     return 0; 

  
在 test()函数中,执行了 1 亿次循环,主要是用来执行一个长时间的操作。 
在 main()函数里,先在一个循环里调用 test()函数,只循环 2 次,我们还是看一下在双核
CPU 上的运行结果吧: 
Time = 297 
Time = 297 
Total time = 297 
Time = 297 
  
可以看到在 for 循环里的两次 test()函数调用都花费了 297ms,  但是打印出的总时间却只花
费了 297ms,后面那个单独执行的 test()函数花费的时间也是 297ms,可见使用并行计算后
效率提高了整整一倍。OpenMP 并行程序设计(二) 
 
1、fork/join 并行执行模式的概念 
 
OpenMP 是一个编译器指令和库函数的集合,主要是为共享式存储计算机上的并行程序设计
使用的。 
前面一篇文章中已经试用了 OpenMP 的一个 Parallel for 指令。从上篇文章中我们也可以发现
OpenMP 并行执行的程序要全部结束后才能执行后面的非并行部分的代码。这就是标准的并
行模式 fork/join 式并行模式,共享存储式并行程序就是使用 fork/join 式并行的。 
标准并行模式执行代码的基本思想是,程序开始时只有一个主线程,程序中的串行部分都由
主线程执行,并行的部分是通过派生其他线程来执行,但是如果并行部分没有结束时是不会
执行串行部分的,如上一篇文章中的以下代码: 
 
int main(int argc, char* argv[]) 

     clock_t t1 = clock(); 
#pragma omp parallel for 
     for ( int j = 0; j < 2; j++ ){ 
         test(); 
     } 
     clock_t t2 = clock(); 
     printf("Total time = %d\n", t2‐t1); 
  
     test(); 
     return 0; 

在没有执行完 for 循环中的代码之前,后面的 clock_t t2 = clock();这行代码是不会执行的,如
果和调用线程创建函数相比,它相当于先创建线程,并等待线程执行完,所以这种并行模式
中在主线程里创建的线程并没有和主线程并行运行。 
 
2、OpenMP 指令和库函数介绍 
 
下面来介绍 OpenMP 的基本指令和常用指令的用法,  
在 C/C++中,OpenMP 指令使用的格式为 
       #pragma omp  指令  [子句[子句]…] 
前面提到的 parallel for 就是一条指令,有些书中也将 OpenMP 的“指令”叫做“编译指导语
句”,后面的子句是可选的。例如: 
#pragma omp parallel private(i, j) 
parallel  就是指令,  private 是子句 
为叙述方便把包含#pragma 和 OpenMP 指令的一行叫做语句,如上面那行叫 parallel 语句。 
  
OpenMP 的指令有以下一些: 
       parallel,用在一个代码段之前,表示这段代码将被多个线程并行执行for,用于

OpenMP编程指南 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数30
  • 收藏数0 收藏
  • 顶次数0
  • 上传人橘子
  • 文件大小301 KB
  • 时间2022-01-19