OpenMP: OpenMP常用函数

       在OpenMP的Runtime Library中有一些常用的函数,有些函数已经在前面的例子中使用过,现在集中说明这些常用的函数以及用法。

1、设置线程数目

其定义如下:

void omp_set_num_threads(int num_threads);

       通过该函数来指定其后用于并行计算的线程数目,其中参数num_threads就是指定的线程数目。

2、获取线程数目

其定义如下:

int omp_get_num_threads();

       通过该函数可以获取当前运行组中的线程数目,如果是在并行结构中使用该函数,其返回的就是现在并行计算中的所有的线程总数,如果是在串行中使用该函数,其返回值就为1。

3、获取最多线程数目

       其定义如下:

int omp_get_max_threads();

       该函数将返回最多可以用于并行计算的线程数目。

4、返回线程ID

       其定义如下:

int omp_get_thread_num();

       通过该函数可以返回当前线程的ID,如果使用该函数时处于并行结构中,它返回的就是这个并行线程的ID,如果在串行中,就是返回主线程的ID。

5、获取程序可用的处理器数目

       其定义如下:

int omp_get_num_procs();

       该函数将返回可用于程序的处理器数目(其实是线程数目)。

6、获取时间

       其定义如下:

double omp_get_wtime();

       该函数返回为时钟运行的时间,单位为s,如果现在时刻为11:40:30.8,则该值为11*3600+40*60+30.8=42030.8。在程序运行开始和即将结束时使用调用这个函数可以用于计算程序运行的时间。

7、是否处于并行中

       其定义如下:

int omp_in_parallel();

       该函数返回值为0表示现在处于串行程序中,值为1表示现在处于并行程序中。

关于这些常用函数的具体用法及含义如下例所示:

//File :CommonTest.cpp
#include"stdafx.h"
#include<omp.h>
#include<iostream>
using namespace std;

void CommonTest()
{
	int i,k;
	double starttime,endtime;
	cout<<"主线程中:"<<"\n";
	i=omp_get_num_threads();//获取线程数目
	cout<<"线程数目:"<<i<<"\n";
	i=omp_get_max_threads();//获取最多线程数目
	cout<<"最多线程数目:"<<i<<"\n";
	i=omp_get_thread_num();//当前线程ID
	cout<<"当前线程ID:"<<i<<"\n";
	i=omp_get_num_procs();//获取程序可用的处理器数目
	cout<<"程序可用的处理器数目:"<<i<<"\n";
	starttime=omp_get_wtime();//获取当前时间
	cout<<"程序开始运行时间:"<<starttime<<"s\n";
	i=omp_in_parallel();//程序是否处于并行
	cout<<"程序是否处于并行:"<<i<<"\n";
	i=omp_get_nested();//是否允许并行嵌套
	cout<<"是否允许并行嵌套:"<<i<<"\n";
	cout<<"\n程序开始并行:\n";
	#pragma omp parallel for
	for(i=0;i<2;i++)
	{
		k=omp_in_parallel();//程序是否处于并行
		cout<<"程序是否处于并行:"<<k<<"\n";
		k=omp_get_num_threads();//获取线程数目
		cout<<"线程数目:"<<k<<"\n";		
		k=omp_get_thread_num();//当前线程ID
		cout<<"当前线程ID:"<<k<<"\n";
	}
	cout<<"\n程序并行结束!\n";
	endtime=omp_get_wtime();//获取当前时间
	cout<<"程序结束时间:"<<endtime<<"s\n";
	cout<<"程序运行时间:"<<endtime-starttime<<"s\n";
}

       运行程序,其结果如下:

主线程中:

线程数目:1

最多线程数目:8

当前线程ID:0

程序可用的处理器数目:8

程序开始运行时间:42747.9s

程序是否处于并行:0

是否允许并行嵌套:0

程序开始并行:

程序是否处于并行:1

线程数目:8

当前线程ID:0

程序是否处于并行:1

线程数目:8

当前线程ID:1

程序并行结束!

程序结束时间:42747.9s

程序运行时间:0.0105584s

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值