zyl910

优化技巧、硬件体系、图像处理、图形学、游戏编程、国际化与文本信息处理。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

摘要: 作者:zyl910 关于SIMD(MMX、SSE、AVX)编程的资料一直很零散,于是我试图进行收集整理,便于随时翻阅学习。而且很多代码是直接用汇编写的,易读性差、难以重用,于是我决定将其统一改写为Intrinsics函数版。一、Instructions函数对照表 在使用Instructions函数时,很多时候会发现MSDN说的不详细,这时只有去翻阅Intel、AMD文档了。但Intel、AMD文档都是按照汇编指令名排序的,查起来不太方便。 而且SIMD指令大多很复杂,文字描述难以详细的解释其功能,唯有伪代码才能精确的解释其功能。但Intel、AMD文档上的伪代码大多很长,不适合随时翻阅。... 阅读全文
posted @ 2012-04-26 21:53 zyl910 阅读(6821) 评论(0) 推荐(2) 编辑

2024年12月11日

摘要: 在上一篇文章里,给大家讲解了24位图像水平翻转(FlipX)算法,其中用到了一个关键方法——YShuffleX3Kernel。一些读者对它背后的原理感兴趣——为什么它在跨平台时运行也能获得SIMD硬件加速, 各种向量指令集的情况下具体怎样实现的?于是本文便详细解答一下。 一、为什么它在跨平台时运行也 阅读全文
posted @ 2024-12-11 22:37 zyl910 阅读(44) 评论(2) 推荐(0) 编辑

2024年12月4日

摘要: 在上一篇文章里,给大家讲解了32位图像水平翻转(FlipX)算法,于是本文来探讨更加复杂的24位图像水平翻转算法。 本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在 X86(Sse、Avx等指令集)及Arm(AdvSimd等指令集)等架构上运行,且均享有SIMD硬 阅读全文
posted @ 2024-12-04 21:44 zyl910 阅读(19) 评论(0) 推荐(0) 编辑

2024年12月1日

摘要: 在上一篇文章里,我们讲解了图像的垂直翻转(FlipY)算法,于是本文来探讨水平翻转(FlipX)。先讲解比较容易的32位图像水平翻转算法,便于后续文章来探讨复杂的24位图像水平翻转算法。 本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在 X86(Sse、Avx等指 阅读全文
posted @ 2024-12-01 22:01 zyl910 阅读(41) 评论(0) 推荐(0) 编辑

2024年11月30日

摘要: 目录一、标量算法1.1 算法实现1.2 基准测试代码二、向量算法2.1 算法思路2.1.1 解决非整数倍带来的难点2.2 算法实现2.3 基准测试代码三、使用系统所提供的MemoryCopy方法进行复制四、对算法进行检查五、基准测试结果5.1 X86 架构5.2 Arm 架构5.3 .NET Fra 阅读全文
posted @ 2024-11-30 03:08 zyl910 阅读(41) 评论(0) 推荐(0) 编辑

2024年11月21日

摘要: 在上一篇文章里,我们讲解了“Bgr24彩色位图转为Gray8灰度位图”算法。本文将探讨“Bgr24彩色位图转为灰度的Bgr24位图”。区别在于目标位图也是Bgr24格式的,只是将像素数据由彩色转为了灰度。这些算法也是跨平台的,同一份源代码,能在 X86及Arm架构上运行,且均享有SIMD硬件加速。 阅读全文
posted @ 2024-11-21 00:37 zyl910 阅读(34) 评论(0) 推荐(0) 编辑

2024年11月19日

摘要: 将彩色位图转为灰度位图,是图像处理的常用算法。本文将介绍 Bgr24彩色位图转为Gray8灰度位图的算法,除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在 X86(Sse、Avx等指令集)及Arm(AdvSimd指令集)等架构上运行,且均享有SIMD硬件加速。 修订历 阅读全文
posted @ 2024-11-19 23:05 zyl910 阅读(73) 评论(0) 推荐(0) 编辑

2024年11月9日

摘要: 目录支持 X86架构的Avx512系列指令集支持Avx512时的输出信息支持 Wasm架构及PackedSimd指令集支持PackedSimd时的输出信息VectorTraits.Benchmarks.Wasm 使用说明新增了向量方法支持 .NET 8.0 新增的向量方法提供交织与解交织的向量方法Y 阅读全文
posted @ 2024-11-09 22:13 zyl910 阅读(43) 评论(0) 推荐(0) 编辑

2024年4月13日

摘要: 原文链接:https://devblogs.microsoft.com/dotnet/dotnet-8-hardware-intrinsics/Hardware Intrinsics in .NET 8Tanner Gooding [MSFT]December 11th, 2023 译文: .NET 阅读全文
posted @ 2024-04-13 22:31 zyl910 阅读(247) 评论(1) 推荐(2) 编辑

2024年3月23日

摘要: 作者: zyl910 发现.NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension),这给编写SIMD向量化算法带来了方便。 一、指令说明 在学习Arm的AdvSimd(Neon)指令集时,发现它的Lookup(查表)功 阅读全文
posted @ 2024-03-23 22:48 zyl910 阅读(178) 评论(0) 推荐(1) 编辑

