首页 > 其他分享 >AVX256指令集

AVX256指令集

时间:2024-03-02 22:00:11浏览次数:23  
标签:__ mm256 16 整数 AVX256 m128i 指令集 m256i

所有函数

16 位/32位/8位有符号整数向量的绝对值

__m256i _mm256_abs_epi16 (__m256i a)
__m256i _mm256_abs_epi32 (__m256i a)
__m256i _mm256_abs_epi8 (__m256i a)

分别获取16个16位/8个32位/32个8位有符号整数向量的取绝对值的结果。

16 位/32位/64位/8位有符号整数向量的相加

__m256i _mm256_add_epi16 (__m256i a, __m256i b)
__m256i _mm256_add_epi32 (__m256i a, __m256i b)
__m256i _mm256_add_epi64 (__m256i a, __m256i b)
__m256i _mm256_add_epi8 (__m256i a, __m256i b)

分别获取16个16位/8个32位/4个64位/32个8位有符号整数向量的对应相加的结果。

16 位/8位有符号/16位/8位无符号整数向量的包和处理相加

__m256i _mm256_adds_epi16 (__m256i a, __m256i b)
__m256i _mm256_adds_epi8 (__m256i a, __m256i b)
__m256i _mm256_adds_epu16 (__m256i a, __m256i b)
__m256i _mm256_adds_epu8 (__m256i a, __m256i b)

对于有符号整数,饱和处理会将结果限制在特定的范围内,以防止溢出。例如,如果进行加法运算时结果超过了有符号整数的最大值(例如,对于16位有符号整数,最大值为32767),饱和处理会将结果设为最大值(32767);如果结果小于最小值(例如,对于16位有符号整数,最小值为-32768),饱和处理会将结果设为最小值(-32768)。相当于clamp了一下。

没明白的指令

__m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int imm8)
__m256i _mm256_blend_epi16 (__m256i a, __m256i b, const int imm8)
__m128i _mm_blend_epi32 (__m128i a, __m128i b, const int imm8)
__m256i _mm256_blend_epi32 (__m256i a, __m256i b, const int imm8)
__m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask)
__m128i _mm_broadcastb_epi8 (__m128i a)
__m256i _mm256_broadcastb_epi8 (__m128i a)
__m128i _mm_broadcastd_epi32 (__m128i a)
__m256i _mm256_broadcastd_epi32 (__m128i a)
__m128i _mm_broadcastq_epi64 (__m128i a)
__m256i _mm256_broadcastq_epi64 (__m128i a)
__m128d _mm_broadcastsd_pd (__m128d a)
__m256d _mm256_broadcastsd_pd (__m128d a)
__m256i _mm_broadcastsi128_si256 (__m128i a)
__m256i _mm256_broadcastsi128_si256 (__m128i a)
__m128 _mm_broadcastss_ps (__m128 a)
__m256 _mm256_broadcastss_ps (__m128 a)
__m128i _mm_broadcastw_epi16 (__m128i a)
__m256i _mm256_broadcastw_epi16 (__m128i a)

对两个 256 位整数寄存器中的对应元素执行按位与操作

__m256i _mm256_and_si256 (__m256i a, __m256i b)

两个 256 位整数寄存器中的对应元素执行按位非与操作

__m256i _mm256_andnot_si256 (__m256i a, __m256i b)

对两个 256 位整数寄存器中的对应元素执行无符号16位/8位整数平均值计算

__m256i _mm256_avg_epu16 (__m256i a, __m256i b)
__m256i _mm256_avg_epu8 (__m256i a, __m256i b)

将 256 位整数寄存器中的数据向左/向右移动指定数量的字节

__m256i _mm256_bslli_epi128 (__m256i a, const int imm8)
__m256i _mm256_bsrli_epi128 (__m256i a, const int imm8)

两个 256 位整数寄存器中的对应元素执行相等性比较。

__m256i _mm256_cmpeq_epi16 (__m256i a, __m256i b)
__m256i _mm256_cmpeq_epi32 (__m256i a, __m256i b)
__m256i _mm256_cmpeq_epi64 (__m256i a, __m256i b)
__m256i _mm256_cmpeq_epi8 (__m256i a, __m256i b)

如果相等则相应位置的结果为全1(0xFFFF/0xFFFFFFFF/0xFFFFFFFFFFFFFFFF/0xFF),否则为全0

两个 256 位整数寄存器中的对应元素执行大于的比较

__m256i _mm256_cmpgt_epi16 (__m256i a, __m256i b)
__m256i _mm256_cmpgt_epi32 (__m256i a, __m256i b)
__m256i _mm256_cmpgt_epi64 (__m256i a, __m256i b)
__m256i _mm256_cmpgt_epi8 (__m256i a, __m256i b)

如果大于则相应位置的结果为全1(0xFFFF/0xFFFFFFFF/0xFFFFFFFFFFFFFFFF/0xFF),否则为全0

将 128 位整数寄存器中的 m 位有符号整数扩展为 n 位整数

