24小时热门版块排行榜    

查看: 1089  |  回复: 1

fmying

银虫 (小有名气)

[求助] OpenMP并行测试算例,是什么影响了C和FORTRAN的运行效率? 已有1人参与

最近在看OpenMP并行编程,一开始只是想学习一下C和FORTRAN的并行语法,于是做了一个测试:矩阵相乘C=A*B。其中A,B,C都是一个NxN的方阵。
我用C和FORTRAN分别编写了程序,并加入了OpenMP的并行语法。测试平台如下:
OS:Ubuntu 14.04 x86_64 GCC 4.7.3 GFORTRAN 4.7.3
RAM:8GB
CPU:Intel(R) Core(TM)2 Quad CPU    Q9400  @ 2.66GHz 一共4核心

程序计时测试: time omp.exe -d 1000
其中omp.exe是编译好的程序,1000表示1000x1000方阵(矩阵大小)
测试程序用小规模矩阵测试证明计算结果正确可靠。并行统一采用全部4核心并行,用top命令查看确认满负荷运行。

测试结果:
如果编译时不加入-fopenmp选项,则并行语法不起作用,程序为普通串行程序。此时测试结果为:
C:
real        0m9.047s
user        0m9.034s
sys        0m0.004s

FORTRAN:
real        0m10.022s
user        0m10.012s
sys        0m0.000s

real 一项就是程序实际执行时间。可以看到,虽然C略有优势,但是总体差别不大。

接下来,编译时加入-fopenmp打开并行算法,此时测试结果为:
C:
real        0m3.128s
user        0m12.314s
sys        0m0.012s

FORTRAN:
real        0m5.185s
user        0m20.465s
sys        0m0.016s

C比FORTRAN快了好多,将近一倍的速度差。

之后,我为了进一步确认,编写了第三个程序。在这个程序中,我先用C计算A*B,然后用C调用FORTRAN的subroutine再算一遍,就是C和FORTRAN的混合编程。C和FORTRAN的计算部分用C的time函数分别计时(只能精确到秒)。编译时开启并行算法。此时的测试结果意外变为:
C部分:3秒
FORTRAN部分:2秒
程序总运行时间(time命令计时):
real        0m5.486s
user        0m21.644s
sys        0m0.020s

这个结果表明,用C调用FORTRAN模块的效率不仅比原生FORTRAN程序高,甚至高过了原生C程序?
上网查了一下,发现对比C和FORTRAN的讨论很少,深度分析的更少。我很想知道这是为什么。是什么影响了这三个程序的执行效率,我们在编写程序的时候这方面应该注意些什么。
我将我的测试程序的源代码打包附上。里面有三个目录:c,fortran 和 hybrid,分别表示C程序,FORTRAN程序和混合编程程序。欢迎大家测试。
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : parallel.zip
  • 2014-12-25 15:34:42, 4.45 K

» 收录本帖的淘帖专辑推荐

source

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

上善若水
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

getengqing

木虫 (正式写手)

【答案】应助回帖

Fortran的运行效率本来就比C差,很多做并行的都会把它改成C程序
一起交流学习/分享优秀资源
2楼2015-11-18 16:58:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fmying 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 基金中了 +14 laoda193707 2026-08-06 14/700 2026-08-08 00:23 by 实验小白ha
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 娱乐 +6 Tide man 2026-08-03 6/300 2026-08-07 22:40 by 铁帽子农民
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] filecode与中标关系的预测 +3 布布和一二 2026-08-07 3/150 2026-08-07 15:09 by gltch
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[论文投稿] 十年后又回来了,论文投稿求助 +4 哈哈114477 2026-08-01 4/200 2026-08-07 14:39 by jgy194592
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 7/350 2026-08-07 13:11 by 医学老男孩
[基金申请] 关于豆爷回答的JTJC与%2F数量 +4 yang182083 2026-08-06 6/300 2026-08-07 12:43 by 虫友是什么虫
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 4/200 2026-08-05 09:59 by lfy8008
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 面上提前没消息,有中的吗 +14 archvillain 2026-08-02 18/900 2026-08-04 14:42 by archvillain
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见