24小时热门版块排行榜    

查看: 1099  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +37 医学老男孩 2026-08-13 86/4300 2026-08-18 00:18 by longsantaizi
[基金申请] filecode=后面第一个是大写字母 +8 wangze12014 2026-08-14 10/500 2026-08-17 17:05 by xter9665
[基金申请] 时间戳变了,能看出什么问题? +4 基诺咪客 2026-08-17 4/200 2026-08-17 16:10 by Vivilian
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +12 Ldrop2023 2026-08-13 15/750 2026-08-17 15:02 by 小豌豆_发芽
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[基金申请] 时间戳又变了8-15 +13 archvillain 2026-08-15 25/1250 2026-08-16 20:13 by zhaosm1982
[基金申请] 2027广东省杰青 +3 奶牛小黑 2026-08-15 6/300 2026-08-16 20:07 by 奶牛小黑
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +3 Tide man 2026-08-14 3/150 2026-08-16 17:47 by jurkat.1640
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[基金申请] 有时候,自然基金真的不能太认真 (我的申报经验) +10 majunge000 2026-08-11 12/600 2026-08-16 08:18 by xli1984
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 分享一下我之前已中青C的计划书的filecode +4 布布和一二 2026-08-11 5/250 2026-08-13 12:56 by cratir
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
信息提示
请填处理意见