https://zhuanlan.zhihu.com/p/677124882

写这篇文章的原因是有个项目需要降低延迟,希望能更快地把512bit的数据从内存搬进PCIe设备。原先的做法是软件写寄存器通知硬件,然后硬件通过PCIe读内存里的512bit。为了降低这个过程的延迟,我们试图改为:软件直接把512bit写入硬件寄存器。这个是FPGA的优势,可以灵活更改硬件逻辑。

因为刚刚好是512bit的长度,我们自然地想到了英特尔的AVX512指令集。通过_mm512_store_si512()的汇编intrinsic,即可通过一个汇编指令,向“内存”写入512bit。测试表明这个操作可以节省大约0.3μs的时间。Intel Intrinsics Guide

_mm512_store_si512()

这里的内存是带引号的,因为实际写入的并不是内存,而是PCIe的寄存器。PCIe寄存器被映射到了虚拟内存空间,这个映射关系可以用cat /proc/ioremap命令查看。在汇编层面,CPU可以像写入内存一样写入PCIe寄存器,让我感到神奇。

也可以注意到,虽然写入512bit只要一个汇编指令,但是这个vmovdqa32 m512, zmm指令的latency是和架构有关的。Skylake架构需要5个周期,而新的架构只要1个周期。这一点在接下来的ARM架构上有更详细的讨(博)论(客)。

从AVX到NEON

出于项目需要,要把这段逻辑移植到ARM上。使用的CPU是ARMv8a指令集,支持NEON指令。

ChatGPT告诉我,上述x86 intrinsic对应的ARM intrinsic是vst1q_u32()。vst1q指的是"vector st1 quad word",在ARMv7上对应的汇编指令是vst1,在ARMv8上是st1。u32指的是无符号32位int。这个intrinsic一次操作4个32位int,也就是128bit,不太满意。于是翻ARM手册,发现了vst1q_u32_x4(),对应的汇编指令是ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm> ,参见Arm A64 Instruction Set Architecture

测试表明这个操作与x86类似,可以节省大约0.3μs的时间。然而ARM测试平台的主频是x86平台的一半,延迟降低的程度不及预期。

CPU写入512bit要多久?

由于使用了FPGA,所以可以通过ILA抓线,看到数据是何时写入FPGA寄存器的。抓线的结果是,x86平台是一次写入512bit,而ARM平台则是分4次,每次写入128bit,因此需要更多的时间(排除CPU频率的影响)。

也就是说,单个ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm> 指令,实际上分了4次写入数据,每次写一个寄存器。然而网上没找到关于这个现象的解释。测试平台的架构是Cortex A72,后来在读A72文档时(Cortex-A72 Software Optimization Guide),发现了这个说明。

再后来读到了这篇【转】国产飞腾D2000:基于A72? - 知乎 (zhihu.com),似乎是国外的CPU爱好者写的分析,

Neoverse N1 还具有两个 FP/矢量执行管道,但具有全宽执行单元。在大多数情况下,N1 每个周期能够完成两个 128 位指令,而 FTC663 只能执行一个。

这个差别似乎涉及到了CPU的执行单元,A72的执行单元每周期只能完成1个128bit指令,而A76架构可以完成2个。

总结

AVX和NEON作为SIMD指令集,一般是用来计算的,经过实测,发现也可以用来加速写入PCIe寄存器。具体的加速效果还与CPU架构有关,单个汇编指令可能需要多个周期才能完成。

多读官方文档,而且要学会寻找自己需要的文档。

