zoukankan      html  css  js  c++  java
  • OpenMP之求和(用section分块完成)

    // Sum_section.cpp : 定义控制台应用程序的入口点。
    //section功能:;
    //1.指定其内部的代码划分给线程中某个线程,不同的section由不同的线程执行;
    //2.将一个任务划分成独立的几个section,且section之间是并行执行的;
    
    #include "stdafx.h"
    
    //#include <stdio.h>
    #include <time.h>
    #include "omp.h"
    #include <windows.h>
    
    #define NUM_THREADS 2
    #define num 1000000000
    int _tmain(int argc, _TCHAR* argv[])
    {
    	omp_set_num_threads(NUM_THREADS);
    	long long sum=0;
    	clock_t t1=clock();
    #pragma omp parallel sections reduction(+:sum)//reduction解决数据竞争,将两个线程所得的sum加起来
    	{	
    #pragma omp section 
    		{
    			for (long i=omp_get_thread_num();i<=num;i=i+NUM_THREADS)
    			{
    				sum=sum+i;
    			}		
    		}
    #pragma omp section 
    		{
    			for (long i=omp_get_thread_num();i<=num;i=i+NUM_THREADS)
    			{
    				sum=sum+i;
    			}
    		}
    		
    	}
    	clock_t t2=clock();
    	clock_t parallel=t2-t1;
    	printf("sum=%lld
    ",sum);
    	printf("parallel time=%d
    
    ",parallel);
    
    
    	//串行
    	sum=0;
    
    	t1=clock();
    	for(long long i=1;i<=num;i=i+1)
    	{
    		sum=sum+i;
    	}
    	t2=clock();
    	clock_t serial=t2-t1;
    	printf("sum=%lld
    ",sum);
    	printf("serial time=%d
    ",serial);
    
    	system("pause");
    	return 0;
    }
    
    //运行结果如下:相对加速比为:2981/1643=1.81

  • 相关阅读:
    画图(三,进阶之绘制表盘)
    浅谈 Fork/Join
    VS中卸载Visual Assist X
    VS中显示行号
    zabbix server安装(二)
    zabbix监控的基础概念、工作原理及架构(一)
    k8s role
    如何构建 Redis 高可用架构?
    Mysqldump参数大全
    kubespray 一键安装k8s集群
  • 原文地址:https://www.cnblogs.com/IT-hexiang/p/4084588.html
Copyright © 2011-2022 走看看