摘要:
前面我们用VC6测试了位掩码代替分支的速度。VC6是1998年发售的,离现在有14年了。在14年里,Intel与AMD的CPU都换了好几套微架构了,VC6编译器很可能无法充分发挥它们的性能。而且,从2003年AMD推出了64位处理器开始,现在64位系统越来越普及,我们希望测试64位下的性能。 于是选择最新的VC系列编译器——Visual C++ 2010,它是2010年发售的,支持x64平台。一、代码改进1.1 通用字符处理——tchar.h 传统的Windows程序一般使用ANSI+DBCS字符集。而从Windows NT开始,Windows内核采用Unicode字符集。但那时基于A... 阅读全文
摘要:
wuhanbingwhdx提到了数据相关也会影响流水线(http://blog.csdn.net/zyl910/article/details/1330614)。 他的说法是有一定道理的。但是,在很多时候我们并不仅仅处理一个数值。比如将循环展开,在内循环处理2个或更多个的数值。而现代编译器面对循环展开时,在编译优化操作中会调整指令顺序,错开有相关性指令。因现代处理器支持超标量,这样的指令顺序调整能获得较好的指令级并行度,从而优化了性能。 其次,就算编译器对循环展开优化的不够彻底,没将相关性指令错开。但因现代处理器支持乱序执行,当遇到相关性指令需要等待时,处理器会处理后面未相关的指令,从... 阅读全文
摘要:
查看编译器生成的汇编代码,有助于我们分析程序的性能。1 让VC6输出编译的汇编代码 用VC6打开前一篇文章(http://www.cnblogs.com/zyl910/archive/2012/03/12/noifopex1.html)的工程“noifCheck.dsw”。 首先需要配置项目设置——1.点击菜单栏 “工程”->“Project Settings”打开“Project Settings”对话框。2.将“Settings For:”设为“Win32 Release”。3.将右侧的选项卡换到“C/C++”面板。4.点击“Category:”组合框,选择“Listing Fil. 阅读全文
摘要:
几年前我写了一篇“优化分支代码——避免跳转指令堵塞流水线”(http://blog.csdn.net/zyl910/article/details/1330614)。因当时是整理笔记,有些粗略。这几年又有了新的心得,故决定深入探讨,顺便回答网友评论。 housisong(http://blog.csdn.net/housisong)提到了用利用带符号移位生成掩码——(假设n是32bit有符号数): (n>>31) 当n>=0的时候结果为0x00000000,当n<0时得到0xFFFFFFFF掩码,然后利用该掩码来合并分支。 这是一个很好的思路,避免了状态寄存器访问。 但 阅读全文
摘要:
更新历史——[2012-3-9] V1.1.0& 兼容最新的 AHD 2.21beta(2012-02-25)+ 增加辛亥革命事件组。* 调整“重建大明(北京)”决议,仅在CHI未开化时有效。* 规范化次国家名称(粤桂、云贵、东北)。* 微调了湘鄂的颜色,避免与陕甘混淆。* 旅顺属于MCK东北。& 文本修订。下载地址——http://115.com/file/an998uhy更多内容——http://www.cnblogs.com/zyl910/archive/2012/02/17/RecoverMingV_V1.html[维多利亚2 MOD] RecoverMingV(Vic 阅读全文
摘要:
参考文献——《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2 (2A, 2B & 2C): Instruction Set Reference, A-Z》. December 2011. http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.h 阅读全文
摘要:
File:Intrinsics头文件描述:指令集描述VS:Visual Studio版本号VisualStudio:Visual Studio版本名File描述VSVisualStudiointrin.hAll Architectures8.02005mmintrin.hMMX intrinsics6.06.0 SP5+PP5xmmintrin.hStreaming SIMD Extensions intrinsics6.06.0 SP5+PP5emmintrin.hWillamette New Instruction intrinsics (SSE2)6.06.0 SP5+PP5pmmint 阅读全文
摘要:
自1996年的MMX指令集以来,Intel和AMD不断为x86体系添加新的SIMD指令集。时至2012年,Intel的Ivy Bridge即将发布,这16年来SIMD指令集有了哪些发展呢?于是我决定整理一份SIMD指令集的发展历程表。通过阅读Intel和AMD的手册,以及搜索网上资料,我初步完成了这项工作。表格如下—— 指令集条DateICPUIDateACPUADateMemoMMX571996-10-12Pentium MMX(P55C)1996-10-12K61997-4-1MultiMedia eXtensionSSE701999-5-1Pentium III(Katma... 阅读全文
摘要:
如今64位系统越来越流行了,对于软件开发人员来说,掌握64位开发技术将会有更好的发展空间。而且经过这几年的发展,64位开发工具也成熟了,例如Visual Studio 2010。 关于如何配置64位平台,MSDN上有详细的介绍——http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx如何:针对 64 位平台配置 Visual C++ 项目 在很多时候,我们希望能兼容老系统,于是配置了两个编译平台——Win32 和 x64。 但光这样做还是不够的,因为老系统不支持某些新功能。所以我们需要在运行时动态动态判断。 最常见的判断有两种——... 阅读全文
摘要:
支持——1.欧陆风云3(Europa Universalis 3)至资料片5.0神风(Divine Wind)。2.欧陆风云:罗马(Europa Universalis : rome)至资料片2.0成王败寇(Vae Victis)。3.维多利亚2(Victoria 2)至资料片2.0阋墙(A House Divided)。4.钢铁雄心3(Hearts of Iron 3)至资料片3.0为了祖国(For the Motherland)。5.王国风云2(Crusader Kings 2)。6.戦國(Sengoku)。 本工具适用于以下情况——1.mod开发人员。2.日文汉化版省份查找问题。将... 阅读全文
摘要:
该补丁的作用——1.调整省份区划,使其更接近清1820年省份区划。2.调整区域颜色,使其容易分辨。安装方法——将压缩包中的文件解压到维多利亚2的主目录,覆盖同名文件。http://files.cnblogs.com/zyl910/fixmap_chi_v2.0.rar注意事项~~~~~~~~1.存档兼容性问题。如果中国地区没有建造过工厂,就能继续玩存档。如果建造过,读取存档可能会出问题。请使用压缩包中bak\map文件夹内的“region.txt”恢复原版的省份区划。更新历史~~~~~~~~[2012-02-04] V2.01. 支持资料片 AHD(阋墙)V2.1。2. 为保证稳定性,区划微调 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——trellis:0、1、2。执行Trellis quantization来提高效率。0、停用;1、只在一个宏区块的最终编码上启用;2、在所有模式决策上启用。参考测试:trellis 0。 默认参数——--profile main --preset medium --tune ssim --crf 26.0 --threads 2 --bframes 3 --ref 3 --mer... 阅读全文
摘要:
数据表的结构是——CREATE TABLE [dbo].[ac_mainctls_new] ([id] [int] NULL ,[ctlip] [bigint] NULL ,[ctlname] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,)其中ctlip是设备的IP地址,以整数方式存储。虽然可以用程序将整数转为IP字符串,但多了一道工序有点麻烦。于是我想直接在SQL查询语句中将其转为IP字符串。经过思索与调试,我完成了该查询语句——SELECT CAST(ctlip / 0x1000000 AS varchar(3)) + '.' + 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——trellis:0、1、2。执行Trellis quantization来提高效率。0、停用;1、只在一个宏区块的最终编码上启用;2、在所有模式决策上启用。参考测试:trellis 0。 默认参数——--profile main --preset medium --tune ssim --crf 26.0 --threads 2 --bframes 3 --ref 3 --mer... 阅读全文
摘要:
新版本——http://www.cnblogs.com/zyl910/archive/2012/08/16/Gunpowder_Magazine_and_Firecracker_Workshop_V2.htmlGunpowder Magazine and Firecracker Workshop (火药库与爆竹坊){Rule} Steel technology found [ICON_RES_COAL] Coal. (获得炼钢科技时发现煤矿){New Building} Gunpowder Magazine(火药库): +15% [ICON_PRODUCTION] Production whe 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。参考测试:subme9。 测试视频——a(红):720P动画 Fate/Zero 07。简称“Fate”。b(黄):720P动画 Hunter x Hunter 07。简称“HxH”。c(绿):1080P动画 我的妹妹不可能那么可爱 11。简称“Oreimo... 阅读全文
摘要:
今天在百度上看到一则消息——http://tieba.baidu.com/p/1362181987IVY Bridge : There's more than 22nmI named this title...this is a information that were said to be confirmed on Intel forums"• Two instructions to support 16-bit floating-point data type conversion to and from single-precision floating-point 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
baidu.com日均 IP 访问量[一周平均] ≈ 65,340,000日均 PV 浏览量[一周平均] ≈ 1,146,063,600taobao.com日均 IP 访问量[一周平均] ≈ 27,120,000日均 PV 浏览量[一周平均] ≈ 520,432,800360buy.com日均 IP 访问量[一周平均] ≈ 5,406,000日均 PV 浏览量[一周平均] ≈ 67,196,580paipai.com日均 IP 访问量[一周平均] ≈ 2,154,000日均 PV 浏览量[一周平均] ≈ 13,074,780dangdang.com日均 IP 访问量[一周平均] ≈ 1,308 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
一、测试内容 测试方法——x264编码参数大测试:索引贴http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数——subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation)复杂度。值越高越好。crf:18 至 28,间隔1。固定位元率系数(Constant Ratefactor)码率控制方法。当qp是把某个量化值作为目标,而bitrate是把某个档案大小作为目标时,crf则是把某个“品质”作为目标。构想是让crf n提供的视觉品质与qp n相同,只.. 阅读全文
摘要:
Wakeari(有诡)中有一个有趣的渲染模式——念摄模式。但在该模式下帧率暴跌。于是我对其进行了分析。非念摄模式下有60帧——念摄模式下仅有14帧——60变为14,帧率暴跌至原来的1/4左右。技术分析估计该游戏采取的是“渲染两次”方案。具体步骤为——1.根据鼠标拖动的区域,生成一张掩码位图(念摄区域图);2.将外衣的模型标记为可见,渲染场景,输出到纹理A;3.将外衣的模型标记为隐藏,渲染场景,输出到纹理B;4.根据掩码位图,合并纹理A 和 纹理B,然后输出到屏幕。该方案有两个缺点——1.第2步、第3步共渲染两次,使帧率下降一半。2.在第4步合并纹理图时,需等待第2步、第3步的渲染操作彻底完成后 阅读全文
摘要:
上回我们学会了怎么计算级别(H.264 级别(Level)、DPB 与 MaxDpbMbs 详解)。但是每次手工计算就太麻烦了,我们希望有一款工具能完成这些运算。最好该工具还能跨平台使用。 在综合考虑上面的需求 和 开发难度性 后,我决定编写一个JavaScript网页程序。 最终效果—— 其实开发难度并不大,只要熟悉上回的级别计算公式,就能很容易实现。全部代码如下——<!DOCTYPE html PUBLIC "-//W3C//Dtd XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/Dtd/ 阅读全文
摘要:
对于H.264(MPEG-4 AVC)而言,级别(Level)是与档次(Profile)同等重要的参数。但很多文章说的很简略,只是说标清视频一般用3.1,高清用4,具体含义语焉不详。于是我做了一番研究。一、级别详表 级别(Level)是用来约束 分辨率、帧率 和 码率 的。详细信息请看表格—— LevelMax macroblocksMax video bit rate (kbit/s)Examples for high resolution @ frame rate (max stored frames)persecondper frameBP, XP, MPHiPHi10P... 阅读全文
摘要:
x264预设类参数详解 x264版本——x264 core:116 r2074 2641b9e 加上“fullhelp”参数可以查看x264的完全版帮助——x264 --fullhelp 其中对预设类参数的说明是——Presets: --profile <string> Force the limits of an H.264 profile Overrides all settings. - baseline: ... 阅读全文
摘要:
按“API Level”分类对于网页程序而言,可以理解为——将数据输出到不同的div。 很多SDK是与 API Level 相关的,具有“sdk:api-level”属性,它是一个整数,值为2(Android 1.1)至14(Android 4.0)。我们可以用数组来管理——var arrAPI = new Array(); // API Level数组。用于管理给出了API Level的。 除了与 API Level 相关的SDK外,还有一些文件是与SDK无关的,它们没有“sdk:api-level”属性。怎么处理呢?按xml标签名进行分类似乎比较好。因标签名是一个字符串,应使... 阅读全文
摘要:
3.1 纯JavaScript转换xml 因为xml对命名空间的规定比较严格,就算是同一套命名空间的不同版本,也会报告命名空间冲突。按照这个规定,我们必须为每一个版本写一套xsl转换,这样做太麻烦了。而且有可能Google又会更新xml名称空间的版本,那时我们的xsl又会不兼容了。 这时还不如放弃xsl,用JavaScript分析xml的数据,并将其加工为html字符串。这样就能绕过命名空间问题。 而且JavaScript下,我们能更灵活的处理数据,比如解决绝对地址问题。 纯JavaScript转换xml其实并不复杂,基本上只需要改动showxml函数——// 显示xmlfunctio... 阅读全文
摘要:
2.1 解决“浏览器卡顿” 解决办法是,改为异步加载。这样浏览器可以继续工作,下载完成后会触发回调函数。 xml_loadFile函数支持异步加载,只需将第2个参数设为回调函数就行了。我们还可以利用闭包函数,来简化回调函数的编写。 “加载并做xsl转换”这个操作比较固定,我们可以写一个函数来封装它(doload)。同时还可以作一些界面改进,比如我为它加了点线边框、加载状态提示、展开/折叠等功能——// 显示或隐藏控件function setShow(ctl, isShow, _display){ if (null==ctl) return; ctl.style.disp... 阅读全文
摘要:
最近想学习Android开发,可是SDK Manager的下载速度太慢了。电脑开了一整天,SDK包还没有下载完。 在网上搜索了一下如何快速下载Android SDK。发现一文——《利用迅雷快速下载官方Android SDK》(http://vc4j.com/archives/21.html)。 该方法确实不错,但存在三个问题——1.因官网更新,“repository.xml”已过时,上面没有所需要的Android SDK。2.xml文件中的信息很多,找到自己所需的SDK比较费神。而且一般需要下载多个文件(platform、sample、doc、add-on)。3.当找到文件名后,要手动... 阅读全文
摘要:
在编写处理xml的网页时,经常为浏览器兼容性头疼。于是我将常用的xml操作封装为函数。经过一段时间的改进,现在已经很稳定了,用起来很舒服。 函数有——xml_loadFile:xml同步/异步加载。xml_transformNode:xsl转换。xml_text:节点的文本。selectSingleNode:根据XPath选择单个节点。selectNodes:根据XPath选择多个节点。 全部代码(zyllibjs_xml.js)——/*zyllibjs_xmlXML处理@author zyl910注意——1. Chrome 由于其安全机制限制, 不能读取本地文件。Reference~... 阅读全文
摘要:
720P动画高压测试——Hunter x Hunter 07(18组测试结果) 讨论帖——http://www.nmm-hd.org/newbbs/viewtopic.php?f=8&t=488一、原视频 下载地址——http://115.com/folder/f281736a1b1 视频信息——GeneralComplete name : F:\Temp\3\a720\[FLsnow][HUNTER×HUNTER][07][720p][AVC_AAC].mp4Format : MPEG-4Format profile : Base MediaCodec ID : isomF 阅读全文
摘要:
H264视频高压心得——兼容华为U8800+(硬解720P)一、导言与背景知识 手机用户对于视频播放,最期望以下3点——1.播放流畅。最好手机支持该视频格式的硬件解码,俗称“硬解”。硬解视频不仅播放流畅,而且比较省电。2.文件小。手机的存储卡的容量一般只有数GB,最高的一般才32GB。文件小,才能存放更多的视频。3.画质高。虽然要求文件小,但是必须保证画质。若画质差,就没心情观看了。 H.264视频编码能满足以上需求,它能在低码率下保证较好画质。而且现在大多数手机都支持硬解H.264视频,只是存在支持级别的差异。 背景知识——H.264,或称MPEG-4 AVC(Advanced Vid... 阅读全文
摘要:
最近买了台新手机,该手机支持硬解H264视频。于是我想把一些视频转为H264格式,放在手机上观看。第一、因手机存储空间较少,希望视频文件小,所以码率一般设置的比较低。第二、流行视频在电脑上看看就可以了,只有经典视频才会存放在手机上多次观看,所以画质也很重要。一、需求 需求细则——1.封装格式:mp4。2.视频编码:H.264(ITU-T命名),或叫MPEG-4 AVC(ISO/IEC命名)。最好使用x264编码器,因为它在低码率下表现较好。3.AVC Profile(AVC配置):Main(主流)。因其支持CABAC编码与B帧,CABAC(Context-based Adaptive B... 阅读全文
摘要:
昨日花1500购买了华为U8800+。系统是安卓2.2联通定制版的。我测试了一下性能——Quadrant 1.17:1811分。Linpack 1.2.8:37.094MFLOPS。安兔兔评测 2.4.1:2187分。觉得联通定制软件太多,正好该手机的官方2.3升级包出来了(http://bbs.huaweidevice.com/cn/forum/index.php?app=forum&mod=Detail&act=Index&id=25345 ),于是我根据该方案把手机升级到2.3的系统。升级后感觉流畅了很多,于是又测了一下性能——Quadrant 1.16:2255 阅读全文
摘要:
视频处理开发时,经常会遇到各种分辨率。我整理了一下,发现常用的居然就有一百来种。视频分辨率列表——IdxNameWHPxsgcdPerCPTVMemo088648p1_1Macro Block1SQCIF1289612,28832p4_3YYSub Quarter CIF212812816,384128p1_1Y316010016,00020p8_5Y4QQVGA16012019,20040p4_3YQuarter-QVGA516012820,48032p5_4Y6QCIF17614425,34416p11_9YYQuarter CIF720817636,60816p7_5Y. Nokia82 阅读全文
摘要:
当年在学习大学物理时,我已清楚了离心力的本质,可惜当时没有记录下来。最近与人讨论牛顿水桶实验,又扯出了离心力的话题,所以我趁此机会整理一下。【正文】先回顾一下惯性定律(牛顿第一定律)——任何一个物体在不受任何外力的时候(Fnet=0),总保持匀速直线运动或静止状态,直到有作用在它上面的外力迫使它改变这种状态为止。也就是说——在没有其他力介入的情况下,运动的物体总是保持匀速直线运动。要想使(匀速直线运动的)物体转为做匀速圆周运动,就必须再给予一个垂直方向的力,这就是向心力。所谓的离心力,仅是缺乏向心力的表现。即我们的主观意愿是做匀速圆周运动,而物体运动的天性是匀速直线运动。如果我们停止提供向心力 阅读全文