摘要:作者:zyl910一、问题背景 现在Win8已经发售了,但奇怪的是,没有听到新版Windows SDK的消息。 其次,Win8中集成了DirectX 11.1,而现在也没有新版DirectX SDK的消息。 搜索了一下后发现,原来它们已经集成到VS2012中了。二、文档 在VS2012中点击菜单栏“帮助”->“添加和移除帮助内容”,打开“Microsoft Help View 2.0 - Visual Studio 2012文档”—— 需要等待一会儿,让文档列表下载完毕。注意选择“Windows Desktop App Development - 英语”,点击旁边的“添加”链接,它就..
阅读全文
随笔分类 - G00 Media_多媒体
摘要:假定——[numthreads(TX, TY, TZ)] // 线程组尺寸。既线程组内有多少个线程。Dispatch(GX, GY, GZ); // 线程组的数量。既有多少个线程组。那么——SV_GroupThreadID={iTX, iTY, iTZ} // 【线程组内的】线程3D编号SV_GroupID={iGX, iGY, iGZ} // 线程组的3D编号SV_DispatchThreadID={iGX*TX+iTX, iGY*TY+iTY, iGZ*TZ+iTZ} // 将线程组展开后,每个线程的全局3D编号。SV_GroupIndex=iTX + iTY*TX + iTZ*TX*TY
阅读全文
摘要:一、测试结果汇总 将前面的测试结果进行汇总,整理为表格(单位是毫秒,数值越小越好)—— 测试f0_iff1_minf2_negf3_sarf4_mmxf5_sseVC6 on 32bit2016206371967237.525.7VC6 on 64bit2028207571868737.125.3VC2010(32) on 32bit17932112512437VC2010(32) on 64bit17162106514437VC2010(64) on 64bit16231997421328C#2010(any) on 32bit192221472471559C#2010(any) on...
阅读全文
摘要:在上一篇测试了MMX指令集,这次我们来测试SSE指令集。说的更精确一点,是测试SSE2指令集。 本篇致力于解决以下问题——1.SSE/SSE2指令集是什么?2.如何阅读Intel/AMD的手册?3.如何运用SSE指令集?如何将MMX代码升级为SSE代码。4.如何在VC++6.0这样的高级语言编译器中使用MMX指令集?一、简介 1999 年 Intel 推出了第 1 代的 SSE(Streaming SIMD Extensions)指令以回击 AMD 的 3DNow! 指令,使用在 Pentium III 处理器上。随后 AMD 在 2001 年 10 月 发布 的 Athlon XP ...
阅读全文
摘要:前面我们测试了高级语言做饱和处理的性能。其实,对于这样的大批量数据处理,使用SIMD(Single Instruction Multiple Data,单指令多数据流)技术能极大的提高性能。MMX指令集是目前x86平台上覆盖最广的SIMD指令集,于是本文对它进行探讨。 本文致力于解决以下问题——1.MMX指令集是什么?2.如何阅读Intel/AMD的手册?2.如何运用MMX指令集?3.如何在VC++6.0这样的高级语言编译器中使用MMX指令集?一、MMX指令集简介 MMX(Multi Media eXtension,多媒体扩展指令集)指令集是Intel公司于1996年推出的一项多媒体指...
阅读全文
摘要:前面我们测试了C系列语言,验证了位掩码算法的确实性能不错。那么对于Basic系列语言,该算法的效率怎样呢?于是本文对此进行探讨。 VB.Net与C#一样,也是由.Net虚拟机执行的,没有多大的测试价值。所以我决定测试VB6。一、移植要点 VB6的功能与C系列语言差很多。很多地方需要换另一种方法去实现,甚至不能实现。 要点有——1.VB6不支持控制台程序,只支持窗口程序。所以我们的测试程序得修改为窗口程序。2.VB6不支持指针,所以依靠数组。幸好现在的操作比较简单,用数组的性能损失不大。3.VB6没有带符号移位运算法,所以无法实现f3_sar函数。4.VB6和C#一样不支持宏,所以得手...
阅读全文
摘要:前面我们测试了C语言这样纯编译型语言。那么对于像C#这样由虚拟机执行的语言,“位掩码代替分支”法是否也有效果呢?于是本文对此进行探讨。一、移植要点 C#的语法与C语言很相像,多数代码可以直接用,但要注意以下几点。1.1 unsafe——不安全上下文 C#虽然支持指针,但必须在unsafe——不安全上下文 中才能使用。 要使用unsafe,必须先配置项目属性,允许不安全代码——1.项目->属性,打开项目的属性页。2.点击左侧“生成”,切换到“生成”页。3.点击上侧的“配置”组合框,选择“所有配置(C)”。4.勾选“常规”中的“允许不安全代码(F)”。5.点击工具栏上的“保存”按钮。 ...
阅读全文
摘要:前面我们用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掩码,然后利用该掩码来合并分支。 这是一个很好的思路,避免了状态寄存器访问。 但
阅读全文
摘要:一、测试内容 测试方法——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...
阅读全文
摘要:一、测试内容 测试方法——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...
阅读全文
摘要:一、测试内容 测试方法——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...
阅读全文
摘要:一、测试内容 测试方法——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相同,只..
阅读全文