zyl910

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

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

随笔分类 -  K20 SIMD_单指令流多数据流

1 2 下一页

SIMD(Single Instruction Multiple Data):单指令流多数据流
摘要:将复数乘法改造为SIMD向量算法,是稍微有一些的难度的。首个难点是需要重新调整元素的位置,才能满足复数乘法公式。而“调整元素的位置”与内存中数据布局有关,不同办法的性能不同。还需考虑优化内存访问等细节。 最近知乎有个 帖子 讨论了该话题,且 hez2010 给出了修正后的基于Avx指令集 Horiz 阅读全文
posted @ 2024-12-28 00:56 zyl910 阅读(52) 评论(0) 推荐(0) 编辑

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

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

摘要:目录一、标量算法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 阅读(48) 评论(0) 推荐(0) 编辑

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

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

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

摘要:目录支持 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 阅读(73) 评论(1) 推荐(0) 编辑

摘要:发布 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 阅读(208) 评论(4) 推荐(2) 编辑

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

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

摘要:作者: 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 阅读(665) 评论(4) 推荐(1) 编辑

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

摘要:作者: 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 阅读(2795) 评论(1) 推荐(9) 编辑

摘要:作者:zyl910。一、更新说明1.1 支持VC2012 VC2012增加了很多Intrinsics函数,详见——http://www.cnblogs.com/zyl910/archive/2012/11/06/intrin_vc2012.html检查了一下VC2012新增的Intrinsics函数集,发现它支持ARM指令和Haswell新指令 根据上述信息改进zintrin,检测到是VC2012时定义相关的宏—— #if _MSC_VER >=1700 // VC2012 #define INTRIN_AVX2 1 // immint... 阅读全文
posted @ 2012-11-07 22:18 zyl910 阅读(2340) 评论(1) 推荐(2) 编辑

摘要:作者:zyl910 之前我整理了一份VC6至VC2010中Intrinsics函数集对应表。现在VS2012发布了,它有没有增加Intrinsics函数集呢?于是我对此进行检查。 若是64位win8系统中默认安装的VS2012,Intrinsics头文件位于“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include”目录。 首先发现多了两个Intrinsics头文件——armintr.h:ARM的常用指令集。arm_neon.h:ARM的neon指令集。 看了一下intrin.h,发现以前大段的ARM Intrinsi... 阅读全文
posted @ 2012-11-06 22:49 zyl910 阅读(4825) 评论(0) 推荐(1) 编辑

摘要:作者:zyl910。 本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX、SSE2指令集。支持vc、gcc编译器,在Windows、Linux、Mac这三大平台上成功运行。一、关键讲解 前文(http://www.cnblogs.com/zyl910/archive/2012/10/22/simdsumfloat.html)演示了如何使用SSE、AVX指令集 处理 单精度浮点数组求和。现在对其进行改造,使用MMX、SSE2指令集 处理 32位整数数组求和。因程序基本上差不多,文本就不详细讲解了,只说关键变化。1.1 指令集简介 先来看看支... 阅读全文
posted @ 2012-10-26 21:24 zyl910 阅读(4180) 评论(0) 推荐(0) 编辑

摘要:作者:zyl910。 本文面对对SSE等SIMD指令集有一定基础的读者,以双精度浮点数组求和为例演示了如何跨平台使用SSE2、AVX指令集。支持vc、gcc编译器,在Windows、Linux、Mac这三大平台上成功运行。一、关键讲解 前文(http://www.cnblogs.com/zyl910/archive/2012/10/22/simdsumfloat.html)演示了如何使用SSE、AVX指令集 处理 单精度浮点数组求和。现在对其进行改造,使用SSE2、AVX指令集 处理 双精度浮点数组求和。因程序基本上差不多,文本就不详细讲解了,只说关键变化。1.1 指令集简介 先来看看支... 阅读全文
posted @ 2012-10-26 17:49 zyl910 阅读(3898) 评论(0) 推荐(0) 编辑

摘要:作者:zyl910。 本文面对对SSE等SIMD指令集有一定基础的读者,以单精度浮点数组求和为例演示了如何跨平台使用SSE、AVX指令集。因使用了stdint、zintrin、ccpuid这三个模块,可以完全避免手工编写汇编代码,具有很高可移植性。支持vc、gcc编译器,在Windows、Linux、Mac这三大平台上成功运行。一、问题背景 最初,我们只能使用汇编语言来编写SIMD代码。不仅写起来很麻烦,而且易读性、可维护性、移植性都较差。 不久,VC、GCC等编译器相继支持了Intrinsic函数,使我们可以摆脱汇编,利用C语言来调用SIMD指令集,大大提高了易读性和可维护。而且移植性... 阅读全文
posted @ 2012-10-22 22:12 zyl910 阅读(22258) 评论(5) 推荐(5) 编辑

摘要:作者:zyl910。 之前的ccpuid V1.02的mmx/sse指令可用性检查存在缺陷。现在的V1.03版改进了mmx/sse指令可用性检查,使用signal、setjmp,能够支持纯C程序。修正了AVX检查Bug。增加多文件链接ccpuid的测试例程。一、更新说明1.1 改进mmx/sse指令可用性检查1.1.1 问题背景 以前是使用结构化异常处理来确认当前环境是否能运行mmx/sse指令的。该方法存在两个问题。 首先,仅有C++支持结构化异常处理,而纯C是不支持的。所以在V1.02版中,是根据__cplusplus宏来做条件编译的。造成仅有C++版支持指令可用性检查,而纯C版没有... 阅读全文
posted @ 2012-10-13 00:01 zyl910 阅读(4920) 评论(1) 推荐(2) 编辑

1 2 下一页