OpenMP简介和使用(简单算法并行化处理)

OpenMP概述

	1.OpenMP应用编程接口API(Application Programming Interface)是在共享存储体系结构上的一个编程模型。
	2.包括编译制导(Compiler Directive)、运行库例程(Runtime Library)和环境变量(Environment Variables)
	3.支持增量并行化(Incremental Parallelization)

注意:OpenMP不是建立在分布式存储系统上的/不是在所有的环境下都一样/不是能让多数共享存储器均能有效利用

并行编程模型

	基于线程的并行编程模型
	Fork-Join并行执行模型

在这里插入图片描述

线程分配实例

//gcc -fopenmp -o test xxx.c
#include<stdio.h>
#include"omp.h"
int main ()
{
   
	int nthreads,tid;
	int nprocs;
	char buf[32];
	omp_set_num_threads(8);
	/* Fork a team of threads*/
	#pragma omp parallel private(nthreads,tid)
	{
   
		/* Obtain and print thread id */
		tid=omp_get_thread_num();
		printf("Hello World from OMP thread %d\n", tid);         
		/* Only master thread does this  */ 
		if (tid==0) {
                  
		nthreads = omp_get_num_threads();               
		printf("Number of threads %d\n", nthreads);         
		}   
	}
	return 0;
}

编译制导

#pragma omp: 前缀,对所有的OpenMP语句都需要这样的前缀
其作用域:静态扩展(在一个编译制导语句之后被封装到一个结构块中)
		孤立语句(一个OpenMP的编译制导语句不依赖于其他的语句)
		动态扩展(包括静态范围-for语句 和 孤立语句-sections/critical语句)

共享任务结构(并行for循环/并行sections语句/串行执行):
共享任务结构

for编译制导语句
 for语句指定紧随它的循环语句必须由线程组并行执行; 
语句格式:
 #pragma omp for [clause[[,]clause]…] newline 
  [clause]=  Schedule(type [,chunk])  
  			 :schedule字句描述如何将循环的迭代划分给线程组中的线程
  			   如果没有指定chunk大小,迭代会尽可能的平均分配给每个线程
  			   type为static,循环被分成大小为chunk的块,静态分配给线程
  			   type为dynamic,循环被动态划分为大小为chunk的块, 动态分配给线程
             ordered 
             private (list) 
             firstprivate (list)  
             lastprivate (list) 
             shared (list) 
             reduction 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值