免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3347 | 回复: 7
打印 上一主题 下一主题

如何提高程序的效率? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-08 10:44 |只看该作者 |倒序浏览
最近在做图像处理的程序,在写程序的过程中,发现自己的程序效率低下.
同样一个功能,比方说把一个320*240的图片由RGB模式转换为HSV模式,
自己的程序在P4 2.8的机器上花了6毫秒(注:这还是优化后的,最开始用掉了16.8毫秒),
但是调用opencv的库函数,却只要1.88毫秒。
(注:因为要在DSP上实现,所以不能直接调用opencv的函数,必须自己实现。)
其实把RGB转化为HSV的公式是固定的.
为什么实现起来这么大的差距呢?怎么才能够学到程序优化的本事呢?
请大家指点,小弟在这里先谢谢了!

论坛徽章:
0
2 [报告]
发表于 2007-08-08 12:32 |只看该作者
严格来说我不算程序员,没有资格告诉你怎样才能优化程序。
不过,外行看热闹(你也可以说久病成医或是没见过马儿吃草总见过马儿跑),闲言碎语几句吧。
首先我认为是算法。算法的作用是决定性的,有时甚至是数量级的差别。
其次是并行。并行化的效益是以倍数计。
最后才是编码技巧。涉及到缓存的使用,内存的管理,多维数组的下标引用次序等等。一个老生常谈是“精心设计和编码内层循环”。

论坛徽章:
0
3 [报告]
发表于 2007-08-08 12:37 |只看该作者
原帖由 jianjiandandan 于 2007-8-8 10:44 发表
最近在做图像处理的程序,在写程序的过程中,发现自己的程序效率低下.
同样一个功能,比方说把一个320*240的图片由RGB模式转换为HSV模式,
自己的程序在P4 2.8的机器上花了6毫秒(注:这还是优化后的,最开始 ...

很正常, 很多库函数不是用C开发的, 而是用汇编.
例如也是标准算法的DES函数, 操作系统厂商提供的版本是汇编实现的,性能就比C版本编译出来的速度提高了一倍, 而且目标码的大小也要小很多.

论坛徽章:
0
4 [报告]
发表于 2007-08-08 18:14 |只看该作者
公式既然固定,那楼主还是最好从自己的角度找原因吧,就看楼主有多少年的经验、对计算机的理解有多深了。

论坛徽章:
0
5 [报告]
发表于 2007-08-08 18:28 |只看该作者
改进算法比改用语言更有效

论坛徽章:
0
6 [报告]
发表于 2007-08-08 18:33 |只看该作者
DSP有时候对某些公式有优化,这就是DSP之所以为DSP的原因。
比方说TI的DSP对FFT和IIR滤波就有优化作用。
你应该仔细研读DSP的各条指令,应该能找到特殊的优化方法。

至于你说的opencv,也可能是用了通用CPU的MMX等优化机能。

[ 本帖最后由 Sworder 于 2007-8-8 19:37 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2007-08-08 19:24 |只看该作者
原帖由 zszyj 于 2007-8-8 12:37 发表

很正常, 很多库函数不是用C开发的, 而是用汇编.
例如也是标准算法的DES函数, 操作系统厂商提供的版本是汇编实现的,性能就比C版本编译出来的速度提高了一倍, 而且目标码的大小也要小很多.


性能就比C版本编译出来的速度提高了一倍
~~~~~~~~~~~~~~~~~~~~~~~~~真的假的?

论坛徽章:
0
8 [报告]
发表于 2007-08-08 19:32 |只看该作者
1. 使用好的算法(数量级上的差别)
2. 使用恰当的语言(语言平台的差别)
3. 语言的使用经验和优化技巧
4. 代码运行平台相关的优化
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP