首页 > 其他分享 >ISA-L库调研

ISA-L库调研

时间:2024-07-19 14:57:19浏览次数:6  
标签:16 SIMD 指令 指令集 寄存器 ISA 调研

本文分享自天翼云开发者社区《ISA-L库调研》,作者:何****尔

1.Intel SIMD指令集

SIMD(single instruction multiple data)单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。以同步方式,在同一时间内执行同一条指令。

以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。

目前主流的支持SIMD相关指令的寄存器有128bit(XMM 指令)、256bit(YMM 指令)这两种容量,这意味着对于64位的机器来说,分别提供了2到4倍的处理能力。

SIMD指令集包括从最早的MMX,到后来的SSE(包括SSE、SSE2、SSE3、SSE4)、AVX,AVX2,再到如今的AVX512指令集。

对于不同的SIMD指令集,运算寄存器组有如下区别:

SSE :XMM0 ~ XMM7 , 提供了8个128位寄存器

SSE(x86-64) : XMM0 ~ XMM15,提供了16个128位寄存器

AVX(AVX-128): XMM0 ~ XMM15,寄存器同于SSE(x86-64),不同于SSE的是,提供了更为多且方便的运算指令,比如使用vshufps代替shufps。

AVX2(AVX-256): YMM0 ~ YMM15,提供了16个256位寄存器。提供了更多的运算指令。

AVX512:ZMM0 ~ ZMM31,提供了32个512位寄存器。提供了更多的运算指令。

数据级并行(Data Level Parallelism):