__m256i _mm256_cvtepi16_epi32 (__m128i a)
__m256i _mm256_cvtepi16_epi64 (__m128i a)
__m256i _mm256_cvtepi32_epi64 (__m128i a)
__m256i _mm256_cvtepi8_epi16 (__m128i a)
__m256i _mm256_cvtepi8_epi32 (__m128i a)
__m256i _mm256_cvtepi8_epi64 (__m128i a)
__m256i _mm256_cvtepu16_epi32 (__m128i a)
__m256i _mm256_cvtepu16_epi64 (__m128i a)
__m256i _mm256_cvtepu32_epi64 (__m128i a)
__m256i _mm256_cvtepu8_epi16 (__m128i a)
__m256i _mm256_cvtepu8_epi32 (__m128i a)
__m256i _mm256_cvtepu8_epi64 (__m128i a)

以上的mn分别为16/16/32/8/8/8/16/16/32/8/8/8和32/64/64/16/32/64/32/64/64/16/32/64

从 256 位整数寄存器中按照索引index提取一个m位整数。

int _mm256_extract_epi16 (__m256i a, const int index)
int _mm256_extract_epi8 (__m256i a, const int index)

m分别为16和8

从 256 位整数寄存器中提取一个 128 位整数寄存器

__m128i _mm256_extracti128_si256 (__m256i a, const int imm8)

imm8为0取低128位,1取高128位

标签:__,mm256,16,整数,AVX256,m128i,指令集,m256i
From: https://www.cnblogs.com/CallMeRoot/p/18049321

相关文章

  • VS2019自带的增强型指令集和自我优化的版本速度比较.
    去年年底把工程项目由VS的2015升级到2019版本,本以为直接配置下运行环境就可以了,但是一编译发现一大堆错误,所有的错误都指向一系列的指令集,比如_mm_exp_ps、_mm_log_ps、_mm_pow_ps等等,后面发现原来从2019版本开始,编译器已经自带了这些常用的函数,所以自己函数和系统的重名了,也......
  • [转帖]AVX-512指令集的前世今生
    https://zhuanlan.zhihu.com/p/136099964 什么是指令集计算机上的任何程序最终要编译成一条条指令才能让CPU识别并执行,指令集是指CPU能执行的所有指令的集合,每一指令对应一种操作,CPU依靠指令来计算和控制系统,指令执行能力是衡量CPU性能的重要指标,指令集也与CPU效率有密......
  • 指令集,架构,都是什么意思?
    背景:我上网冲浪,经常看到指令集,架构,这都是什么?还有,什么AMD,ARM,我总是分不清,他们是啥? 整理: 问题1:指令集是什么?是一种标准。AI回答:指令集是一种计算机处理器能够理解和执行的指令的集合。指令集架构可以被视为一种标准,因为它定义了处理器与软件之间的接口。问题2:......
  • 图形渲染ISA指令集分析
    图形渲染ISA指令集分析1ISA定义就像任何语言都有有限的单词一样,处理器可以支持的基本指令/基本命令的数量也必须是有限的,这组指令通常称为指令集(instructionset),基本指令的一些示例是加法、减法、乘法、逻辑或和逻辑非。请注意,每条指令需要处理一组变量和常量,最后将结果保存在......
  • CSC3150 指令集
    一个简单且类似Unix的教学操作系统,作为指导您实现间接块以支持大文件管理。在现有实现时,单个间接块可以处理对大文件无效的有限块经营在这个分配中,您将把xv6文件的最大大小增加实现用于进一步扩展的双重间接块。我们建议您在编写代码之前先阅读第8章:文件系统。准备工作mkfs程序......
  • linux指令集
    基础知识~家目录#超级用户$普通用户通配符*匹配任意内容(即含有该内容的任意内容)?匹配任意一个字符[]匹配任意一个中括号内的字符切换超级用户sudo-s如遇到拒绝访问,即'permissiondenied'时通常是用户权限不足,应进入su用户e.g.向sysfs文件写入内容时,......
  • turtle海龟绘图指令集合
    turtle.forward(distance)向当前画笔方向移动distance像素长度turtle.backward(distance)向当前画笔相反方向移动distance像素长度turtle.right(degree)顶时针移动degree°角度turtle.left(degree)逆时针移动degree°角度turtle.penup(......
  • 【短道速滑十】非局部均值滤波的指令集优化和加速(针对5*5的搜索特例,可达到单核1080P灰
        非局部均值滤波(NonLocalMeans)作为三大最常提起来的去燥和滤波算法之一(双边滤波、非局部均值、BM3D),也是有着很多的论文作为研究和比较的对象,但是也是有着致命的缺点,速度慢,严重的影响了算法的应用范围。目前在已有的文献中尚未看到在不对算法的本质原理上做更改的情况......
  • 单片机MCS-51指令集
    HexBytesMnemonicOperands001NOP012AJMPcodeaddr023LJMPcodeaddr031RRA041INCA052INCdataaddr061INC@R0071INC@R1081INCR0091INCR10A1INCR20B1INCR30C1INCR40D1INCR50E1IN......
  • esp32-c3通过AT指令集创建SSL加密的TCP客户端
    官方文档https://docs.espressif.com/projects/esp-at/en/latest/esp32c3/Get_Started/index.html步骤fork源码创建新分支按键盘上的.进入编辑界面将如下证书换成目标服务器的证书提交返回到Action页面,等待自动编译完成下载下述文件将factory固件烧录到目标板的地......