找回密码
 注册
查看: 1470|回复: 7

在即将离开工作了四年的软件业前

[复制链接]
发表于 2005-8-1 13:27:44 | 显示全部楼层 |阅读模式
即将离职 成功的话 将来再也不会做纯软件的东西了 闲来无事写点东西 为了不重复 好像只能写这些个了
代码优化问题:

1.书写代码的时候要仔细考虑数据类型的大小
避免假设int和long具有相同的长度,因为编译器会扩展long字段
定点乘法使用short作为乘法输入,因为现在只有实现的16*16的乘法器
使用浮点运算的时候,必须考虑cpu是否支持浮点,加入编译开关

2.编译代码的依赖性
帮助编译器确定代码的独立性
如代码:
void sum(short *sum, short *in1, short *in2, int N)
{
int i;
for(i=1;i<N;i++)
  sum = in1+in2
}
在sum和in1,in2之间存在不确定的依赖性。编译器将要求流水线的下一次读取在sum的本次写入之后再开始。
如果改成:void sum(short *sum, const short *in1, const short *in2, int N)
则编译器可以确认,下一次的取数据可以在计算周期中开始。

3.使用编译器的内部函数实现某些处理
除了加减以外事实上现代的处理器多少都有一些独特的计算支持,比如说两个16比特加减和提取绝对值。注意你在使用的处理器,使用好这些内部定义的额外指令,如双16比特加减很明显可以让你减少一半的处理时间。

4.注意内存访问周期
在一个循环的读取中往往需要注意。这个问题有多个方面:一是你使用的处理器是否支持dma这样的方式。二是你使用的处理器数据带宽如何,对32位带宽的处理器使用俩个周期去分别读取16位的数据就很不明智了。三是你的处理器在一个周期内访问内存几次,对于那种单周期多次访问的处理器,不妨修改你的循环计数方式,充分让处理器在周期内访问存储器。

5.平行的代码
特别针对多处理单元和带时延的处理
多个单元可以同时进行加减和取数。一个时延的取数操作可以和其他单元的数个加减同时执行。
特别例子,一个循环的取数+计算的代码,取数的同时可以在并行单元进行上一次的计算和跳转。

6.软件流水线
同样基于多处理单元
第一步绘制迭代间隔表,其竖行是可使用的处理单元,横行是处理器周期,内容是各指令。当前的横行长度表现了当前的迭带时间。确定最小的迭带时间,一般来说处理单元的使用,指令依赖性和指令的时延决定了可能的最小迭带时间。确定完毕后,保持原有的处理指令,将原有指令向右平移一格,表示软件流水线中开始提前处理的下一个周期的内容。继续这样做,直到表格的最后一个周期的处理单元被充分使用。书写代码的时候,前面的所有周期单独写出,最后一个周期作为循环体。
如果需要排除循环末端的无效指令只要在绘制表格的时候扩展一倍,然后将第二个迭带周期内显示的处理在循环之外单独写出。注意循环周期数的正确计算。

7.使用原始代码环减少软件流水线的代码量
基本思路:那些单独书写的处理和完整的循环体处理的差异可以用一些预先初始化寄存器来掩盖:0+0=0 && 0-0=0
注意循环周期数的正确计算。
发表于 2005-8-1 17:03:55 | 显示全部楼层
不就读研吗,二年后不定你又不得不自己开软件这行。
回复

使用道具 举报

 楼主| 发表于 2005-8-1 17:13:28 | 显示全部楼层
我一开始学的就是电路 见鬼的跑出来让我莫名其妙的干了3年软件
这回回学校还是读电子的研 打定主意 什么破公司再骗我去做软件 我绝对不干!
---- 除非已经没饭吃了
回复

使用道具 举报

发表于 2005-8-1 17:16:47 | 显示全部楼层
偶也有想法去做机械,感觉高、精、尖的重工业在中国还是朝阳产业!
回复

使用道具 举报

发表于 2005-8-2 07:00:01 | 显示全部楼层
好文!可否允许小弟在 CSDN 转贴?
回复

使用道具 举报

发表于 2005-8-2 22:11:16 | 显示全部楼层
………………………………………………………………………………
怪不到wsm的代码优化都是从硬件角度考虑的……
回复

使用道具 举报

 楼主| 发表于 2005-8-3 08:52:19 | 显示全部楼层
从软件角度看的优化文章太多 不好意思多说了
回复

使用道具 举报

发表于 2005-8-7 10:28:33 | 显示全部楼层
电子研出来还是很多要搞软件开发的,如果你还是想搞应用研发的话。硬件现在也都是编程,布线pcb, 芯片开发soc,等等。当然这些都需要硬件知识了。

软件要与工程专业相结合产生更强大的拓展和应用,也是我们搞工程的人的一个发展方向。比如开发各种专业软件,需要的是软件和专业知识的结合。

[quote:efac880629="wsm"]我一开始学的就是电路 见鬼的跑出来让我莫名其妙的干了3年软件
这回回学校还是读电子的研 打定主意 什么破公司再骗我去做软件 我绝对不干!
---- 除非已经没饭吃了[/quote]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-8 02:50 , Processed in 0.026522 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表