美文网首页
C++openmp并行计算实例

C++openmp并行计算实例

作者: icfg66 | 来源:发表于2020-10-07 14:14 被阅读0次

C++利用内部库<omp.h>进行并行加速的实例,但实际效果确更慢,找不出原因。希望各路大神帮忙。

基本功能是计算\pi:
\pi = 4\int^1_0 \frac{1}{1+x^2}dx

//g++ avx_omp.cpp -fopenmp -O2 
#include <iostream>
#include <ctime>
#include <omp.h>
using namespace std; 
//正常的逐个累加运算
double compute_pi_naive(size_t dt){
    double pi = 0.0;
    double delta = 1.0/dt;
    for (size_t i =0;i<dt;i++){
        double x = (double)i/dt;
        pi += delta /(1+x*x);
//      cout<<omp_get_thread_num()<<endl;
    }
    return pi*4.0;
}
//多线程并行
double compute_pi_omp(size_t dt){
    double pi = 0.0;
    double delta = 1.0/dt;
    omp_set_num_threads(4);//设置四个核
    #pragma omp parallel
        {
    #pragma omp for  reduction(+:pi)
    for (size_t i =0;i<dt;i++){
        double x = (double)i/dt;
        pi += delta /(1+x*x);
//      cout<<omp_get_thread_num()<<endl;
    }
    }
    return pi*4.0;
return pi*4.0;
}
int main(){
    clock_t start,end;
    size_t dt = 134217728;
    double result1,result2;
    //普通函数计时
    start = clock();
    result1 = compute_pi_naive(dt);
    end  = clock();
    cout<<"naive:\n"<< result1 <<endl<<end- start <<endl;
    //omp 
    start = clock();
    result2 = compute_pi_omp(dt);
    end  = clock();
    cout<<"omp:\n" <<result2 <<endl<<end- start <<endl;

    return 0;
}
image.png

利用了四个线程,结果竟然更慢,真是无语了。

相关文章

  • C++openmp并行计算实例

    C++利用内部库进行并行加速的实例,但实际效果确更慢,找不出原因。希望各路大神帮忙。 基本功能是计算...

  • 第一章 大数据处理技术简介

    并行计算技术 并行计算:定义: 同时对多条指令,多个任务或多个数据进行处理的一种计算技术并行计算系统:实现并行计算...

  • 并行计算

    并行计算机 并行计算机分类 数据与指令 SIMD 单条指令并行计算多条数据,如 A=A+1(备注:其中A为数组) ...

  • 指北 | 谈谈ForkJoin框架的设计与实现

    在了解Fork-Join之前,我们得先了解什么是并行计算。 并行计算 相对于串行计算,并行计算可以划分成时间并行和...

  • Spark并行计算内容总结

    (一)并行计算的简介 并行计算:简单来讲,并行计算就是同时使用多个计算资源来解决一个计算问题,具有以下特点: 一个...

  • XGBoost面试题详解

    FAQ 1. XGBoost如何进行并行计算?XGBoost是基于Boosting思想,其并行计算不是在Tree层...

  • 对等模式 实现Jacobi迭代的并行计算 C++版

    两小时入门MPI与并行计算(五):对等模式(实现Jacobi迭代的并行计算)[https://zhuanlan.z...

  • Java并发-ForkJoin

    主要用于并行计算中,和 MapReduce 原理类似,都是把大的计算任务拆分成多个小任务并行计算。

  • 分布式计算框架之 MapReduce 剖析

    MapReduce 是一种简化、并行计算编程模型,MapReduce 用于进行大数据量的计算,能让缺乏并行计算经验...

  • 并发编程之Disruptor-3.高级应用

    1.导航 Disruptor核心链路应用场景 并行计算 - 串 (并) 行操作 并行计算 - 多边形高端操作 Di...

网友评论

      本文标题:C++openmp并行计算实例

      本文链接:https://www.haomeiwen.com/subject/jhjfpktx.html