24小时热门版块排行榜    

查看: 1215  |  回复: 10

lixy1217

木虫 (著名写手)

[求助] 求C语言基本运算的运行时间分析

由于偶是计算数学专业的,对计算时间比较在意,所以很想知道在C中各种基本运算的计算量差别大小,可是对计算机了解较少,而且现在也不可能有时间去研究机器语言,所以希望在此得到高人相助

包括整型、浮点型的 +  -  *  /  =  +=   -=   *=   /=, if  和  for  还有函数调用这些流程控制所占用时间,不需要多么精确地知道其差别,只想知道在运行时间上谁比谁多一点,谁跟谁差不多,或者谁比谁大的多,或者谁跟谁比可忽略不计

自己做过一些试验,但由于干扰因素太多,很多信息都无法测量出来,但也得出了一些结论,比如,四则运算中  加法与减法一样,乘法稍微多一点,除法多很多,另外,如果一个变量进行值得改变,那么它在下一次计算中计算时间明显减少。希望这些能够抛砖引玉,了解更多相关内容
回复此楼
偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文俊点点

木虫 (著名写手)

【答案】应助回帖


xzhdty(金币+1): 简单明了 2011-11-03 17:00:21
lixy1217(金币+1): 我确实是百度和谷歌了的,可没找到我想要的信息,如果你百了很多,那能否推荐个链接? 2011-11-03 22:31:33
百度一下  谷歌一下  这些东西很多的·······
我白了一下很多的········
这是你所拥有的时间·····这是你所能改变的生活·········
2楼2011-11-03 12:39:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

【答案】应助回帖

★ ★
lixy1217(金币+9): 这个问题看起来貌似很复杂啊~ 2011-11-04 09:46:48
余泽成(金币+2): 谢谢参与应助! 2011-11-08 17:56:03
如果想极端优化,楼主需要的是一张列有时钟周期数的汇编指令表,针对某个你使用的特定的CPU。不然就看分割线以下的内容。

单纯地对C语句进行分析是显然不行的,编译器在背后做的大量的优化工作有时候会让你很惊讶。像整型数*2会被优化为左移这种事情早就稀松平常了,复杂得多、匪夷所思的优化在现代编译器中比比皆是。程序实际的走法,可能和你原来设计的是不一样的,编译器只保证结果是对的(=,=虽然偶尔有BUG不过确实这是追求的目标)。

优化之路还没在计算时钟周期数这里结束,怎么产生让CPU流水线最大效益化(像Intel特地还出了The Software Vectorization Handbook还告诉程序员这方面的一点事情),也是追求极致效果的程序员需要学习的

=========以上是比较极端的做法=========

其实呢,主导计算速度的东西,是“算法”啊!再者就是代码的可读性的权衡的问题。现在因为设备的计算能力已经提高很多,设计C程序的时候一般不会考虑太细的优化问题了。所以其实楼主不用纠结太多,一般不会有数量级上的时间差的。
3楼2011-11-04 09:20:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

算法不好的话,JAVA都比C快的哦...
4楼2011-11-04 09:22:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
3楼: Originally posted by sudo at 2011-11-04 09:20:27:
如果想极端优化,楼主需要的是一张列有时钟周期数的汇编指令表,针对某个你使用的特定的CPU。不然就看分割线以下的内容。

单纯地对C语句进行分析是显然不行的,编译器在背后做的大量的优化工作有时候会让你很惊 ...

汇编语言我暂时肯定没时间去研究,其实我的目的也很单纯,我就想知道C程序关于浮点型变量的一般的加减乘除运算从运行时间上有没有倍数上的差别,这样以后在计算编程时就可以稍加注意一下了。
偶尔敞开心扉,世界将不再孤独
5楼2011-11-04 09:46:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-11-05 15:38:36
引用回帖:
5楼: Originally posted by lixy1217 at 2011-11-04 09:46:13:
汇编语言我暂时肯定没时间去研究,其实我的目的也很单纯,我就想知道C程序关于浮点型变量的一般的加减乘除运算从运行时间上有没有倍数上的差别,这样以后在计算编程时就可以稍加注意一下了。

具体的情况和CPU是有关的
不过大概情况的话,基本可以这么认为:

对于浮点数:

加减法的时间一致,
乘法的时间和加减法在同一数量级上(像P1和PMMX的话,FMUL和FADD和FSUB用的时钟周期是一样的,不过在PPro、P2和P3上,就比加减法要略大),
除法的时间比前面三者大一个数量级左右
6楼2011-11-04 10:33:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhougc

木虫 (正式写手)

黑社会老大