2024年3月17日

摘要: 目录支持 x86的Sse系列指令集为 Vector128/Vector256 补充全部的向量方法提供CPU型号信息结果范例1: X86 CPU on Windows结果范例2: Arm CPU on Linux结果范例3: Arm CPU on Mac OS提供所支持的指令集信息结果范例1: X86 阅读全文
posted @ 2024-03-17 17:30 zyl910 阅读(69) 评论(1) 推荐(0) 编辑

2023年9月8日

摘要: 发布 VectorTraits v1.0, 它是C#下增强SIMD向量运算的类库 VectorTraits: SIMD Vector type traits methods (SIMD向量类型的特征方法). NuGet: https://www.nuget.org/packages/VectorTr 阅读全文
posted @ 2023-09-08 00:23 zyl910 阅读(204) 评论(4) 推荐(2) 编辑

2023年8月19日

摘要: 作者: [zyl910](http://www.cnblogs.com/zyl910/) [TOC] ## 一、引言 前面的几篇文章里,介绍了 C# 编写向量算法的各种办法。 虽然也做了一些基准测试,初步验证了向量算法的效率高。但是由于 CPU睿频、其他进程抢占CPU资源 等原因,基准测试的结果不太 阅读全文
posted @ 2023-08-19 18:56 zyl910 阅读(212) 评论(0) 推荐(0) 编辑

2023年7月30日

摘要: 作者: [zyl910](http://www.cnblogs.com/zyl910/) [TOC] ## 一、引言 C#没有直接提供对数据进行重新解释(C++的 reinterpret_cast)的功能,而在使用向量类型时,经常需要做这种操作。例如 [第2篇文章](https://www.cnbl 阅读全文
posted @ 2023-07-30 15:04 zyl910 阅读(430) 评论(2) 推荐(1) 编辑

2022年11月28日

摘要: 作者: zyl910 在前一篇文章(在亚马逊AWS上创建ARM服务器并配置好RDP远程桌面连接的心得)里,我们成功在亚马逊AWS上创建了Ubuntu系统的ARM服务器。现在准备在该服务器上安装 .NET SDK。 一、尝试 apt-get 安装 首先尝试了之前在 x86 处理器的Ubuntu系统上安 阅读全文
posted @ 2022-11-28 22:36 zyl910 阅读(1439) 评论(1) 推荐(1) 编辑

2022年11月27日

摘要: 作者: zyl910 听说亚马逊AWS上能创建ARM服务器,且亚马逊云服务器能免费使用12个月,于是我尝试了一下。还尝试了在创建的ARM服务器上装好了Ubuntu桌面,并配置好RDP远程桌面连接,从而能够通过Windows的“远程桌面连接”程序来远程操作它。 其实网上的资料已经很详细了,故摘录其他文 阅读全文
posted @ 2022-11-27 22:16 zyl910 阅读(1401) 评论(0) 推荐(0) 编辑

2022年11月20日

摘要: 作者: zyl910 一、背景 从.NET Core 1.0(或 .NET Framework 4.5、.NET Standard 1.0)开始,.NET中便可以使用具有SIMD硬件加速的向量类型了。 其中大小与硬件相关的向量(Vectors with a hardware dependent si 阅读全文
posted @ 2022-11-20 21:51 zyl910 阅读(449) 评论(0) 推荐(1) 编辑

2022年11月16日

摘要: 作者: zyl910 目录一、背景1.1 循环展开简介1.2 测试准备二、在C#中使用2.1 对基础算法做循环展开2.1.1 测试结果:2.2 对 Vector4 版算法做循环展开2.2.1 测试结果:2.3 对 Vector<T> 版算法做循环展开2.3.1 测试结果:2.4 对 Avx版算法做循 阅读全文
posted @ 2022-11-16 23:57 zyl910 阅读(656) 评论(4) 推荐(1) 编辑

2022年9月18日

摘要: 作者: zyl910 一、缘由 在 上一篇文章,介绍了.NET的2种向量类型(Vector4、Vector<T>)。本文来介绍第3种。 .NET Core 3.0 增加了对内在函数(Intrinsics Functions)的支持,并增加了第3种向量类型—— 3. 总位宽固定的向量(Vector o 阅读全文
posted @ 2022-09-18 22:25 zyl910 阅读(810) 评论(2) 推荐(2) 编辑

2022年8月20日

摘要: 作者: zyl910 一、缘由 从.NET Core 1.0开始,.NET里增加了2种向量类型—— 大小固定的向量(Vectors with a fixed size)。例如 结构体(struct) Vector2、Vector3、Vector4。 大小与硬件相关的向量(Vectors with a 阅读全文
posted @ 2022-08-20 11:55 zyl910 阅读(2770) 评论(1) 推荐(9) 编辑

2022年8月7日

摘要: 作者: zyl910 一、缘由 上一篇文章“用于分析26种画布合成模式(globalCompositeOperation)的演示页面”给出了便于测试的演示页面,现在探究一下合成模式的计算公式。 在网上搜索了一下,发现W3C《Compositing and Blending Level 1》对合成模式 阅读全文
posted @ 2022-08-07 00:14 zyl910 阅读(747) 评论(0) 推荐(0) 编辑

2022年7月30日

摘要: 作者: zyl910 一、缘由 Html5画布(Canvas)的上下文(Context2D)提供globalCompositeOperation属性,可用于控制图形的绘制时的合成模式。 查了一下文档,发现多达共有26种合成模式。且文字介绍很简略,部分模式看不太懂。 于是我编写了一个功能丰富的演示页面 阅读全文
posted @ 2022-07-30 23:29 zyl910 阅读(860) 评论(0) 推荐(0) 编辑

2022年4月16日

摘要: 作者: zyl910 一、原初 .NET平台很早就提供了条件编译的语法(#if)。 但是当时官方未制定标准的条件编译符号(Conditional compilation symbols)的名称,而是让各程序自行约定。 由于早期只有“.NET Framework”这一种平台,且每次升级都是向下兼容的。 阅读全文
posted @ 2022-04-16 17:19 zyl910 阅读(3312) 评论(0) 推荐(2) 编辑

2020年8月3日

摘要: 作者: zyl910 一、缘由 上一篇文章演示了无需解压的替换zip内文件的技术原理。本文准备编写一个实际的例子——演示修改zip内的txt文件,在后面追加文本。 二、封装zip内文件处理的函数 因为替换zip内文件是一个比较常用的功能,于是考虑将zip压缩流的处理封装为一个函数。这就实现了解耦,使 阅读全文
posted @ 2020-08-03 21:38 zyl910 阅读(1299) 评论(0) 推荐(0) 编辑

2020年7月16日

摘要: 作者: zyl910 一、缘由 有些时候需要替换zip内的文件。 网上的办法大多是——先解压,然后对解压目录替换文件,最后再重新压缩。该办法需要比较繁琐,且需要一个临时目录。 于是想找无需解压的方案。 后来找到利用 ZipInputStream、ZipOutputStream 实现该功能的办法。 二 阅读全文
posted @ 2020-07-16 20:12 zyl910 阅读(1596) 评论(0) 推荐(0) 编辑

2020年7月14日

摘要: 作者: zyl910 一、缘由 现在zip类的文件越来越多了,例如jar、docx。 有时我们需批量处理这些文件中的数据,若都是手工操作的话就太麻烦了。于是考虑编程自动处理。 Java提供了ZipInputStream等zip的操作类。但是有些内容比较抽象,没有代码范例的话有点难以理解。例如zip中 阅读全文
posted @ 2020-07-14 21:02 zyl910 阅读(1197) 评论(0) 推荐(0) 编辑

2018年8月11日

摘要: 一、问题 今天遇到了一个神奇的问题——表中有数据,但select count( )的结果为0。 这个问题最初的表现形式是“查询报表没有分页”。 最开始还以为是java端的问题。后来才发现,查分页的sql语句是返回0的。 随后将该sql语句放到PLSQL里运行,发现也是返回0条。 数据库版本是 Ora 阅读全文
posted @ 2018-08-11 15:54 zyl910 阅读(3398) 评论(1) 推荐(0) 编辑

2018年5月25日

摘要: 作者: "zyl910" 一、缘由 在项目开发时,因为运行环境的不同,导致有时得分别为不同的环境,切换配置参数打不同war包。但手工切换配置文件的话,不仅费时费力,而且容易出错。 有些打包工具支持配置切换。这样我们只要配好有那几组参数,然后便可分别打war包了。但该办法还是存在多个war文件易搞错的 阅读全文
posted @ 2018-05-25 20:36 zyl910 阅读(3934) 评论(0) 推荐(0) 编辑

2018年5月17日

摘要: 作者: "zyl910" 一、缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写。 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的操作的。 但是有些时候工作量很小,感觉专门为BLOB字节级操作而专门开发个程序,是比较麻烦的。于 阅读全文
posted @ 2018-05-17 20:50 zyl910 阅读(5094) 评论(0) 推荐(0) 编辑

2018年4月21日

摘要: 作者: "zyl910" 一、缘由 NLog是一个很好用的日志类库。利用它,可以很方便的将日志输出到 调试器、文件 等目标,还支持输出到窗体界面中的RichTextBox等目标。 而且它还支持在运行时修改配置,例如可用于实现这样的需求——在界面上做个下拉框,可动态调整RichTextBox的日志级别 阅读全文
posted @ 2018-04-21 21:16 zyl910 阅读(3690) 评论(3) 推荐(0) 编辑

2018年3月7日

摘要: 作者: "zyl910" 一、缘由 最近有在对接一个无证书的HTTPS接口时,总是收到“SSLHandshakeException: DHPublicKey does not comply to algorithm constraints”异常。 通过浏览器、telnet测试了接口地址,确认了TCP 阅读全文
posted @ 2018-03-07 20:06 zyl910 阅读(2962) 评论(0) 推荐(0) 编辑

2018年2月17日

摘要: 如今京东的商品列表已经没有“自营”筛选了,只有“京东物流”筛选。导致找商品时不方便。 于是我开发了一下Chrome插件——SelectJd(京东自营筛选器)。 SelectJd (京东自营筛选器) 是一个谷歌浏览器扩展. 用于在 jd.com 筛选自营商品。 功能特性—— 隐藏: 隐藏非自营的商品, 阅读全文
posted @ 2018-02-17 17:36 zyl910 阅读(1430) 评论(0) 推荐(0) 编辑

2018年2月13日

摘要: 作者: "zyl910" 一、缘由 RSA是一种常用的非对称加密算法。所以有时需要在不用编程语言中分别使用RSA的加密、解密。例如用Java做后台服务端,用C 开发桌面的客户端软件时。 由于 .Net、Java 的RSA类库存在很多细节区别,尤其是它们支持的密钥格式不同。导致容易出现“我加密的数据对 阅读全文
posted @ 2018-02-13 18:39 zyl910 阅读(7585) 评论(1) 推荐(2) 编辑

2018年1月30日

摘要: 作者: "zyl910" 一、缘由 在Silverlight中使用反射动态访问时,经常遇到“System.MethodAccessException: 安全透明方法 XXX 无法使用反射访问……”等错误。 其中最常见的情况,是因为这些成员具有 安全关键(SecuritySafeCritical)的特 阅读全文
posted @ 2018-01-30 22:51 zyl910 阅读(1301) 评论(0) 推荐(0) 编辑

2018年1月4日

摘要: 作者: "zyl910" 一、问题 今天需要调试一个SilverLight程序。运行时ie弹出了一个升级提示,于是手贱点了升级。 随后便悲剧了,VS调试时报“无法启动调试 未安装 Silverlight Developer 运行时。请安装一个匹配版本”。 打开控制面板里的“卸载或更改程序”,发现版本 阅读全文
posted @ 2018-01-04 22:03 zyl910 阅读(648) 评论(0) 推荐(2) 编辑

2017年12月24日

摘要: 作者: "zyl910" [TOC] 一、缘由 由于在ES6之前,JavaScript中没有定义类(class)语法。导致大家用各种五花八门的办法来定义类,代码风格不统一。而且对于模拟面向对象的三大支柱“封装”、“继承”、“多态”,更是有许多专门的深度研究,实现办法更加复杂,不利于JavaScrip 阅读全文
posted @ 2017-12-24 18:16 zyl910 阅读(6912) 评论(2) 推荐(2) 编辑

2017年11月9日

摘要: 作者: "zyl910" 一、缘由 在很多的面向对象编程语言中,我们可以使用命名空间(namespace)来组织代码,避免全局变量污染、命名冲突。遗憾的是,JavaScript中并不提供对命名空间的原生支持。 有不少人提出各种办法在JavaScript中模拟命名空间,但这些办法存在以下问题—— 1. 阅读全文
posted @ 2017-11-09 20:22 zyl910 阅读(11347) 评论(0) 推荐(1) 编辑

2017年10月26日

摘要: 作者: "zyl910" 一、工具比较 为了让前端JavaScript程序更具可维护性,更利于团队开发,文档非常重要。此时便需要使用自动化文档工具了。 我对比了各种JavaScript自动化文档工具,发现JSDuck最适合我。它的优点有—— 生成文档的易读性高,界面美观。 文档注释的语法简单,功能丰 阅读全文
posted @ 2017-10-26 21:23 zyl910 阅读(989) 评论(0) 推荐(1) 编辑

2017年10月4日

摘要: 作者: "zyl910" 一、缘由 XML序列化是一个很常用的功能,但对于.NET Core/Standard,其直到2.0版才内置支持XML序列化。具体来说, .NET Core 2.0 或 .NET Standard 2.0 才有 "XmlIgnoreAttribute" 类,而1.X版(.NE 阅读全文
posted @ 2017-10-04 16:03 zyl910 阅读(919) 评论(0) 推荐(0) 编辑

2017年9月23日

摘要: 作者: "zyl910" 一、缘由 当创建 .NET Core/Standard 2.0项目时,VS不会像.NET Framework项目一样自动生成AssemblyInfo.cs文件。 而且,若是手工在项目中加入以前写好的 AssemblyInfo.cs 文件,编译时会报告“CS0579: Dup 阅读全文
posted @ 2017-09-23 16:19 zyl910 阅读(9399) 评论(0) 推荐(5) 编辑

2017年9月15日

摘要: 作者: "zyl910" 一、缘由 最近遇到了一个奇怪的问题——明明已经在VS2017里装好了 .NET Core 2.0 SDK,且测试过新建一个 .NET Core 2.0控制台项目能成功使用。但是在项目目录中实际使用新建.NET Core 2.0控制台项目时,会遇到不支持 .NET Core 阅读全文
posted @ 2017-09-15 23:05 zyl910 阅读(1254) 评论(0) 推荐(0) 编辑