C语言和fortran 哪个快?(加急!)想找慢的原因!

yaoyaoflyfreely 2010-06-12 02:02:52
条件:
1、一段fortran程序,只是简单的翻译成C程序,发现C程序要慢4倍

2、只用到一维数组,数组很大,4万多个数

3、C语言中用了很大的栈保留空间,防止堆栈溢出

想知道为什么C会慢那么多倍的原因。
...全文
1526 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2010-08-19
  • 打赏
  • 举报
回复
不如直接贴点代码?
有些东西不是说直接翻译就好的,你把“jiong”翻译成英文试试?
  • 打赏
  • 举报
回复
性能优化是个非常复杂的问题。
yzx714 2010-06-12
  • 打赏
  • 举报
回复
Fortran就像一辆速度非常快的赛车,但前提是赛道非常的平坦且笔直。。。
CCCCCCCCCCCCCCC 2010-06-12
  • 打赏
  • 举报
回复
1.理论上Fortran做科学计算要比C快,因为Fortran本身就是为科学计算而生,自身的诸多特性专门针对科学计算涉及的。

2.具体到某个科学计算问题,Fortran不是都会比C快,在很多科学计算问题上,两者性能相当。

3.Fortran和C程序谁快,性能上差多少,跟你Fortran和C的水平有关,也跟你科学计算的理解和掌握程度有关。
2010-06-12
  • 打赏
  • 举报
回复
统一用 Intel 编译器试试。

很有可能是翻译没做好。

对 Fortran 不熟,不过印象中 Fortran 似乎支持数组间的运算操作,这方面优化起来的确比 C/C++ 方便。
Fortran 和 C 的多维数组排列方式不同,用 Fortran 的方式写 C 的数组有可能有部分效率损失。不过区区几万个数,问题应该不大,可以全部放在 cache 里面。

另外,无代码无真相……
yaoyaoflyfreely 2010-06-12
  • 打赏
  • 举报
回复
编译器都是 intel的
fortran 95

c是VS2008自带的C++编译器。


目前最新情况是 fortran 比 C 快1倍。(realse模式下)


2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yaoyaoflyfreely 的回复:]
2、快的原因我想是C的优化能力比fortran的强~
[/Quote]
编译器是什么?
不管编译器谈“优化能力”就是扯淡……
2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 taodm 的回复:]

那就把题目改成“C语言和fortran 哪个快?(加急!)想找快的原因!”
[/Quote]
yaoyaoflyfreely 2010-06-12
  • 打赏
  • 举报
回复
to taodm:

1、我发现不能改题目和内容

2、快的原因我想是C的优化能力比fortran的强~
向立天 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 taodm 的回复:]
那就把题目改成“C语言和fortran 哪个快?(加急!)想找快的原因!”
[/Quote]
呵呵
taodm 2010-06-12
  • 打赏
  • 举报
回复
那就把题目改成“C语言和fortran 哪个快?(加急!)想找快的原因!”
yaoyaoflyfreely 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 yaoyaoflyfreely 的回复:]
条件:
1、一段fortran程序,只是简单的翻译成C程序,发现C程序要慢4倍

2、只用到一维数组,数组很大,4万多个数

3、C语言中用了很大的栈保留空间,防止堆栈溢出

想知道为什么C会慢那么多倍的原因。
[/Quote]






补充下:
我用reasle模式下 速度 居然是C的更快了!!!


我彻底崩溃~






向立天 2010-06-12
  • 打赏
  • 举报
回复
fortran快这是肯定的
不过慢这么多
你怎么翻译的
我的意思是说
手动
还是通过什么工具
2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yaoyaoflyfreely 的回复:]
to taodm:您误解了~~ 我的意思是没有优化。 时间是内部测得~
[/Quote]
某些编译环境下 debug 绝不仅仅是“没有优化”这么简单。
z569362161 2010-06-12
  • 打赏
  • 举报
回复
以 Fortran95 为标准,它比 C/C++、Java 更适合计算密集型程序的理由如下:
1. 简单易学,初学者也可以写出能被充分优化的源程序;
2. 严格的语法定义使编译器可以做出非常高效的优化;
3. 原生支持数组整体运算,在IMSL数学库的支持下可以写出诸如这样的表达式:
Y= A .x. Y ! A矩阵乘以向量Y,然后赋值给Y
Y= A .ix. X + B ! A矩阵的逆乘以向量X,再加上矩阵B,然后赋值给向量Y
4. 如果使用的是数组整体运算,那么编译器可以自动进行SMP并行化;
5. 原生支持复数数据类型及相应的运算;
6. 由于语法严格,编译器可以给出相当有价值的警告信息,便于调试;
7. 历史积淀下来现成的函数库和例程非常非常多,因为Fortran是第一种高级语言;
yaoyaoflyfreely 2010-06-12
  • 打赏
  • 举报
回复
to taodm:您误解了~~ 我的意思是没有优化。 时间是内部测得~
mLee79 2010-06-12
  • 打赏
  • 举报
回复
C比fortran慢20%左右很正常, 超过了就很不正常..
DEBUG版的速度测试没有意义...
z569362161 2010-06-12
  • 打赏
  • 举报
回复
fortran为什么比C快
taodm 2010-06-12
  • 打赏
  • 举报
回复
倒!硬译也就算了,还debug模式。你这不是浪费大家时间么。
yaoyaoflyfreely 2010-06-12
  • 打赏
  • 举报
回复
to taodm :C的程序完全是按照fortran' 翻译过来的,没有任何算法上的改变。几乎一样。


to lylm:C和fortran均是在debug 的、没有优化模式下进行的。

加载更多回复(3)

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