一起来学OpenMP(2)——常用的库函数

转载自新浪博文:http://blog.sina.com.cn/s/blog_57562d890100xj3k.html

一、引言

第一节通过一个简单的示例程序演示了OpenMP,这一节介绍常用的四个库函数,来进一步认识OpenMP。

 

二、常用的库函数

函数原型                                        功能

int omp_get_num_procs(void)     返回当前可用的处理器个数

int omp_get_num_threads(void)  返回当前并行区域中的活动线程个数,如果在并行区域外部调用,返回1

int omp_get_thread_num(void)    返回当前的线程号(个人感觉这里为omp_get_thread_ID好一些)

int omp_set_num_threads(void)  设置进入并行区域时,将要创建的线程个数

 

三、并行区域

#include <iostream>   

#include <omp.h> // OpenMP编程需要包含的头文件   

int main()  

 

std::cout << omp_get_num_procs() << std::endl;   

#pragma omp parallel //指明下面大括号内部为并行区域   

 

 std::cout << "OpenMP" << std::endl;  

 

return 0;  

 

输出结果:

    

 

系统为双核,所以默认创建了两个线程来执行并行区域,所以打印了两次OpenMP。

 

若将系统环境变量做如下设置:

 

重启VS2008,则输出

 

这是因为默认情况下,有几个核,则创建几个线程,但是可以通过环境变量来指定可以创建的线程个数。其实omp_set_num_threads函数也可以做到这一点,后面再做描述。

 

四、常用库函数示例

下面的示例代码同时演示了四个库函数。

 

  1. #include <iostream>   
  2. #include <omp.h> // OpenMP编程需要包含的头文件   
  3.   
  4. int main()  
  5.  
  6.     std::cout << "CPU number: " << omp_get_num_procs() << std::endl;  
  7.   
  8.     std::cout << "Parallel area 1: " << std::endl;  
  9. #pragma omp parallel //指明下面大括号内部为并行区域   
  10.      
  11.         std::cout << "Num of threads is " << omp_get_num_threads();  
  12.         std::cout << "; This thread ID is " << omp_get_thread_num() << std::endl;  
  13.      
  14.   
  15.     std::cout << "Parallel area 2: " << std::endl;  
  16.     omp_set_num_threads(4); // 设置成为并行区域创建4个线程   
  17. #pragma omp parallel //指明下面大括号内部为并行区域   
  18.      
  19.         std::cout << "Num of threads is " << omp_get_num_threads();  
  20.         std::cout << "; This thread ID is " << omp_get_thread_num() << std::endl;  
  21.      
  22.     return 0;  
  23.  

输出:

  

第一个并行区域默认创建两个线程,线程ID分别为0和1,由于是并行输出,所以打印有些乱,但可以看到最后的01分别代表线程ID 0和ID 1。

第二个并行区域中指定创建线程个数为4,线程ID分别为0、1、2、3。

 

 

五、小节

演示了常用OpenMP库函数的使用方法,下一节讲解for循环的并行化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值