自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zyl910的专栏

优化技巧、硬件体系、图像处理、图形学、游戏编程、国际化与文本信息处理。主力博客:http://www.cnblogs.com/zyl910/...

原创 SIMD函数整理:00 索引贴(2012-07-31更新)

作者:zyl910   关于SIMD(MMX、SSE、AVX)编程的资料一直很零散,于是我试图进行收集整理,便于随时翻阅学习。而且很多代码是直接用汇编写的,易读性差、难以重用,于是我决定将其统一改写为Intrinsics函数版。 一、Instructions函数对照表   在使用Inst...

2012-04-26 22:01:43 1912 0

原创 [C] 跨平台使用TCHAR——让Linux等平台也支持tchar.h,解决跨平台时的格式控制字符问题,多国语言的同时显示(兼容vc/gcc/bcb,支持Windows/Linux/Mac)

作者:zyl910   将Windows程序移植到Linux等平台时,经常会遇到tchar.h问题与字符串的格式控制字符问题(char串、wchar_t串、TCHAR串混合输出)。本文探讨如何解决这些问题。 一、背景 1.1 历史   传统的C程序使用char字符串,采用ANSI+DB...

2013-01-17 21:50:34 11759 3

原创 [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX、SSE2指令集。支持vc、gcc编译器,在Windows、Linux、Mac这三大平台上成功运行。   一、关键讲解   前文(http://www.cnblog...

2012-10-26 21:23:44 7161 0

原创 [C] 跨平台使用Intrinsic函数范例2——使用SSE2、AVX指令集 处理 双精度浮点数组求和

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以双精度浮点数组求和为例演示了如何跨平台使用SSE2、AVX指令集。支持vc、gcc编译器,在Windows、Linux、Mac这三大平台上成功运行。 一、关键讲解   前文(http://www.cnblogs...

2012-10-26 18:06:18 4834 0

原创 [C] 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)

作者:zyl910。   本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE、AVX指令集。因使用了stdint、zintrin、ccpuid这三个模块,可以完全避免手工编写汇编代码,具有很高可移植性。支持vc、gcc编译器,在Windows、L...

2012-10-22 22:28:17 3582 1

原创 [C] zintrin.h : 智能引入intrinsic函数。支持VC、GCC,兼容Windows、Linux、Mac OS X

作者:zyl910。   现在很多编译器支持intrinsic函数,这给编写SSE等SIMD代码带来了方便。但是各个编译器略有差异,于是我编写了zintrin.h,智能引入intrinsic函数。 一、各种编译器的区别 1.1 Visual C++(Windows)   最早支持int...

2012-09-23 23:19:35 5913 0

原创 ccpuid:CPUID信息模块。范例:显示所有的CPUID信息

作者:zyl910   关于获取各种CPUID信息,我之前积累了不少代码,现在决定将它们封装在一个模块中,方便代码复用。   其次,前面只是介绍了CPUID的一些常用功能,而Intel、AMD的手册中定义了大量的CPUID功能。所以我希望有一个程序能按照功能号顺序,依次显示所有的CPUID信息...

2012-07-11 16:47:40 8132 0

原创 [VC] 检测AVX系列指令集的支持级别(AVX、AVX2、F16C、FMA、FMA4、XOP)

从2011年的Sandy Bridge微架构处理器开始,现在支持AVX系列指令集的处理器越来越多了。本文探讨如何用VC编写检测AVX系列指令集的程序,并利用了先前的CPUIDFIELD方案。 一、AVX系列指令集简介   SSE5 指令:SSE5 是一个纸面上的指令集,并没有最终实现,AMD ...

2012-07-04 16:07:52 10875 0

原创 [VC] CPUIDFIELD:CPUID字段的统一编号、读取方案。范例:检查SSE4A、AES、PCLMULQDQ指令

除了基本的MMX和SSE系列指令集外,x86体系还有其他扩展指令集,例如SSE4A、AES、PCLMULQDQ等,它们也可以利用CPUID指令来检测。但是,这些指令集细碎杂多。如果像以前那样分别编写检测函数的话,那工作量太大,不值得。而且大量的函数名也会给使用带来麻烦。于是文篇探讨如何设计一套通用...

2012-06-29 14:48:06 2916 0

原创 如何在各个版本的VC及64位下使用CPUID指令

前面我们探讨了在16位的DOS实模式下使用CPUID指令(http://www.cnblogs.com/zyl910/archive/2012/05/14/dos16_getcpuid.html)。而现在64位Windows系统已经很流行了,在32/64位模式下如何使用CPUID呢?于是本文介绍了...

2012-05-21 18:05:24 5864 0

原创 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache)

现在多核处理器已经很普及了,市场主流是双核处理器,还有4核、8核等高端产品。而且Intel推广了超线程技术(Hyper-Threading Technology, HTT),可以将一个物理核心模拟为两个逻辑处理器。这一切使得“CPU数量”这一概念变得复杂起来,对于软件开发人员来说,希望能获得物理C...

2012-05-08 18:13:45 8277 0

原创 SIMD函数整理:01 《PC平台新技术MMX(上册):开发编程指南》第8章 MMX编码技术

一、来源   来源:《PC平台新技术MMX(上册):开发编程指南》第8章 MMX编码技术   书籍信息—— http://e.360buy.com/30027396.html PC平台新技术MMX(上册):开发编程指南 作 者: 吴乐南 编 出 版 社: 东南大学出版社 ISBN...

2012-04-26 22:22:22 2044 0

原创 SIMD(MMX/SSE/AVX)变量命名规范心得

当使用Intrinsics函数来操作SIMD指令集(MMX/SSE/AVX等)时,会面对不同长度的SIMD数据类型,其中又分为多种紧缩格式。为此,我设计了一套SIMD变量命名规范,可以有效的提高代码的可读性。 一、SIMD数据类型简介   SIMD数据类型有—— __m64:64位紧缩整数(...

2012-04-23 17:47:46 3685 1

原创 AVX指令集中的32种浮点比较关系详解(NaN、无序、有序等)

在传统印象中,数字的比较关系只有6种。但在AVX指令集中,Intel一下给出了32种浮点比较谓词,详见下图—— (Intel手册:Table 3-9. Comparison Predicate for VCMPPD and VCMPPS Instructions)   为什么会有这么多种比...

2012-04-19 16:37:41 2338 0

原创 深入探讨用位掩码代替分支(9):测试成绩总结

一、测试结果汇总   将前面的测试结果进行汇总,按照三点取中方式筛选结果,整理为表格(单位是毫秒,数值越小越好)—— 测试 f0_if f1_min f2_neg f3_sar f4_mmx f5_sse VC6 on 32bit 2016 2063 ...

2012-04-13 17:29:17 2907 12

原创 深入探讨用位掩码代替分支(8):SSE指令集速度测试

在上一篇测试了MMX指令集,这次我们来测试SSE指令集。说的更精确一点,是测试SSE2指令集。   本篇致力于解决以下问题—— 1.SSE/SSE2指令集是什么? 2.如何阅读Intel/AMD的手册? 3.如何运用SSE指令集?如何将MMX代码升级为SSE代码。 4.如何在VC++6....

2012-04-12 22:30:16 2755 0

原创 深入探讨用位掩码代替分支(7):MMX指令集速度测试

前面我们测试了高级语言做饱和处理的性能。其实,对于这样的大批量数据处理,使用SIMD(Single Instruction Multiple Data,单指令多数据流)技术能极大的提高性能。MMX指令集是目前x86平台上覆盖最广的SIMD指令集,于是本文对它进行探讨。   本文致力于解决以下问题...

2012-04-09 23:08:54 2226 0

原创 深入探讨用位掩码代替分支(6):VB6速度测试

前面我们测试了C系列语言,验证了位掩码算法的确实性能不错。那么对于Basic系列语言,该算法的效率怎样呢?于是本文对此进行探讨。   VB.Net与C#一样,也是由.Net虚拟机执行的,没有多大的测试价值。所以我决定测试VB6。 一、移植要点   VB6的功能与C系列语言差很多。很多地方需要...

2012-03-30 16:53:32 3750 1

原创 深入探讨用位掩码代替分支(5):C#2010速度测试

前面我们测试了C语言这样纯编译型语言。那么对于像C#这样由虚拟机执行的语言,“位掩码代替分支”法是否也有效果呢?于是本文对此进行探讨。 一、移植要点   C#的语法与C语言很相像,多数代码可以直接用,但要注意以下几点。 1.1 unsafe——不安全上下文   C#虽然支持指针,但必须在u...

2012-03-29 17:15:48 1970 0

原创 深入探讨用位掩码代替分支(4):VC2010速度测试

前面我们用VC6测试了位掩码代替分支的速度。VC6是1998年发售的,离现在有14年了。在14年里,Intel与AMD的CPU都换了好几套微架构了,VC6编译器很可能无法充分发挥它们的性能。而且,从2003年AMD推出了64位处理器开始,现在64位系统越来越普及,我们希望测试64位下的性能。  ...

2012-03-28 16:41:25 1524 0

原创 深入探讨用位掩码代替分支(3):VC6速度测试

wuhanbingwhdx提到了数据相关也会影响流水线(http://blog.csdn.net/zyl910/article/details/1330614)。   他的说法是有一定道理的。但是,在很多时候我们并不仅仅处理一个数值。比如将循环展开,在内循环处理2个或更多个的数值。而现代编译器面...

2012-03-27 15:51:13 1459 0

原创 深入探讨用位掩码代替分支(2):汇编代码分析

查看编译器生成的汇编代码,有助于我们分析程序的性能。 1 让VC6输出编译的汇编代码   用VC6打开前一篇文章(http://blog.csdn.net/zyl910/article/details/7345655)的工程“noifCheck.dsw”。   首先需要配置项目设置—— 1...

2012-03-21 15:20:56 1287 2

原创 深入探讨用位掩码代替分支(1):利用带符号移位生成掩码

几年前我写了一篇“优化分支代码——避免跳转指令堵塞流水线”(http://blog.csdn.net/zyl910/article/details/1330614)。因当时是整理笔记,有些粗略。这几年又有了新的心得,故决定深入探讨,顺便回答网友评论。   housisong(http://blo...

2012-03-12 17:09:22 2032 1

原创 [VC6] 检查MMX和SSE系列指令集的支持级别(最高SSE4.2)

参考文献—— 《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z》. December 2011. ...

2012-03-01 22:45:06 1999 0

原创 Intrinsics头文件与SIMD指令集、Visual Studio版本对应表

File:Intrinsics头文件 描述:指令集描述 VS:Visual Studio版本号 VisualStudio:Visual Studio版本名 File 描述 VS VisualStudio intrin.h All Architectures...

2012-02-28 22:35:56 2250 0

原创 [x86]SIMD指令集发展历程表(MMX、SSE、AVX等)

自1996年的MMX指令集以来,Intel和AMD不断为x86体系添加新的SIMD指令集。时至2012年,Intel的Ivy Bridge即将发布,这16年来SIMD指令集有了哪些发展呢?于是我决定整理一份SIMD指令集的发展历程表。 通过阅读Intel和AMD的手册,以及搜索网上资料,我初步完...

2012-02-26 19:40:23 2483 0

原创 VC 64位程序开发心的——获得程序位数和操作系统位数

如今64位系统越来越流行了,对于软件开发人员来说,掌握64位开发技术将会有更好的发展空间。而且经过这几年的发展,64位开发工具也成熟了,例如Visual Studio 2010。   关于如何配置64位平台,MSDN上有详细的介绍—— http://msdn.microsoft.com/zh-...

2012-02-19 22:46:29 2676 1

翻译 IVY Bridge : There's more than 22nm(IVB的新指令)

今天在百度上看到一则消息—— http://tieba.baidu.com/p/1362181987 IVY Bridge : There's more than 22nm I named this title...this is a information that we...

2012-01-12 12:41:17 876 0

原创 四探C#类与结构体究竟谁快——跨程序集(assembly)调用

前面的三次测试都是在同一个项目内的,既处于同一个程序集。那么,跨程序集调用会怎么样呢? 因为为了保证可维护性,我们会把一些常用操作封装到类库中去。然后实际项目开发时,引用该类库,使得解决方案中存在多个项目。编译完成后,将会是一个主要的exe和若干个dll文件,主exe程序集中的

2011-10-01 23:23:38 1129 2

原创 csdn经常卡,在博客园开了博客

csdn经常卡,在博客园开了博客—— http://www.cnblogs.com/zyl910   以后一般在那边更新。只有重要的技术文章才会也发到这边。

2011-09-25 21:48:12 1120 0

原创 三探C#类与结构体究竟谁快——MSIL(微软中间语言)解读

上次我分别测试了类与结构体(http://blog.csdn.net/zyl910/article/details/6788417)、密封类(http://blog.csdn.net/zyl910/article/details/6793908)的函数调用速度评测。现在进行进一步

2011-09-24 12:30:12 1260 0

原创 再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类

上次我对C#类与结构体做了一次速度评测(http://blog.csdn.net/zyl910/article/details/6788417)。经过一段时间思索,发现还可以进一步探讨—— 第一、栈变量。上次的“硬编码”,是访问类中的静态变量的。若改为访问函数中的栈变量,性能会

2011-09-20 22:17:57 1271 1

原创 C#类与结构体究竟谁快——各种函数调用模式速度评测

以前我一直有个疑惑——在C#中,究竟是类(class)比较快,还是结构体(struct)比较快? 当时没有深究。 最近我遇到一个难题,需要将一些运算大的指针操作代码给封装一下。原先为了性能,这些代码是以硬编码的形式混杂在算法逻辑之中,不但影响了算法逻辑的可读性,其本身的指针操

2011-09-19 00:48:22 6575 14

原创 【软件发布】临摹帖(zDrawHelp) V1.1(画像素图的辅助工具)

临摹帖(zDrawHelp) V1.1 简介 ~~~~   临摹帖(zDrawHelp)是一个画像素图的辅助工具。   它可以使一副图片在所有窗口的前面并半透明,而且最奇妙的是——鼠标操作能穿透该图片,直接操作下面的绘图软件。   绿色软件,无需安装,解压后直接双击

2011-08-21 21:50:45 2261 3

原创 【软件发布】zDrawHelp V1.0(画像素图的辅助工具)

zDrawHelp V1.0 简介 ~~~~   zDrawHelp是一个画像素图的辅助工具。   它可以使一副图片在所有窗口的前面并半透明,而且最奇妙的是——鼠标操作能穿透该图片,直接操作下面的绘图软件。   运行环境:.Net Framework 2.0。Win

2011-08-15 16:04:25 1673 2

原创 [Color]灰度系数与网点增大

File:      StudyDotGain.txtName:      灰度系数与网点增大Author:    zyl910Version:   V1.0Updata:    2007-7-20  在PhotoShop的颜色设置对话框中,会发现“Dot Gain”这个词语经常出现,如在“颜色设...

2007-07-20 13:15:00 3233 2

原创 让图片在浏览器中只有被选中后才能看清

[图片上传失败] 每隔一个像素进行反色而已/*File:      magicpic.cName:      让图片在浏览器中只有被选中后才能看清Author:    zyl910Blog:      http://blog.csdn.net/zyl910/Version:   V1.0Updat...

2006-12-27 15:19:00 1886 1

原创 终于真正明白了超光速旅行中的时间倒流现象

我最开始看见相对论中的一些概念时,总觉得违背直观、难以理解。可是过了一段时间,会突然发现,一切原来是这样一回事。因为光速是300000km/s,所以距地球为d光年的恒星,它的发出来的光要过d年才能到达地球。换句话说,我们现在看见的是该恒星d年前的景象。假设在今年一月份的时候,有一艘飞船位于离地球一...

2006-12-15 10:34:00 14678 16

原创 快速的16色转换算法

File:      Fast16C.txtName:      快速的16色转换算法Author:    zyl910Blog:      http://blog.csdn.net/zyl910/Version:   V1.0Updata:    2006-11-29下载(注意修改下载后的扩展名...

2006-11-30 19:31:00 3485 3

原创 测试VGA12H直接写屏速度 V1.1

File:      VGASpeed.txtName:      测试VGA12H模式的速度Author:    zyl910Blog:      http://blog.csdn.net/zyl910/Version:   V1.1Updata:    2006-11-23下载(注意修改下载后...

2006-11-23 23:25:00 2138 0

提示
确定要删除当前文章?
取消 删除