
数学&优化技巧
文章平均质量分 93
zyl910
这个作者很懒,什么都没留下…
展开
-
[Color]深入学习YUV色彩模型 V1.1
File: StudyYUV.txtName: 深入学习YUV色彩模型Author: zyl910Version: V1.1Updata: 2006-5-28 最近突然又对图形学有了兴趣,翻出了多年前学习图形学的笔记,感触良多。于是将它们整理好发了上来。一、基础 RGB转YUV的转换是这样的:[Y] = [ 0.299 0.587 0.114原创 2006-05-25 00:31:00 · 8147 阅读 · 2 评论 -
深入探讨用位掩码代替分支(4):VC2010速度测试
前面我们用VC6测试了位掩码代替分支的速度。VC6是1998年发售的,离现在有14年了。在14年里,Intel与AMD的CPU都换了好几套微架构了,VC6编译器很可能无法充分发挥它们的性能。而且,从2003年AMD推出了64位处理器开始,现在64位系统越来越普及,我们希望测试64位下的性能。 于是选择最新的VC系列编译器——Visual C++ 2010,它是2010年发售的,支持x64平台原创 2012-03-28 16:41:25 · 1753 阅读 · 0 评论 -
深入探讨用位掩码代替分支(1):利用带符号移位生成掩码
几年前我写了一篇“优化分支代码——避免跳转指令堵塞流水线”(http://blog.youkuaiyun.com/zyl910/article/details/1330614)。因当时是整理笔记,有些粗略。这几年又有了新的心得,故决定深入探讨,顺便回答网友评论。 housisong(http://blog.youkuaiyun.com/housisong)提到了用利用带符号移位生成掩码——(假设n是32bit有原创 2012-03-12 17:09:22 · 2510 阅读 · 2 评论 -
深入探讨用位掩码代替分支(5):C#2010速度测试
前面我们测试了C语言这样纯编译型语言。那么对于像C#这样由虚拟机执行的语言,“位掩码代替分支”法是否也有效果呢?于是本文对此进行探讨。一、移植要点 C#的语法与C语言很相像,多数代码可以直接用,但要注意以下几点。1.1 unsafe——不安全上下文 C#虽然支持指针,但必须在unsafe——不安全上下文 中才能使用。 要使用unsafe,必须先配置项目属性,允许不安全代码原创 2012-03-29 17:15:48 · 2174 阅读 · 0 评论 -
深入探讨用位掩码代替分支(6):VB6速度测试
前面我们测试了C系列语言,验证了位掩码算法的确实性能不错。那么对于Basic系列语言,该算法的效率怎样呢?于是本文对此进行探讨。 VB.Net与C#一样,也是由.Net虚拟机执行的,没有多大的测试价值。所以我决定测试VB6。一、移植要点 VB6的功能与C系列语言差很多。很多地方需要换另一种方法去实现,甚至不能实现。 要点有——1.VB6不支持控制台程序,只支持窗口程序。所原创 2012-03-30 16:53:32 · 4138 阅读 · 1 评论 -
深入探讨用位掩码代替分支(2):汇编代码分析
查看编译器生成的汇编代码,有助于我们分析程序的性能。1 让VC6输出编译的汇编代码 用VC6打开前一篇文章(http://blog.youkuaiyun.com/zyl910/article/details/7345655)的工程“noifCheck.dsw”。 首先需要配置项目设置——1.点击菜单栏 “工程”->“Project Settings”打开“Project Settings”原创 2012-03-21 15:20:56 · 1580 阅读 · 2 评论 -
深入探讨用位掩码代替分支(7):MMX指令集速度测试
前面我们测试了高级语言做饱和处理的性能。其实,对于这样的大批量数据处理,使用SIMD(Single Instruction Multiple Data,单指令多数据流)技术能极大的提高性能。MMX指令集是目前x86平台上覆盖最广的SIMD指令集,于是本文对它进行探讨。 本文致力于解决以下问题——1.MMX指令集是什么?2.如何阅读Intel/AMD的手册?2.如何运用MMX指令集原创 2012-04-09 23:08:54 · 2587 阅读 · 0 评论 -
深入探讨用位掩码代替分支(8):SSE指令集速度测试
在上一篇测试了MMX指令集,这次我们来测试SSE指令集。说的更精确一点,是测试SSE2指令集。 本篇致力于解决以下问题——1.SSE/SSE2指令集是什么?2.如何阅读Intel/AMD的手册?3.如何运用SSE指令集?如何将MMX代码升级为SSE代码。4.如何在VC++6.0这样的高级语言编译器中使用SSE指令集?一、简介 1999 年 Intel 推出了第 1原创 2012-04-12 22:30:16 · 3306 阅读 · 0 评论 -
优化分支代码——避免跳转指令堵塞流水线
File: noifop.txtName: 优化分支代码——避免跳转指令堵塞流水线Author: zyl910Blog: http://blog.youkuaiyun.com/zyl910/Version: V2.00Updata: 2006-10-11(注意修改下载后的扩展名)一、起因——饱和处理 在编写图象处理程序时,经常原创 2006-10-11 19:19:00 · 8171 阅读 · 5 评论 -
SIMD函数整理:01 《PC平台新技术MMX(上册):开发编程指南》第8章 MMX编码技术
一、来源 来源:《PC平台新技术MMX(上册):开发编程指南》第8章 MMX编码技术 书籍信息——http://e.360buy.com/30027396.htmlPC平台新技术MMX(上册):开发编程指南作 者: 吴乐南 编 出 版 社: 东南大学出版社 ISBN:9787810502528出版时间:1997-10-01页 数:149字 数:23700原创 2012-04-26 22:22:22 · 2485 阅读 · 0 评论 -
深入探讨用位掩码代替分支(9):测试成绩总结
一、测试结果汇总 将前面的测试结果进行汇总,按照三点取中方式筛选结果,整理为表格(单位是毫秒,数值越小越好)——测试f0_iff1_minf2_negf3_sarf4_mmxf5_sseVC6 on 32bit2016206371967237.525.7VC6 on 64bit20282075原创 2012-04-13 17:29:17 · 3248 阅读 · 12 评论 -
深入探讨用位掩码代替分支(3):VC6速度测试
wuhanbingwhdx提到了数据相关也会影响流水线(http://blog.youkuaiyun.com/zyl910/article/details/1330614)。 他的说法是有一定道理的。但是,在很多时候我们并不仅仅处理一个数值。比如将循环展开,在内循环处理2个或更多个的数值。而现代编译器面对循环展开时,在编译优化操作中会调整指令顺序,错开有相关性指令。因现代处理器支持超标量,这样的指令顺序原创 2012-03-27 15:51:13 · 1629 阅读 · 0 评论 -
Intrinsics头文件与SIMD指令集、Visual Studio版本对应表
File:Intrinsics头文件描述:指令集描述VS:Visual Studio版本号VisualStudio:Visual Studio版本名File描述VSVisualStudiointrin.hAll Architectures8.02005mmintrin.hMMX intrinsics6.06原创 2012-02-28 22:35:56 · 2657 阅读 · 0 评论 -
正确的优化分段函数形式的多重分支代码
File: fastmif.txtName: 正确的优化分段函数形式的多重分支代码Author: zyl910Blog: http://blog.youkuaiyun.com/zyl910/Version: V1.00Updata: 2006-10-13一、基本代码 有时候,我们会碰上这样的多重分支代码:char szbuf[10];if (scor原创 2006-10-13 11:07:00 · 2679 阅读 · 2 评论 -
快速计算Hue色环
File: FastHue.txtName: 快速计算Hue色环Author: zyl910Blog: http://blog.youkuaiyun.com/zyl910/Version: V1.00Updata: 2006-11-3下载(注意修改下载后的扩展名) 一、HSV色彩空间H: 色调(Hue)。范围: [0, 360) 0度:原创 2006-11-04 01:12:00 · 13067 阅读 · 1 评论 -
分析外星人计算Pi的程序
有一个只用4行代码就实现的计算Pi的程序,被称为外星人计算Pi的程序。有许多人讨论分析了该程序的实现原理,如:http://blog.youkuaiyun.com/panqiaomu/archive/2006/05/07/711776.aspx但我总感觉它分析得不够透彻,于是自己分析了一下。1.将原程序修改成更易看懂的形式;2.采用同样的算法,用Excel表格将Pi算了出来。下载(注意修改原创 2006-11-05 21:57:00 · 4881 阅读 · 1 评论 -
快速的16色转换算法
File: Fast16C.txtName: 快速的16色转换算法Author: zyl910Blog: http://blog.youkuaiyun.com/zyl910/Version: V1.0Updata: 2006-11-29下载(注意修改下载后的扩展名)一、问题描述 对于存储16色(4位)图像,VGA使用的是位平面方式,而DIB采用的是线原创 2006-11-30 19:31:00 · 3857 阅读 · 3 评论 -
C#类与结构体究竟谁快——各种函数调用模式速度评测
以前我一直有个疑惑——在C#中,究竟是类(class)比较快,还是结构体(struct)比较快?当时没有深究。最近我遇到一个难题,需要将一些运算大的指针操作代码给封装一下。原先为了性能,这些代码是以硬编码的形式混杂在算法逻辑之中,不但影响了算法逻辑的可读性,其本身的指针操原创 2011-09-19 00:48:22 · 7668 阅读 · 14 评论 -
四探C#类与结构体究竟谁快——跨程序集(assembly)调用
前面的三次测试都是在同一个项目内的,既处于同一个程序集。那么,跨程序集调用会怎么样呢?因为为了保证可维护性,我们会把一些常用操作封装到类库中去。然后实际项目开发时,引用该类库,使得解决方案中存在多个项目。编译完成后,将会是一个主要的exe和若干个dll文件,主exe程序集中的原创 2011-10-01 23:23:38 · 1493 阅读 · 2 评论 -
三探C#类与结构体究竟谁快——MSIL(微软中间语言)解读
上次我分别测试了类与结构体(http://blog.youkuaiyun.com/zyl910/article/details/6788417)、密封类(http://blog.youkuaiyun.com/zyl910/article/details/6793908)的函数调用速度评测。现在进行进一步原创 2011-09-24 12:30:12 · 1644 阅读 · 0 评论 -
再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类
上次我对C#类与结构体做了一次速度评测(http://blog.youkuaiyun.com/zyl910/article/details/6788417)。经过一段时间思索,发现还可以进一步探讨——第一、栈变量。上次的“硬编码”,是访问类中的静态变量的。若改为访问函数中的栈变量,性能会原创 2011-09-20 22:17:57 · 1492 阅读 · 1 评论 -
[x86]SIMD指令集发展历程表(MMX、SSE、AVX等)
自1996年的MMX指令集以来,Intel和AMD不断为x86体系添加新的SIMD指令集。时至2012年,Intel的Ivy Bridge即将发布,这16年来SIMD指令集有了哪些发展呢?于是我决定整理一份SIMD指令集的发展历程表。通过阅读Intel和AMD的手册,以及搜索网上资料,我初步完成了这项工作。表格如下——指令集条DateICPUIDateA原创 2012-02-26 19:40:23 · 3122 阅读 · 0 评论 -
VC 64位程序开发心的——获得程序位数和操作系统位数
如今64位系统越来越流行了,对于软件开发人员来说,掌握64位开发技术将会有更好的发展空间。而且经过这几年的发展,64位开发工具也成熟了,例如Visual Studio 2010。 关于如何配置64位平台,MSDN上有详细的介绍——http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx如何:针对 64 位平台配置 Visual C++原创 2012-02-19 22:46:29 · 2890 阅读 · 1 评论 -
SIMD函数整理:00 索引贴(2012-07-31更新)
作者:zyl910 关于SIMD(MMX、SSE、AVX)编程的资料一直很零散,于是我试图进行收集整理,便于随时翻阅学习。而且很多代码是直接用汇编写的,易读性差、难以重用,于是我决定将其统一改写为Intrinsics函数版。一、Instructions函数对照表 在使用Instructions函数时,很多时候会发现MSDN说的不详细,这时只有去翻阅Intel、AMD文档了。但I原创 2012-04-26 22:01:43 · 2233 阅读 · 0 评论