24小时热门版块排行榜    

查看: 977  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 材料专硕306英一数二 +4 z1z2z3879 2026-03-16 6/300 2026-03-16 19:38 by z1z2z3879
[考研] 277材料科学与工程080500求调剂 +3 自由煎饼果子 2026-03-16 3/150 2026-03-16 14:10 by 运气yunqi
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
[考研] 复试调剂 +3 呼呼?~+123456 2026-03-14 3/150 2026-03-14 16:53 by WTUChen
[考研] 一志愿郑大070303,338分,求调剂 +4 dadawaf 2026-03-10 5/250 2026-03-14 01:20 by lsw010101
[考研] b区环境工程求调剂 +4 Maps1 2026-03-10 6/300 2026-03-14 00:23 by JourneyLucky
[考研] 2026考研调剂+本科延边大学+山东大学+生物化学与分子生物学+有项目经验 +3 ccdsscjy 2026-03-10 3/150 2026-03-14 00:12 by JourneyLucky
[考研] 复试调剂 +9 Copy267 2026-03-10 9/450 2026-03-13 23:45 by userper
[考研] 材料与化工(0856)304求B区调剂 +6 邱gl 2026-03-12 7/350 2026-03-13 23:24 by 邱gl
[考研] 332求调剂 +3 zjy101327 2026-03-11 6/300 2026-03-13 22:48 by JourneyLucky
[考研] 337一志愿华南理工0805材料求调剂 +7 mysdl 2026-03-11 9/450 2026-03-13 22:43 by JourneyLucky
[考研] 308求调剂 +5 是Lupa啊 2026-03-11 5/250 2026-03-13 22:13 by JourneyLucky
[考研] 求材料调剂 085600英一数二总分302 前三科235 精通机器学习 一志愿哈工大 +4 林yaxin 2026-03-12 4/200 2026-03-13 22:04 by 星空星月
[考研] 求材料调剂 +5 隔壁陈先生 2026-03-12 5/250 2026-03-13 22:03 by 星空星月
[考研] 333求调剂 +3 球球古力 2026-03-11 3/150 2026-03-13 21:27 by JourneyLucky
[考研] (081700)化学工程与技术-298分求调剂 +12 11啦啦啦 2026-03-11 35/1750 2026-03-13 21:25 by JourneyLucky
[考研] 【考研调剂求收留】 +3 Ceciilia 2026-03-11 3/150 2026-03-13 20:18 by JourneyLucky
[考研] 08食品或轻工求调剂,本科发表3篇sci一区top论文,一志愿南师大食品科学与工程 +3 我是一个兵, 2026-03-10 3/150 2026-03-13 10:21 by Yuyi.
[考研] 研究生招生 +3 徐海涛11 2026-03-10 7/350 2026-03-12 14:26 by 徐海涛11
[硕博家园] 木虫好像不热闹了,是不是? +4 偏振片 2026-03-10 4/200 2026-03-10 09:51 by longwave
信息提示
请填处理意见