OpenMp之reduction求和

// OpenMP1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include"omp.h"
#include<Windows.h>
#include<time.h>
#include<iostream>
using namespace std;

#define NUM_THREADS 4
int _tmain(int argc, _TCHAR* argv[])
	{
	 omp_set_num_threads(NUM_THREADS);
	 long long sum=0;
	 clock_t time_begin =clock();
	#pragma omp parallel for reduction(+:sum)

         for(long i=1;i<=1000000000;i++)
			  {
			   sum+=i;
			  }

	  clock_t time_end=clock();
	  double s1=time_end-time_begin;
	  cout<<"Sum="<<sum<<endl;
	  cout<<"并行时间="<<s1<<endl;
	//******************************************************
	  sum=0;
	  time_begin=clock();
	  for(long i=1;i<=1000000000;i++)
	  {
	   sum+=i;
	  }
	  time_end=clock();
	  double s2=time_end-time_begin;
	  cout<<"Sum="<<sum<<endl;
	  cout<<"串行时间="<<s2<<endl;
	  cout<<"加速比为"<<(s2/s1)<<endl;

	 system("pause");
	 return 0;
	}
时间: 2024-10-22 19:47:48

OpenMp之reduction求和的相关文章

Opencl 并行求和

上周尝试用opencl求极大值,在网上查到大多是求和,所谓的reduction算法.不过思路是一样的. CPP: int err = 0; unsigned long int nNumCount = 102400000; int nLocalSize = 256; int nGroupSize = 102400; int nGroup = nGroupSize / nLocalSize; int* pArray = new int[nNumCount]; unsigned long int nR

openMP的一点使用经验

最近在看多核编程.简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生.按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率.这两天关注的多核编程的工具包括openMP和TBB.按照目前网上的讨论,TBB风头要盖过openMP,比如openCV过去是使用openMP的,但从2.3版本开始抛弃ope

openMP的一点使用经验【非原创】

按照百科上说的,针对于openmp的编程,最简单的就是在开头加个#include<omp.h>,然后在后面的for上加一行#pragma omp parallel for即可,下面的是较为详细的介绍了openmp的入门. OpenMP:OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Directive). TBB:TBB,Thread Building

学习OpenCV——OpenMP

转自:http://www.cnblogs.com/yangyangcv/archive/2012/03/23/2413335.html openMP的一点使用经验 最近在看多核编程.简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生.按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率.这两天

OpenMp实现并行化

前言 昨天,往arm上移植opencv程序,发现运行速度很慢.观察资源监视器发现只有一个核处于高负荷(总共4核),遂考虑到需要多核计算.OpenMp和MPI是常用并行计算库,OpenMP相对简单适合单机多核多线程,MPI适合集群,但复杂. OpenMp是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多处理器程序设计的一套指导性的编译处理方案(Compiler Directive).OpenMP支持的编程语言包括C语言.C++

蒙特卡洛方法计算圆周率的三种实现-MPI openmp pthread

蒙特卡洛方法实现计算圆周率的方法比较简单,其思想是假设我们向一个正方形的标靶上随机投掷飞镖,靶心在正中央,标靶的长和宽都是2 英尺.同时假设有一个圆与标靶内切.圆的半径是1英尺,面积是π平方英尺.如果击中点在标靶上是均匀分布的(我们总会击中正方形),那么飞镖击中圆的数量近似满足等式 飞镖落在圆内的次数/飞镖落在标靶内的总次数=π/4 因为环包含的面积与正方形面积的比值是π/4. 因为环所包含的面积与正方形面积的比值是π/4. 我们可以用这个公式和随机数产生器来估计π的值. 伪代码如下: numb

OpenMP并行程序设计——for循环并行化详解

转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/40018735 在C/C++中使用OpenMP优化代码方便又简单,代码中需要并行处理的往往是一些比较耗时的for循环,所以重点介绍一下OpenMP中for循环的应用.个人感觉只要掌握了文中讲的这些就足够了,如果想要学习OpenMP可以到网上查查资料. 工欲善其事,必先利其器.如果还没有搭建好omp开发环境的可以看一下OpenMP并行程序设计--Eclipse开发环境的搭建 首

OpenMP for Android初学记录

1. 资料整理与收集 1.1 国外资料 (1). Wiki上的介绍:http://en.wikipedia.org/wiki/OpenMP (2). OpenMP教程: http://www.llnl.gov/computing/tutorials/openMP (3). 并行计算介绍:https://computing.llnl.gov/tutorials/parallel_comp/ (4). 官方指定参考书:<Using OpenMP>CSDN上的下载链接 1.2 国内资料 (1). O

Study Notes: OpenMP gramma and notes

1/ OpenMP 只是编译器的拓展,用#pragma directive(编译制导指令)来标注.如果不能并行,编译器只会忽略,并行地执行代码而不会报错.这样的作用是,可以比较方便地平行某段代码而不用大改. 2/ MIMD 和 SIMD最大的区别是,MIMD意思就是用到multi-core而SIMD则是同一个core. 3/使用OpenMP需要在GCC的compiler上加上-fopenmp且如果需要使用内置运行变量需要包含头文件 4/ OpenMP的所有编译制导指令是以#pragma omp开