系列文章见
http://blog.csdn.net/housisong<wbr></wbr>/
= 读代码优化-之-Base64编码函数 的总结 =
常用技巧
1.查表替代计算,更大的表
说明:表太大可能不能装入CPU的一级缓存,所以函数运行可能会更慢(常用值8K)
实例:
那么对于这样的代码: output[0]=to_base64char(input[0]>>2);
可以化简为: output[0]=BASE64_CODE[input[0]>>2];
前面的代码中6bit的数据查表可以得到8bit的输出数
那么可以构造一个更大的表,一次使用12bit的数据查表得到16bit的输出数据!
2.多核优化
说明:效果比较明显
实例:
Base64编码函数其实很容易实现并行算法,把数据切割成几段让多个CPU执行就可以了;
速度对比
// base64_encode1_asm 1258
// base64_encode2 702
汇编/平台相关技巧
1.在当前的32比特CPU上一次写入4字节将获得更好的性能;而输入数据的地方,可以先转化成32比特整形数据再做各种复杂的位运算有利于编译器的优化(各个PC平台的差异可能比较大);
2.想法是尽量压缩寄存器的使用,然后多个寄存器就能同时执行多路,增加了指令的并发能力;
3.使用sse和sse2的写缓存优化
说明: 优化写缓冲需要满足的条件是写入的数据量比较大或者需要写入的数据不需要很快就访问,
从而避免了写入的数据被CPU自动缓冲而"污染"缓存;(如果条件不满足,“优化”反而会变成劣化)
= 读代码优化-之-优化条件分支 的总结 =
1.尽量简化循环中分支条件,提高预测的命中率
比如:
一些图像处理算法里(比如模板运算\卷积运算\形态学运算等),经常需要判断边
界像素点,进行特殊处理;可以考略的优化方案是把边界区域和内部区域分开处理;
2.将出现几率高的分支优先处理,从而提高预测准确率
3.合并多个条件来减少条件分支
如: if ( (a0==0) && (a1==0) && (a2==0) ) ...
可以改写为: if ( (a0|a1|a2)==0 ) ...
4.一些比较hack的写法,主要是利用位运算来取消分支
针对不同类的数据生成不同的掩码数据,然后让原数据和掩码参与运算得到想要的结果,从而移除分支;
分享到:
相关推荐
《Java开发手册-代码规范》是一...性能优化:包括如何优化代码的执行效率、减少资源消耗等方面的性能优化规范。 通过遵循《Java开发手册-代码规范》,开发者可以编写出结构清晰、易读易懂、易于维护的高质量Java代码。
优化时间和空间效率,介绍如何优化代码的时间效率和空间效率,读完这一章读者将学会常用的优化时间效率及空间换时间的常用算法,从而在面试中找到最优的解法;面试中的各种能力,本章总结应聘者在面试过程中如何表现...
发布于2013-5-16:本文介绍了Java代码优化的过程,总结了优化Java程序的一些最佳实践,分析了进行优化的方法并解释了性能提升的原因。多角度分析导致性能低的原因并逐个进行优化使得程序性能得到极大提升,代码...
排序运算符可以读所有传入的行进行排序 扫描查询计划的列中指定的聚集索引 利用索引的查找功能从聚集索引中检索行 执行多表联接逻辑操作,嵌套循环联接通常使用索引在内部表中搜索外部表的每一行 从列中指定...
在程序中优化查询而无需改动代码。 作为Oracle SQL经典著作之一,本书为SQL开发人员指明了前行的方向,赋予了他们不断开拓的动力。 作者简介 KAREN MORTON 研究人员、教育家及顾问,Fidelity信息服务公司...
如今我使用 Python 已经很长时间了,但当我回顾之前写的一些代码时,有时候会感到很沮丧。...由此,我总结了多年来自己所编写的 Python 代码的质量变化过程。它们变得更加简洁、健壮、易读。但是什么原因使
代码规范:遵循一定的编码规范,如PEP8(Python)、Google Java Style Guide等,保持代码整洁易读。 异常处理:对可能出现异常的地方进行捕获并给出有意义的错误信息,避免程序崩溃。 RESTful API设计:按照资源...
在LeetCode等平台上,针对特定类型题目进行专题训练,例如,你可以专门花一段时间集中攻克动态规划的问题,然后转至图论相关题目,每个主题完成后都要梳理总结,整理成便于查阅的笔记。 二、比赛策略 题目分析的实际...
业务节点的总结,把常见的UI进行分类,分别抽取其中公有的代码,形成不 同的UI基类。UI工厂综合运用了单据模板,查询模板,打印模板,实现对这 些基本构件的运用的最优化。UI工厂提供了UI相关的常见任务的推荐实现 ...
11.3 配置文件的读/写操作 209 11.4 总结 213 第12章 asp.net底层探秘 214 12.1 asp.net底层之旅 214 12.2 ihttpmodule接口 217 12.3 httpapplication及global.asax 220 12.4 ihttphandler接口 224 12.4.1 ...
今天,无论是重构本身,业界对重构的理解,还是开发工具对重构的支持力度,都与本书最初出版时不可同日而语,但书中所蕴涵的意味和精华,依然值得反复咀嚼,而且往往能够常读常新。 第1章 重构,第一个案例 1.1 ...
手写手写SQL顺序机读顺序总结-SQL解析顺序SQL解析SQLJOINs七种JOIN图解实验:练习1、A、B两表共有2、A、B两表共有+A的独有3、A、B两表共有+B的独有4、A的独有5、B的独有6、AB全有MySQLFullJoin的实现因为MySQL不支持...
[17个软件测试文档]-8性能测试经验总结 http://download.csdn.net/detail/cleopard/8344017 [17个软件测试文档]-7存储转发机制优化系统测试方案及案例 http://download.csdn.net/detail/cleopard/8343997 [17个软件...
[17个软件测试文档]-8性能测试经验总结 http://download.csdn.net/detail/cleopard/8344017 [17个软件测试文档]-7存储转发机制优化系统测试方案及案例 http://download.csdn.net/detail/cleopard/8343997 [17个软件...
学习笔记 博观而约取,厚积而薄发 vue系列 vue2 nextTick原理 keeplive原理 vue3 成分API react系列 钩子 节点系列 前端安全问题 xxs 手写代码系列 手写实现的承诺 性能优化 算法 常用的包收集
例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...