我们得到的很多视频数据(一些解码器的输出或者摄像头的输出等)都使用了一种叫YUV的颜色格式;本文介绍了常见的YUV视频格式(YUY2\YVYU\UYVY\I420\YV12等)到RGB颜色格式的转换,并尝试对转化的速度进行优化; 全文 分为: 《上篇》文章首先介绍了YUV颜色格式,并介绍了YUV颜色格式和RGB颜色格式之间的相互转换;然后重点介绍了YUYV视频格式到RGB32格式的转化,并尝试进行了一些速度优化; 《中篇》尝试使用MMX\SSE指令对前面实现的解码器核心进行速度优化;然后简要介绍了一个使用这类CPU特殊指令时的代码框架,使得解码程序能够根据运行时的CPU指令支持情况动态调用最佳的实现代码;并最终提供一个多核并行的优化版本; 《下篇》介绍YUV类型的其他种类繁多的视频数据编码格式;并将前面实现的解码器核心(在不损失代码速度的前提下)进行必要的修改,使之适用于这些YUV视频格式的解码;阅读全文>
发表于 @ 2008年03月23日 17:12:00|评论(loading...)|收藏
请先参看《YUV视频格式到RGB32格式转换的速度优化 上篇》,本文章将继续成倍的提高其速度! 我们得到的很多视频数据(一些解码器的输出或者摄像头的输出等)都使用了一种叫YUV的颜色格式;本文介绍了常见的YUV视频格式(YUY2\YVYU\UYVY\I420\YV12等)到RGB颜色格式的转换,并尝试对转化的速度进行优化; 全文 分为: 《上篇》文章首先介绍了YUV颜色格式,并介绍了YUV颜色格式和RGB颜色格式之间的相互转换;然后重点介绍了YUYV视频格式到RGB32格式的转化,并尝试进行了一些速度优化; 《中篇》尝试使用MMX\SSE指令对前面实现的解码器核心进行速度优化;然后简要介绍了一个使用这类CPU特殊指令时的代码框架,使得解码程序能够根据运行时的CPU指令支持情况动态调用最佳的实现代码;并最终提供一个多核并行的优化版本; 《下篇》介绍YUV类型的其他种类繁多的视频数据编码格式;并将前面实现的解码器核心(在不损失代码速度的前提下)进行必要的修改,使之适用于这些YUV视频格式的解码;阅读全文>
发表于 @ 2007年11月05日 08:16:00|评论(loading...)|收藏
我们得到的很多视频数据(一些解码器的输出或者摄像头的输出等)都使用了一种叫YUV的颜色格式;本文介绍了常见的YUV视频格式(YUY2\YVYU\UYVY\I420\YV12等)到RGB颜色格式的转换,并尝试对转化的速度进行优化; 全文 分为: 《上篇》文章首先介绍了YUV颜色格式,并介绍了YUV颜色格式和RGB颜色格式之间的相互转换;然后重点介绍了YUYV视频格式到RGB32格式的转化,并尝试进行了一些速度优化; 《中篇》尝试使用MMX\SSE指令对前面实现的解码器核心进行速度优化;然后简要介绍了一个使用这类CPU特殊指令时的代码框架,使得解码程序能够根据运行时的CPU指令支持情况动态调用最佳的实现代码;并最终提供一个多核并行的优化版本; 《下篇》介绍YUV类型的其他种类繁多的视频数据编码格式;并将前面实现的解码器核心(在不损失代码速度的前提下)进行必要的修改,使之适用于这些YUV视频格式的解码;阅读全文>
发表于 @ 2007年10月31日 11:37:00|评论(loading...)|收藏
条件分支是编程中经常使用的基本操作,然而在某些时候它确可能带来严重的性能问题.当前的CPU都能对条件分支做预测(动用了庞大的晶体管资源),如果分支预测正确,那么条件指令一般只需要花费一个CPU周期,而如果预测错误,那么将可能花费几十个CPU周期! 本文将讨论条件分支的一些有效优化方法.阅读全文>
发表于 @ 2007年10月05日 16:58:00|评论(loading...)|收藏
Base64编码是很常用的一种把二进制数据转换为字符串的算法;本文章对Base64的编码函数进行了各种优化尝试,目标是极限编码速度!并对优化过程中使用的方法进行了详细说明(主要使用了查表优化);(附完整测试源代码)阅读全文>
发表于 @ 2007年07月27日 11:09:00|评论(loading...)|收藏
本文首先给出一个浮点数取整的需求,并使用默认的取整方式,然后尝试通过各种方法来优化它的速度;
最终的浮点数取整实现速度甚至达到了初始代码的5倍(是vc6代码的18倍)!阅读全文>
发表于 @ 2007年05月19日 09:55:00|评论(loading...)|收藏
以前参加过几次abp论坛的比赛 http://www.allaboutprogram.com/bb (现在的www.cpper.com/c)
其中的一个竞赛的题目是《文本文件词频查询》,本文章把自己的参赛代码的优化的思路整理出来;
很多时候优化后的版本最高达到了STL实现版本的20倍!阅读全文>
发表于 @ 2007年03月15日 01:40:00|评论(loading...)|收藏
英特尔最近举办了一次多核平台编码优化大赛,我也参加了这次比赛;大赛代码提交阶段已经结束,
所以也可以公开自己的优化过程;
本文章主要介绍了自己参加竞赛过程中,对代码的优化过程;
(正文的补充)
阅读全文>
发表于 @ 2007年01月20日 17:20:00|评论(loading...)|收藏
英特尔最近举办了一次多核平台编码优化大赛,我也参加了这次比赛;大赛代码提交阶段已经结束,所以也可以公开自己的优化过程;本文章主要介绍了自己参加竞赛过程中,对代码的优化过程;阅读全文>
发表于 @ 2007年01月20日 15:45:00|评论(loading...)|收藏
在网上看到一篇文章"托管代码和非托管代码效率的对比" ,作者利用英特尔多核平台编码优化大赛的参考代码分别用非托管c、托管cpp、c#做了个简略的性能测试,托管代码大败;但我觉得他的对比有很多不公平的地方(后面会说明),所以自己也利用参考代码来尝试对比一下原生代码与托管代码的性能; 参与对比的代码: C++、Delphi、C++ CLR、C#、java; 测试结果超出我的预料范围...阅读全文>
发表于 @ 2007年01月18日 11:37:00|评论(loading...)|收藏
随着个人多核CPU的普及,充分利用多核CPU的性能优势摆在了众多开发人员的面前;面对多核CPU,免费的午餐没有了,开发人员必须手工的完成软件的并行化,以从爆炸性增长的CPU性能中获益 文章中简要介绍了并行编程并给出了一个简单的多核计算Demo。阅读全文>
发表于 @ 2007年01月17日 00:54:00|评论(loading...)|收藏
现在的CPU,做乘法是很快的(需要几个CPU周期,每个周期可能启动一个新的乘指令(x87)),但作为基本指令的除法却超出很多人的预料,它是一条很慢的操作,整数和浮点的除法都慢;
本文将给出一些除法的优化方法或替代算法;阅读全文>
发表于 @ 2006年08月25日 10:21:00|评论(loading...)|收藏
文章讨论了 为什么大多数STL的stack的实现中,对于内部的容器默认选择deque容器;并且给出了几个自己按不同想法实现的stack;并进行了简单的性能比较测试; (文章最后给出了一个性能、特性都无懈可击的stack的实现!)阅读全文>
发表于 @ 2005年10月17日 09:52:00|评论(loading...)|收藏