摘要:
作者:zyl910 关于SIMD(MMX、SSE、AVX)编程的资料一直很零散,于是我试图进行收集整理,便于随时翻阅学习。而且很多代码是直接用汇编写的,易读性差、难以重用,于是我决定将其统一改写为Intrinsics函数版。一、Instructions函数对照表 在使用Instructions函数时,很多时候会发现MSDN说的不详细,这时只有去翻阅Intel、AMD文档了。但Intel、AMD文档都是按照汇编指令名排序的,查起来不太方便。 而且SIMD指令大多很复杂,文字描述难以详细的解释其功能,唯有伪代码才能精确的解释其功能。但Intel、AMD文档上的伪代码大多很长,不适合随时翻阅。... 阅读全文
摘要:
在上一篇文章里,给大家讲解了24位图像水平翻转(FlipX)算法,其中用到了一个关键方法——YShuffleX3Kernel。一些读者对它背后的原理感兴趣——为什么它在跨平台时运行也能获得SIMD硬件加速, 各种向量指令集的情况下具体怎样实现的?于是本文便详细解答一下。 一、为什么它在跨平台时运行也 阅读全文
摘要:
在上一篇文章里,给大家讲解了32位图像水平翻转(FlipX)算法,于是本文来探讨更加复杂的24位图像水平翻转算法。 本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在 X86(Sse、Avx等指令集)及Arm(AdvSimd等指令集)等架构上运行,且均享有SIMD硬 阅读全文
摘要:
在上一篇文章里,我们讲解了图像的垂直翻转(FlipY)算法,于是本文来探讨水平翻转(FlipX)。先讲解比较容易的32位图像水平翻转算法,便于后续文章来探讨复杂的24位图像水平翻转算法。 本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在 X86(Sse、Avx等指 阅读全文
摘要:
目录一、标量算法1.1 算法实现1.2 基准测试代码二、向量算法2.1 算法思路2.1.1 解决非整数倍带来的难点2.2 算法实现2.3 基准测试代码三、使用系统所提供的MemoryCopy方法进行复制四、对算法进行检查五、基准测试结果5.1 X86 架构5.2 Arm 架构5.3 .NET Fra 阅读全文
摘要:
在上一篇文章里,我们讲解了“Bgr24彩色位图转为Gray8灰度位图”算法。本文将探讨“Bgr24彩色位图转为灰度的Bgr24位图”。区别在于目标位图也是Bgr24格式的,只是将像素数据由彩色转为了灰度。这些算法也是跨平台的,同一份源代码,能在 X86及Arm架构上运行,且均享有SIMD硬件加速。 阅读全文
摘要:
将彩色位图转为灰度位图,是图像处理的常用算法。本文将介绍 Bgr24彩色位图转为Gray8灰度位图的算法,除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在 X86(Sse、Avx等指令集)及Arm(AdvSimd指令集)等架构上运行,且均享有SIMD硬件加速。 修订历 阅读全文
摘要:
目录支持 X86架构的Avx512系列指令集支持Avx512时的输出信息支持 Wasm架构及PackedSimd指令集支持PackedSimd时的输出信息VectorTraits.Benchmarks.Wasm 使用说明新增了向量方法支持 .NET 8.0 新增的向量方法提供交织与解交织的向量方法Y 阅读全文
摘要:
原文链接:https://devblogs.microsoft.com/dotnet/dotnet-8-hardware-intrinsics/Hardware Intrinsics in .NET 8Tanner Gooding [MSFT]December 11th, 2023 译文: .NET 阅读全文
摘要:
作者: zyl910 发现.NET8增加了Arm架构的多寄存器的查表函数(VectorTableLookup/VectorTableLookupExtension),这给编写SIMD向量化算法带来了方便。 一、指令说明 在学习Arm的AdvSimd(Neon)指令集时,发现它的Lookup(查表)功 阅读全文
摘要:
目录支持 x86的Sse系列指令集为 Vector128/Vector256 补充全部的向量方法提供CPU型号信息结果范例1: X86 CPU on Windows结果范例2: Arm CPU on Linux结果范例3: Arm CPU on Mac OS提供所支持的指令集信息结果范例1: X86 阅读全文
摘要:
发布 VectorTraits v1.0, 它是C#下增强SIMD向量运算的类库 VectorTraits: SIMD Vector type traits methods (SIMD向量类型的特征方法). NuGet: https://www.nuget.org/packages/VectorTr 阅读全文
摘要:
作者: [zyl910](http://www.cnblogs.com/zyl910/) [TOC] ## 一、引言 前面的几篇文章里,介绍了 C# 编写向量算法的各种办法。 虽然也做了一些基准测试,初步验证了向量算法的效率高。但是由于 CPU睿频、其他进程抢占CPU资源 等原因,基准测试的结果不太 阅读全文
摘要:
作者: [zyl910](http://www.cnblogs.com/zyl910/) [TOC] ## 一、引言 C#没有直接提供对数据进行重新解释(C++的 reinterpret_cast)的功能,而在使用向量类型时,经常需要做这种操作。例如 [第2篇文章](https://www.cnbl 阅读全文
摘要:
作者: zyl910 在前一篇文章(在亚马逊AWS上创建ARM服务器并配置好RDP远程桌面连接的心得)里,我们成功在亚马逊AWS上创建了Ubuntu系统的ARM服务器。现在准备在该服务器上安装 .NET SDK。 一、尝试 apt-get 安装 首先尝试了之前在 x86 处理器的Ubuntu系统上安 阅读全文
摘要:
作者: zyl910 听说亚马逊AWS上能创建ARM服务器,且亚马逊云服务器能免费使用12个月,于是我尝试了一下。还尝试了在创建的ARM服务器上装好了Ubuntu桌面,并配置好RDP远程桌面连接,从而能够通过Windows的“远程桌面连接”程序来远程操作它。 其实网上的资料已经很详细了,故摘录其他文 阅读全文
摘要:
作者: zyl910 一、背景 从.NET Core 1.0(或 .NET Framework 4.5、.NET Standard 1.0)开始,.NET中便可以使用具有SIMD硬件加速的向量类型了。 其中大小与硬件相关的向量(Vectors with a hardware dependent si 阅读全文
摘要:
作者: 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版算法做循 阅读全文
摘要:
作者: zyl910 一、缘由 在 上一篇文章,介绍了.NET的2种向量类型(Vector4、Vector<T>)。本文来介绍第3种。 .NET Core 3.0 增加了对内在函数(Intrinsics Functions)的支持,并增加了第3种向量类型—— 3. 总位宽固定的向量(Vector o 阅读全文
摘要:
作者: zyl910 一、缘由 从.NET Core 1.0开始,.NET里增加了2种向量类型—— 大小固定的向量(Vectors with a fixed size)。例如 结构体(struct) Vector2、Vector3、Vector4。 大小与硬件相关的向量(Vectors with a 阅读全文
摘要:
作者: zyl910 一、缘由 上一篇文章“用于分析26种画布合成模式(globalCompositeOperation)的演示页面”给出了便于测试的演示页面,现在探究一下合成模式的计算公式。 在网上搜索了一下,发现W3C《Compositing and Blending Level 1》对合成模式 阅读全文
摘要:
作者: zyl910 一、缘由 Html5画布(Canvas)的上下文(Context2D)提供globalCompositeOperation属性,可用于控制图形的绘制时的合成模式。 查了一下文档,发现多达共有26种合成模式。且文字介绍很简略,部分模式看不太懂。 于是我编写了一个功能丰富的演示页面 阅读全文
摘要:
作者: zyl910 一、原初 .NET平台很早就提供了条件编译的语法(#if)。 但是当时官方未制定标准的条件编译符号(Conditional compilation symbols)的名称,而是让各程序自行约定。 由于早期只有“.NET Framework”这一种平台,且每次升级都是向下兼容的。 阅读全文
摘要:
作者: zyl910 一、缘由 上一篇文章演示了无需解压的替换zip内文件的技术原理。本文准备编写一个实际的例子——演示修改zip内的txt文件,在后面追加文本。 二、封装zip内文件处理的函数 因为替换zip内文件是一个比较常用的功能,于是考虑将zip压缩流的处理封装为一个函数。这就实现了解耦,使 阅读全文
摘要:
作者: zyl910 一、缘由 有些时候需要替换zip内的文件。 网上的办法大多是——先解压,然后对解压目录替换文件,最后再重新压缩。该办法需要比较繁琐,且需要一个临时目录。 于是想找无需解压的方案。 后来找到利用 ZipInputStream、ZipOutputStream 实现该功能的办法。 二 阅读全文
摘要:
作者: zyl910 一、缘由 现在zip类的文件越来越多了,例如jar、docx。 有时我们需批量处理这些文件中的数据,若都是手工操作的话就太麻烦了。于是考虑编程自动处理。 Java提供了ZipInputStream等zip的操作类。但是有些内容比较抽象,没有代码范例的话有点难以理解。例如zip中 阅读全文
摘要:
一、问题 今天遇到了一个神奇的问题——表中有数据,但select count( )的结果为0。 这个问题最初的表现形式是“查询报表没有分页”。 最开始还以为是java端的问题。后来才发现,查分页的sql语句是返回0的。 随后将该sql语句放到PLSQL里运行,发现也是返回0条。 数据库版本是 Ora 阅读全文
摘要:
作者: "zyl910" 一、缘由 在项目开发时,因为运行环境的不同,导致有时得分别为不同的环境,切换配置参数打不同war包。但手工切换配置文件的话,不仅费时费力,而且容易出错。 有些打包工具支持配置切换。这样我们只要配好有那几组参数,然后便可分别打war包了。但该办法还是存在多个war文件易搞错的 阅读全文
摘要:
作者: "zyl910" 一、缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写。 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的操作的。 但是有些时候工作量很小,感觉专门为BLOB字节级操作而专门开发个程序,是比较麻烦的。于 阅读全文
摘要:
作者: "zyl910" 一、缘由 NLog是一个很好用的日志类库。利用它,可以很方便的将日志输出到 调试器、文件 等目标,还支持输出到窗体界面中的RichTextBox等目标。 而且它还支持在运行时修改配置,例如可用于实现这样的需求——在界面上做个下拉框,可动态调整RichTextBox的日志级别 阅读全文
摘要:
作者: "zyl910" 一、缘由 最近有在对接一个无证书的HTTPS接口时,总是收到“SSLHandshakeException: DHPublicKey does not comply to algorithm constraints”异常。 通过浏览器、telnet测试了接口地址,确认了TCP 阅读全文
摘要:
如今京东的商品列表已经没有“自营”筛选了,只有“京东物流”筛选。导致找商品时不方便。 于是我开发了一下Chrome插件——SelectJd(京东自营筛选器)。 SelectJd (京东自营筛选器) 是一个谷歌浏览器扩展. 用于在 jd.com 筛选自营商品。 功能特性—— 隐藏: 隐藏非自营的商品, 阅读全文
摘要:
作者: "zyl910" 一、缘由 RSA是一种常用的非对称加密算法。所以有时需要在不用编程语言中分别使用RSA的加密、解密。例如用Java做后台服务端,用C 开发桌面的客户端软件时。 由于 .Net、Java 的RSA类库存在很多细节区别,尤其是它们支持的密钥格式不同。导致容易出现“我加密的数据对 阅读全文
摘要:
作者: "zyl910" 一、缘由 在Silverlight中使用反射动态访问时,经常遇到“System.MethodAccessException: 安全透明方法 XXX 无法使用反射访问……”等错误。 其中最常见的情况,是因为这些成员具有 安全关键(SecuritySafeCritical)的特 阅读全文
摘要:
作者: "zyl910" 一、问题 今天需要调试一个SilverLight程序。运行时ie弹出了一个升级提示,于是手贱点了升级。 随后便悲剧了,VS调试时报“无法启动调试 未安装 Silverlight Developer 运行时。请安装一个匹配版本”。 打开控制面板里的“卸载或更改程序”,发现版本 阅读全文
摘要:
作者: "zyl910" [TOC] 一、缘由 由于在ES6之前,JavaScript中没有定义类(class)语法。导致大家用各种五花八门的办法来定义类,代码风格不统一。而且对于模拟面向对象的三大支柱“封装”、“继承”、“多态”,更是有许多专门的深度研究,实现办法更加复杂,不利于JavaScrip 阅读全文
摘要:
作者: "zyl910" 一、缘由 在很多的面向对象编程语言中,我们可以使用命名空间(namespace)来组织代码,避免全局变量污染、命名冲突。遗憾的是,JavaScript中并不提供对命名空间的原生支持。 有不少人提出各种办法在JavaScript中模拟命名空间,但这些办法存在以下问题—— 1. 阅读全文
摘要:
作者: "zyl910" 一、工具比较 为了让前端JavaScript程序更具可维护性,更利于团队开发,文档非常重要。此时便需要使用自动化文档工具了。 我对比了各种JavaScript自动化文档工具,发现JSDuck最适合我。它的优点有—— 生成文档的易读性高,界面美观。 文档注释的语法简单,功能丰 阅读全文
摘要:
作者: "zyl910" 一、缘由 XML序列化是一个很常用的功能,但对于.NET Core/Standard,其直到2.0版才内置支持XML序列化。具体来说, .NET Core 2.0 或 .NET Standard 2.0 才有 "XmlIgnoreAttribute" 类,而1.X版(.NE 阅读全文
摘要:
作者: "zyl910" 一、缘由 当创建 .NET Core/Standard 2.0项目时,VS不会像.NET Framework项目一样自动生成AssemblyInfo.cs文件。 而且,若是手工在项目中加入以前写好的 AssemblyInfo.cs 文件,编译时会报告“CS0579: Dup 阅读全文
摘要:
作者: "zyl910" 一、缘由 最近遇到了一个奇怪的问题——明明已经在VS2017里装好了 .NET Core 2.0 SDK,且测试过新建一个 .NET Core 2.0控制台项目能成功使用。但是在项目目录中实际使用新建.NET Core 2.0控制台项目时,会遇到不支持 .NET Core 阅读全文