C++openmp并行计算实例

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

基本功能是计算 π \pi π:
π = 4 ∫ 0 1 1 1 + x 2 d x \pi = 4\int^1_0 \frac{1}{1+x^2}dx π=4011+x21dx

//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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值