[转帖]CPU写入512bit要多久:从AVX到NEON的更多相关文章

  1. [转帖]CPU Cache 机制以及 Cache miss

    CPU Cache 机制以及 Cache miss https://www.cnblogs.com/jokerjason/p/10711022.html CPU体系结构之cache小结 1.What ...

  2. What Your Computer Does While You Wait.CPU的等待有多久?

    原文标题:What Your Computer Does While You Wait 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高 ...

  3. [转帖]CPU 的缓存

    缓存这个词想必大家都听过,其实缓存的意义很广泛:电脑整机最大的缓存可以体现为内存条.显卡上的显存就是显卡芯片所需要用到的缓存.硬盘上也有相对应的缓存.CPU有着最快的缓存(L1.L2.L3缓存等),缓 ...

  4. [转帖]CPU时间片

    CPU时间片 https://www.cnblogs.com/xingzc/p/6077214.html CPU的时间片 CPU的利用率好CPU的 load average 是不一样的 Conntex ...

  5. CPU与内存的那些事

    下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址: ...

  6. 转:CPU与内存的那些事

    下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址: ...

  7. CPU与内存(经典问答)

    原文:http://www.cnblogs.com/xkfz007/archive/2012/10/08/2715163.html 下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如 ...

  8. 【转】CPU与内存的那些事

    下面是网上看到的一些关于内存和CPU方面的一些很不错的文章. 整理如下: 转: CPU的等待有多久? 原文标题:What Your Computer Does While You Wait 原文地址: ...

  9. cpu 乱序执行与问题【转】

    转自:https://blog.csdn.net/lizhihaoweiwei/article/details/50562732 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 ...

  10. 操作系统 | 结合 CPU 理解一行 Java 代码是怎么执行的

    根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. 我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单 ...

随机推荐

  1. --{module_name}_binary_host_mirror和--{module_name}_binary_site

    --{module_name}_binary_host_mirror和--{module_name}_binary_site demo // .npmrc文件 sass_binary_site=htt ...

  2. Java 获取Excel中的表单控件

    Excel中可通过[开发工具]菜单栏下插入表单控件,如文本框.单选按钮.复选框.组合框等等,插入后的控件可执行设置控件格式,如大小.是否锁定.位置.可选文字.数据源区域.单元格链接等.当Excel中已 ...

  3. 电商业务容器化遇瓶颈,公有云Docker镜像P2P加速很安全

    当前,电商平台会采用基于Docker的容器技术来承载618大促期间的一些关键业务版块,包括最简单的商品图片展示.订单详情页面等等. 通过容器化改造,电商平台的每个业务版块解耦,可以独立开发.部署和上线 ...

  4. 从原生迈向混合,小而美团队如何搞定APP高效定制

    摘要:洞悉华为云数字化差旅App的架构变迁之路,体验混合开发魅力. ​​本文分享自华为云社区<DTSE Tech Talk 第21期丨从原生迈向混合,小而美团队如何搞定APP高效定制?>, ...

  5. 这项评测,华为云GaussDB(for MySQL)顺利通过

    摘要:近日,中国信息通信研究院(简称"中国信通院")公布了第十五批"可信数据库"评测结果.华为云GaussDB(for MySQL)凭借过硬的技术实力顺利通过& ...

  6. 动手实践丨基于ModelAtrs使用A2C算法制作登月器着陆小游戏

    摘要:在本案例中,我们将展示如何基于A2C算法,训练一个LunarLander小游戏. 本文分享自华为云社区<使用A2C算法控制登月器着陆>,作者:HWCloudAI . LunarLan ...

  7. AppCube视角浅析: 艾瑞咨询《2022年中国低代码行业研究报告》

    摘要:近日,艾瑞咨询发布了<2022年中国低代码行业研究报告>,报告从企业数字化发展背景.低代码的发展路径.应用渗透.市场规模等方面进行深入研究分析,并洞察了发展趋势. 本文分享自华为云社 ...

  8. 百度高德地图JS-API学习手记:地图基本设置与省市区数据加载

    无论是百度还是高德地图开发,还是高德地图开发.官方的给的案例启示很多,copy再修改下,就完成了 https://lbs.amap.com/api/javascript-api/summary  ht ...

  9. 火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 文章介绍了 Bucket 优化技术及其在实际业务中的应用,包括 Spark Bucket 的基本原理,重点阐述了火 ...

  10. 十分钟读懂火山引擎 DataLeap 数据治理实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 日前,火山引擎数智平台 VeDI 直播活动「超话数据」在线举办,来自火山引擎 DataLeap 数据产品专家从数据 ...