jjdg(金币+1): 感谢参与 2011-11-08 00:21:20
Linux下有很多开源工具可以检测代码执行和函数调用所占用的时间,perf就是其中一个。而且一般RedHat或者Suse都是默认安装的,如果你在Linux环境下开发的话可以man一下,很简单,而且结果很精确。
--------------------------------------------------------------------------看着我表情呆滞的头像,记住我!这个社会已经让我没办法笑出来.请各位版主按时缴...
7楼2011-11-07 22:33:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-11-10 13:09:56
我想LZ想知道的是ALU的计算效率。如果单从语言,特别是非汇编语言(就算是汇编语言一也一样)是没法比较运算符的效率的。现代CPU架构的复杂性,已经很难理论评估计算时间了。如sudo所说,这里面包含了太多细节。

粗略估计的话,整数的加减运算参考CPU的频率,乘除大概是几个CPU周期。浮点运算更复杂一些,开使用了什么FPU。

现在如果在乎计算效率的话,不是在乎每个周期做多少运算(当然高效的算法是最重要的),而是优化代码流程,达到满流水线和高cache命中。减少内存访问以及其他的IO。

不过我觉得计算数学的话,还是关注大O和并发/并行计算以及分布式计算更重要吧。
8楼2011-11-10 09:57:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-11-10 13:09:42
如zhougc所说,profile比理论估计要重要的多。
9楼2011-11-10 09:58:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhyincumt

铜虫 (小有名气)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助,欢迎常来程序语言版! 2011-11-10 21:45:32
尽量使用指针运算~循环语句(for…)这样能节省大量计算时间、本人刚学完C~

[ 发自手机版 http://muchong.com/3g ]
有梦想就有可能、有希望就不要放弃
10楼2011-11-10 15:06:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lixy1217 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 讨论贴:好本子一定会被打招呼的淘汰吗 +40 ioe3937 2024-05-27 50/2500 2024-06-02 12:12 by ECOblance
[考博] 导师不让硕转博,让我去国外读博,能理解吗? +12 萧山幽谷 2024-05-29 20/1000 2024-06-02 12:01 by yuan0806
[考博] 求25博导,金属增材制造方向 +3 22机械 2024-06-01 3/150 2024-06-02 11:17 by Napoleonsky
[硕博家园] 讨厌酒桌文化 +7 hahamyid 2024-05-31 7/350 2024-06-02 10:01 by 御龙老大
[考博] 申请2024或2025年博士研究生 +5 嘟噜嘟1 2024-05-29 12/600 2024-06-01 22:36 by 嘟噜嘟1
[硕博家园] 每天学术时间不能保证,能保证的只有: +10 hahamyid 2024-05-27 10/500 2024-06-01 21:11 by 小小芝麻影
[考博] 24年博士招生 +8 abinit432 2024-05-27 10/500 2024-06-01 17:38 by czp97
[硕博家园] 论大家对6070后普通教授导师的看法 +6 SNaiL1995 2024-05-28 10/500 2024-06-01 16:55 by 篮球易飞
[论文投稿] 没收到邮件 10+3 荣小撇 2024-05-31 7/350 2024-06-01 15:04 by arthas_007
[论文投稿] 求Sci期刊推荐 10+4 甄小鱼 2024-05-30 7/350 2024-06-01 10:41 by bobvan
[基金申请] 博后特别资助状态变化 +24 随梦而飞2017 2024-05-30 35/1750 2024-06-01 10:10 by 青岛阳仔
[考博] 广东以理材料系碳点与功能材料课题组 — 2博士名额 / 科研助理 +4 小城夜很美 2024-05-27 11/550 2024-05-31 21:26 by 小城夜很美
[文学芳草园] 物是人非 +4 myrtle 2024-05-30 4/200 2024-05-30 15:05 by mapenggao
[论文投稿] 审稿专家比较坚定的让补充实验,但实在没法补充实验,修回还有希望吗? (EPI+1) 3+3 qweasd12345 2024-05-29 6/300 2024-05-30 08:11 by qweasd12345
[博后之家] 2024公派博后申请 +4 326lhpqk 2024-05-27 5/250 2024-05-29 20:03 by @古月胡
[论文投稿] 高手朋友推荐比较容易投稿和录用的SCI期刊,不投稿收费SC,对分区没有要求 5+3 xintangren 2024-05-28 4/200 2024-05-29 10:46 by xintangren
[论文投稿] 核心初审被拒,理由是“选题的意义不明确,文章写得不像是科技论文”,怎么改 5+3 工藤雷花樱 2024-05-27 8/400 2024-05-29 10:09 by topedit
[论文投稿] EI学报,一审返修后,为啥不再送审,直接终审中? +4 qweasd12345 2024-05-27 6/300 2024-05-29 00:02 by dut_ameng
[基金申请] E05青基有几个评审 +4 KYXY123 2024-05-28 4/200 2024-05-28 19:25 by popt2t
[论文投稿] EI期刊审稿人邮箱问题 5+3 shier妈妈 2024-05-27 4/200 2024-05-28 14:53 by topedit
信息提示
请填处理意见