登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
程序
>
讨论一个计算效率的问题
发帖
回复
1
2
3
5468
阅读
23
回复
[
讨论
]
讨论一个计算效率的问题
离线
wudawolf
智者不锐,慧者不傲。
UID :7362
注册:
2008-01-09
登录:
2025-09-27
发帖:
3709
等级:
荣誉管理员
10楼
发表于: 2008-05-03 08:58:50
本人认为第一种方法要快些,原因如下:
#r/5!*3
Y<V$3h
a [ i ] => 表示位置于 a[ i ] [ j ] 的第一个元素(即a [ i ] [ 0 ])的指针
M:dH>
"L!U7|9J
第一种方法中指针是连续移动,而第二种方法中指针是跳跃式移动。
共
2
条评分
casey
rf币
+5
您的回复起提示作用+3~5
2008-05-03
plantice
rf币
+10
积极参与
2008-05-03
离线
plantice
趁年轻,扫扫雪!
UID :10407
注册:
2008-04-03
登录:
2015-12-21
发帖:
729
等级:
荣誉管理员
11楼
发表于: 2008-05-03 11:57:34
看来wudawolf对程序内部的东西很有研究啊!!!并且在编程的时候也很有心。其实很多人也许都知道这个道理,但是真正在编程的时候,就把这些小技巧忘光了。
共
条评分
我是一个拒绝不回帖的人!
离线
wudawolf
智者不锐,慧者不傲。
UID :7362
注册:
2008-01-09
登录:
2025-09-27
发帖:
3709
等级:
荣誉管理员
12楼
发表于: 2008-05-03 12:04:43
谢谢楼主的表扬,I am really flattered.
共
条评分
离线
cem-uestc
UID :9061
注册:
2008-03-07
登录:
2019-01-05
发帖:
2575
等级:
荣誉管理员
13楼
发表于: 2008-05-03 17:11:22
有计算效率的讨论了,^_^。
jf1GYwuW*
P(I%9
关于复数计算的效率,不管Fortan和C语言,从编译原理看,它们编译后的二进制计算代码,也差不多。只是Fortan把复数类型当成内部数据类型,而C当成库函数调用,在Debug版本下,Fortan的复数计算比C快,然而在Release版本下,是没有区别的。
_i7yyt;h
ndDF(qHr
关于数组的分配,Fortan和C语言分配机制不一样。一是分配顺序不一样,Fortan是先列后行,而C语言是先行后列,计算效率的高低与数据分配空间的连续性有关,循环计算中在最里面的循环计算最好安排此循环下标的数组是连续分配的,大家看到一些计算代码是先j后i,有的是先i后j,就是这个原因。如上面斑斑列举的两个循环的计算,如第一个循环是C语言,第二个是Fortan语言,它们的计算效率是一样的。
|P& \C8h
二是分配方式不一样,C语言分配数组是强制分配类型,要分配成功空间后,才能使用。Fortan语言不是强制的,等用到错误空间时才知道错误了,当然这要分配很大的空间才看得出来,以前出现过编译两个工程时,它们的数组有时会发生“干扰”现象。
P8h|2,c%
u@:[ dbJ
另外,Fortan动态数组分配方式比较死板,只能按固定的方式分配。而C语言更灵活,我测试过用C语言灵活分配三维数组的计算比Fortan快1/3,原理就是上面分析的,如分配数组是连续空间计算效率最高。
XaE*$:
cy?#LS
欢迎讨论这方面的问题
共
1
条评分
plantice
rf币
+20
你的回复比较详细+5~10
2008-05-03
欢迎光临
http://www.mwtee.com/home.php?mod=space&uid=13535
离线
plantice
趁年轻,扫扫雪!
UID :10407
注册:
2008-04-03
登录:
2015-12-21
发帖:
729
等级:
荣誉管理员
14楼
发表于: 2008-05-03 20:31:48
弱弱的问一句,Cem-uestc所说的debug版本和release版本到底有啥区别?我只知道,如果是VC的debug版本,就需要安装有VC才能运行debug程序。
0:I<TJ~P
我以前编过一个几万行的程序,过程中一直没有release过,到最后,debug版是没有问题,但是release的时候,却出现了几百个错误,郁闷死我了,干脆就不release了!结果被好多人骂,说我的exe程序太傻,必须安装VC才能运行。
共
条评分
我是一个拒绝不回帖的人!
离线
cem-uestc
UID :9061
注册:
2008-03-07
登录:
2019-01-05
发帖:
2575
等级:
荣誉管理员
15楼
发表于: 2008-05-03 21:29:14
Debug是测试版本,没有优化的编译程序,并且包含详细的调试信息,其他人可以根据调试信息推测你整个编程内容。而Release版是最终版本,是经过优化后的程序,程序运行速度是Debug版本的2~3倍,并且不包含调试信息,文件很小,可能只有十分之一。
yVGf[~X
你以前的Debug程序可能使用MFC类库,主要是基于界面编程吧。这个问题在开发过程中,把VC设置中Releas版本的调试设置,可以避免这些问题出现,纯计算代码不会出现这个问题。
共
2
条评分
casey
rf币
+5
你的回复比较详细+5~10
2008-05-03
plantice
rf币
+5
您热心助人+2
2008-05-03
欢迎光临
http://www.mwtee.com/home.php?mod=space&uid=13535
离线
plantice
趁年轻,扫扫雪!
UID :10407
注册:
2008-04-03
登录:
2015-12-21
发帖:
729
等级:
荣誉管理员
16楼
发表于: 2008-05-04 13:40:48
我的那个程序本来是射线追踪的代码,起初都没有问题,加上了界面之后,就不能release了。
共
条评分
我是一个拒绝不回帖的人!
离线
cem-uestc
UID :9061
注册:
2008-03-07
登录:
2019-01-05
发帖:
2575
等级:
荣誉管理员
17楼
发表于: 2008-05-04 16:33:37
射线追踪法难不?
共
条评分
欢迎光临
http://www.mwtee.com/home.php?mod=space&uid=13535
离线
plantice
趁年轻,扫扫雪!
UID :10407
注册:
2008-04-03
登录:
2015-12-21
发帖:
729
等级:
荣誉管理员
18楼
发表于: 2008-05-05 00:08:20
射线追踪不难,就是繁!算法考虑不全面就容易出错。唯一有点技术含量的就是曲面的表面绕射寻迹。能查到的文章不少,但是都不怎么通用。
共
条评分
我是一个拒绝不回帖的人!
离线
cem-uestc
UID :9061
注册:
2008-03-07
登录:
2019-01-05
发帖:
2575
等级:
荣誉管理员
19楼
发表于: 2008-05-05 08:36:41
回 18楼(plantice) 的帖子
有空学习学习
共
条评分
欢迎光临
http://www.mwtee.com/home.php?mod=space&uid=13535
发帖
回复