从Intel网站https://software.intel.com/sites/landingpage/IntrinsicsGuide/#expand=5159,5640,5159&text=_mm512_shuffle_epi8

可以得到指令_mm512_shuffle_epi8的解释如下:

__m512i _mm512_shuffle_epi8 (__m512i a, __m512i b)

Synopsis

__m512i _mm512_shuffle_epi8 (__m512i a, __m512i b)

#include <immintrin.h>

Instruction: vpshufb zmm, zmm, zmm

CPUID Flags: AVX512BW

Description

Shuffle packed 8-bit integers in a according to shuffle control mask in the corresponding 8-bit element of b, and store the results in dst.

Operation

FOR j := 0 to 63i := j*8IF b[i+7] == 1dst[i+7:i] := 0ELSEindex[5:0] := b[i+3:i] + (j & 0x30)dst[i+7:i] := a[index*8+7:index*8]FI
ENDFOR
dst[MAX:512] := 0

Performance

Architecture

Latency

Throughput (CPI)

Icelake

-

1

Skylake

1

1

但是看了之后还是一头雾水,自己写了如下一个简单的程序来做实验:

#include <stdio.h>
#include <immintrin.h>
void printU8(char *result)
{for (int i = 0; i < 64; i++){printf("%.2d ", result[i]);}printf("\n");
}void main()
{const __m512i in   = _mm512_set_epi8(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63);const __m512i mask = _mm512_set_epi8(8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7);const __m512i out  = _mm512_shuffle_epi8(in, mask);printf("In:\t");printU8((char *)&in);printf("Mask:\t");printU8((char *)&mask);printf("Out:\t");printU8((char *)&out);
}

使用ICC编译程序输出结果如下:

In:        63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
Mask:   07 06 05 04 03 02 01 00 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 15 14 13 12 11 10 09 08
Out:     56 57 58 59 60 61 62 63 48 49 50 51 52 53 54 55 40 41 42 43 44 45 46 47 32 33 34 35 36 37 38 39 24 25 26 27 28 29 30 31 16 17 18 19 20 21 22 23 08 09 10 11 12 13 14 15 00 01 02 03 04 05 06 07

这样一看,这个指令其实是一次处理4组数据,每组数据里面包含了16个8bits整数,这个分4组是通过伪代码里面的+ (j & 0x30)来实现的。接下来就好理解了,就是根据mask的值来取In里面对应位置的值来存到结果里面,对应伪代码如下:

FOR j := 0 to 15out[j] = in[mask[j]];

用下面的图来表示就更清晰了:

所以这个指令其实就是实现了16个8bits整数的任意交换顺序,比如说字节序的变换。同时,一次可以处理4组这样的数据。

AVX-512指令_mm512_shuffle_epi8分析相关推荐

  1. 英特尔全部cpu列表_程序员大神Linus转投AMD:我希望英特尔的AVX 512指令集「去死」...

    机器之心报道 参与:泽南 「去死吧,AVX 512 指令集.」Linux 提出者林纳斯 · 托瓦兹(Linus Torvalds)说道. Linux 首席架构师,当今全球最著名程序员之一 Linus ...

  2. 发那可g10_FANUC系统宏程序配合G10指令倒角分析

    FANUC系统宏程序配合G10指令倒角分析 湖南科技工业职业技术学院戴继东摘要: G10指令是可编程参数输入指令,在数控编程中经常会碰到倒角或加工曲面的宏程序,但一般编辑较复杂,如果我们可以根据零件结 ...

  3. 操作数栈的字节码指令执行分析

    一:写个demo 二:点击Recompile编译 三:使用javap命令反编译class文件        javap -v 类名.class 四:查看结果 五:分析执行过程 首先bipush意思是把 ...

  4. AMD kernel slub 512内存泄漏分析

    一:问题现象 内存不足导致OOM,kill掉qemu等进程,导致虚拟机异常. 初步排查发现slab内存占用量非常大,达到20G 二:初步定位 通过观察对应的slab信息,发现异常情况. 使用的allo ...

  5. intel PAUSE指令功效分析

    PAUSE指令 Improves the performance of spin-wait loops. When executing a "spin-wait loop," pr ...

  6. 无线充电器出口欧盟CE认证RED指令测试分析

    欧盟关于无线遥控产品.通讯产品,必须符合RED指令(无线电及通讯终端指令)-1999/5/EC要求,最新无线电设备指令按照2014 /53/ EU要求(RED指令).2016年开始强制执行. RED指 ...

  7. 51单片机ADD,ADDC与SUBB指令详细分析

    ADD与ADDC 加法指令: 例如:执行0xfefe+0x0003 由于单片机只能处理8位数据加减法 具体操作如下: /低八位加法// mov r0,#0xfe ;0xfefe 先将低八位给r0寄存器 ...

  8. 【Linux】Linux最常用的20个基本指令 介绍~分析

    什么是 Linux ​ Linux 是一款基于 GNU 通用公共许可协议 的 自由和开放源代码 的类UNIX操作系统,该操作系统的内核由 Linus Torvalds 在1991年首次发布.之后,在加 ...

  9. 单指令多数据SIMD的SSE/AVX指令集和API

    https://software.intel.com/sites/landingpage/IntrinsicsGuide/# Technologies MMX SSE SSE2 SSE3 SSSE3 ...

最新文章

  1. 64位ubuntu安装32位编译器
  2. python代码安全扫描工具
  3. Linux多线程实践(8) --Posix条件变量解决生产者消费者问题
  4. pve 群晖 virtio速度慢_群晖DS Note高级教程——教你使用智能记事本
  5. Python数理统计
  6. Vue的列表渲染指令
  7. JAVA手写ArrayList以及LinkedList
  8. python if _name_==_main__如何理解Python中的if __name__ == ‘__main__’
  9. shell、ftp、mysql如何连接笔记
  10. TorchNet的学习笔记
  11. Retrofit的讲解和使用
  12. mac环境下安装mysql
  13. Java后台开发常用工具集合
  14. TP-LINK TL-WR845N和腾达W311R怎么设置wds桥接
  15. 【Cubase11】音乐工作站:宿主软件 - 基础入门笔记
  16. 8个设计师必看的免费UI图标设计资源站
  17. 武汉大学.计算机学院.密码学,密码学教学课件-武汉大学计算机学院.ppt
  18. 【python】微信公众号开发
  19. FRP 内网穿透下载配置
  20. 楼盘字典为什么能成为贝壳的超级护城河?

热门文章

  1. 正则校验IP及端口和域名和手机号、座机同步校验
  2. 【枚举与countDownLatch的应用】
  3. Extreme DAX中文第1章 商业智能中的DAX
  4. 重装window系统总结
  5. 如何在分析崩溃的边缘分析问题
  6. 电脑英语Computer English
  7. Web大学生网页作业成品:基于html制作中国科技发展网站设计题材【航天之路7页】HTML+CSS+JavaScript
  8. mysql创建表里主码和外码_外码必须是另一个关系的主码吗?主键主码 外键外码是同一个东西吗?...
  9. 蓝牙耳机通话降噪哪个效果好?目前降噪效果最好的耳机推荐
  10. 华为鸿蒙系统界面清新,华为鸿蒙系统:全新UI界面