码迷,mamicode.com
首页 > 编程语言 > 详细

C++ openmp并行程序在多核linux上如何最大化使用cpu

时间:2017-10-02 10:10:19      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:ogr   代码   blank   去掉   baidu   ram   需要   strong   cbo   

以上代码中,#pragma omp parallel for

这一行的作用即是调用openmp的功能,根据检测到的CPU核心数目,将for (i = 0; i < 1000000000; i++)这个循环执行过程平均分配给每一个CPU核心

去掉#pragma omp parallel for这行,则和普通的串行代码效果一致。

注意,要使用openmp功能,在编译的时候需要加上-fopenmp编译参数。

以下是两种编译搭配两种代码出现的4种结果,可以很直观地看到效果:

1、代码里含有#pragma omp parallel for,编译参数有-fopenmp

 

Endys-MacBook-Pro:Desktop endy$ vi test.c 

 

Endys-MacBook-Pro:Desktop endy$ gcc-6 test.c -o test -fopenmp

 

Endys-MacBook-Pro:Desktop endy$ ./test 

 

Program costs 50202611.00 clock tick.

 

2、代码里含有#pragma omp parallel for,编译参数没有-fopenmp

 

Endys-MacBook-Pro:Desktop endy$ gcc-6 test.c -o test

 

Endys-MacBook-Pro:Desktop endy$ ./test 

 

Program costs 4068178.00 clock tick.

3、代码里没有#pragma omp parallel for,编译参数有-fopenmp

 

Endys-MacBook-Pro:Desktop endy$ vi test.c 

 

Endys-MacBook-Pro:Desktop endy$ gcc-6 test.c -o test -fopenmp

 

Endys-MacBook-Pro:Desktop endy$ ./test 

 

Program costs 4090744.00 clock tick.

4、代码里没有#pragma omp parallel for,编译参数没有-fopenmp

 

Endys-MacBook-Pro:Desktop endy$ vi test.c 

 

Endys-MacBook-Pro:Desktop endy$ gcc-6 test.c -o test

 

Endys-MacBook-Pro:Desktop endy$ ./test 

 

Program costs 4170093.00 clock tick.

 

可以看出,只有在情况1下,openmp生效,其他3种情况下,均为单核运行,2、3、4结果较为接近,而1的运行结果大约相差25%。

值得注意的是,使用多核心的case 1竟然比单核的其他3种case慢了25%,原因是在这种单一的循环运算中,并行分配CPU任务的指令比直接执行下一个循环指令的效率更低。所以并不是用并行运算就一定能够提高运算效率的,要根据实际情况来判断。

C++ openmp并行程序在多核linux上如何最大化使用cpu

标签:ogr   代码   blank   去掉   baidu   ram   需要   strong   cbo   

原文地址:http://www.cnblogs.com/XDJjy/p/7619737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!