主要运用了SIMD单指令多数据流技术。通过一个指令,对一组多个相同类型的数据(SIMD也称"数据向量”)进行同一的操作。SIMD指令集可以提供更快的图像,声音,视频数据等运行速度,常见的SIMD指令集有MMX,SSE和AVX。

2.EC中的SIMD

ec使用GF(2^8):所有数都是一字节的

ec中主要操作是矩阵相乘,每次乘法可以通过查指数和对数表实现,也可以通过直接查乘法表实现,乘法表为避免过大,把乘数拆成高四位和低四位,再通过移位相加得到结果。

乘法表:y * u(y固定,u有256种可能),大小为256字节

缩小后的乘法表:y*ul(ul为u的低四位,有16种可能),大小为16字节(128bit);y*uh(uh为u的高四位,有16种可能),大小为16字节。刚好可以放在XMM寄存器里。

使用SIMD实现查表操作并行处理

两个寄存器,一个寄存器放乘法表,一个寄存器放要查的多个乘数

1.参数1:将生成的乘法表放入XMM寄存器

2.参数2:将16个要查询的值放入XMM寄存器(一次查询从从1个字节到16甚至32个字节)

3.执行函数进行查询

同理SIMD还可以并行处理异或操作

同理ec选择GF(2^16),GF(2^32)等多字节数都可实现

在使用SIMD加速有限域运算时,对CPU的最低要求是支持SSSE3扩展指令集

3.isa-l简单介绍

ISA-L全称Intelligent Storage Acceleration Library,是一个主要面向存储领域的在IA架构上加速算法执行速度的函数库,目的在于解决特定于存储市场的计算需求。

ISA-L通过使用高效的SIMD指令和专用指令,最大化的利用CPU的微架构来加速存储算法的计算过程。使用同步API,调用简单,所有性能优化都是面向单核,多线程使用简单安全。

ISA-L底层函数都是使用手工汇编代码编写,调优。通过源码包中的C示例函数,可以非常容易的理解并整合到客户的软件系统中。

ISA-L可以应用到多种操作系统中,它通过了在Linux,BSD以及Windows server上的测试,全面支持Intel 64位硬件平台。

ISA-L中的算法函数覆盖了数据保护,数据完整性,数据安全,数据压缩以及数据加密。

EC(erasure codes) : 类型为Reed-Solomon编码的纠错码,使用了GF(2^8),并且提供了 一些有限域内运算的接口。

CRC(Cyclic Redundancy Check) : 支持iscsi32, ieee32, t10dif, ecma64, iso64, jones64多项式 的循环冗余校验,不同的标准返回的crc长度也是不同的。

Raid(Redundant Array of Independent Disks) : 并不是支持磁盘阵列的标准,而是支持raid 标准中经常需要用到的XOR和P + Q运算。

Igzip(ISA-L GNU ZIP) : 主要支持deflate和inflate算法,同时也支持了GNU ZIP的头部信 息的写入和解析。

4.isa-l使用

/include目录下有一个multibinary.asm汇编文件,该文件提供了一系列的汇编方法名为mbin_dispatch_init,而在ISA-L中的每一种算法都必须注册这个汇编方法,该方法会检查你的CPU flag,来获得支持的指令集,从而进行数据流的分发。

举个例子,当你调用ISA-L中sha256的方法,ISA-L会检测到你的CPU只支持AVX2,那么会把数据流分发到AVX2的汇编算法进行下一步操作。

而当ISA-L分发好了数据流,选定了计算所用的指令集后,就会将数据流从内存填充到具体的寄存器,再调用具体的指令集进行算法计算。

举个例子,当用户需要计算多个数据的hash结果时,用户将数据放到内存中,组成一个char *的数组。再调用ISA-L的接口,得到一个存了所有计算好hash的数组。

而在中间过程中,无论用户放到内存中的数组有多长,ISA-L每次只取出固定lane的数据进行计算(lane指的是一次计算能处理的最大长度,比如名为sha256_mb_x16_avx512.asm实现的axv512版本的sha256,x16代表了一次可以取16个lane的数据,对应到数组为取16个元素),但是用户输入的数据中,单个元素中的char *长度可能有长有短,因为数据过长,在第一次hash过程中,只处理了部分数据,得到了一个中间值,那么它将加入下一轮计算,而data1已经计算完成了,那么会填充到内存中,不再经过下一轮计算。

标签:16,SIMD,指令,指令集,寄存器,ISA,调研
From: https://www.cnblogs.com/developer-tianyiyun/p/18311478

相关文章

  • iOS开发基础131-isa指针
    iOS中isa指针是Objective-C对象内部的一个重要概念,它是实现对象与类之间关系的核心机制。深入理解isa指针对掌握Objective-C的底层运行机制和对象模型非常重要。1.什么是isa指针每个Objective-C对象都有一个isa指针,它指向这个对象所属的类。类本身也有一个isa指针,指向其元类(met......
  • PHP + Swoole 与 Go 技术选型对比调研报告
    1.引言在高并发场景下,选择合适的技术栈至关重要。PHP+Swoole和Go都是当前流行的技术选型,但它们在性能、开发效率、易用性等方面各有优劣。本报告将从多个维度对比这两种技术,帮助开发者做出更合适的选择。2.技术概述PHP+SwooleSwoole 是一个高性能的PHP异步并发......
  • 学生办理visa卡
    信用卡学生只能申请零额度的信用卡。信用卡一般要等一周才能拿到手。我申请了中国工商银行星座卡校园版,零额度免年费,在工银e生活申请,几分钟就批准了。要往里面存钱然后再花。工商银行的工作人员说里面不要存太多钱,达到一千块钱就会被风控。据说单位电话填招生办电话即可,不会真......
  • ISA95-Part5-安全和权限管理的设计思路
    1、具体要求:在MES/MOM系统中实现ISA-95标准的安全和权限管理,具体要求通常包括以下几个方面:1.--数据保护--:确保敏感数据通过加密和安全存储来保护,防止数据泄露或被未授权访问。2.--访问控制--:实施基于角色的访问控制(RBAC),确保只有授权用户才能访问相应资源和数据。3.--......
  • linux关于CPU使用率以及psutil真正计算CPU使用率的调研
    不一定准确,只是个人的分析CPU使用率mpstat-u通过查看每个CPU核心的用户进程使用时间(%usr)来计算CPU使用率的。它只考虑了用户进程的CPU使用情况,而不考虑内核进程的CPU使用情况。 这种计算方式会更大CPU使用率=2.19+4.57=6.76 Top将用户进程(us)和内核进程(sy)的CPU使用时间......
  • php:安装phpredisadmin
    一,项目代码地址:https://github.com/erikdubbelboer/phpRedisAdmin二,下载:从命令行用wget下载[root@blogphpredisadmin]#wgethttps://github.com/erikdubbelboer/phpRedisAdmin/archive/refs/tags/v1.20.0.tar.gz下载完成后解压缩[root@blogphpredisadmin]#tar-zxvfv......
  • legged gym(包含isaac gym)丝滑安装教程
    LeggedGym(包含IsaacGym)安装教程——Ubuntu22.04安装IsaacGym安装leggedgym2.1.安装pytorch和cuda:2.2.安装rsl_r2.3.安装legged_gym参考了官方包括网上一堆教程,结合自己遇到的坑,整理了一个比较顺畅的流程,基础环境(例如miniconda或者CUDA)配好的情况下按照本教程......
  • 三维重建工作的一些调研
    GPT关于3D-GS的回答如果我获得了一个3D高斯溅射的表达,给定任意的相机内参和外参,是不是就能生成一副2D图像Yes,givena3DGaussiansplattingrepresentationandtheintrinsicandextrinsiccameraparameters,youcangeneratea2Dimagefromanydesiredviewpoint.......
  • Java面试八股之MYISAM和INNODB有哪些不同
    MYISAM和INNODB有哪些不同MyISAM和InnoDB是MySQL数据库中两种不同的存储引擎,它们在设计哲学、功能特性和性能表现上存在显著差异。以下是一些关键的不同点:事务支持:MyISAM不支持事务,没有回滚或崩溃恢复的能力。InnoDB是事务安全型的,支持事务处理、回滚、行级锁定和外键约......
  • return isPlainObject(res) || Array.isArray(res) ? observer(res, cb) : res; 这个
    这段代码主要是在实现一个深度观察者模式的部分逻辑,用于递归地处理对象和数组,以便在数据结构变化时触发回调。这里的关键是理解条件运算符和函数调用的执行顺序。让我们逐步分析:条件表达式的左侧:isPlainObject(res):这个函数检查res是否是一个纯对象(即普通的JavaScript对象......