具有可扩展矢量扩展 (SVE) 的 ARM V-8

ARM V-8 with Scalable Vector Extension (SVE)

我发现 ARMv8 现在支持来自 128 bits to 2048 bits (scalable vector extension SVE) 的可变长度向量寄存器。 拥有更大宽度的寄存器以实现数据级并行性总是好的。但是在什么基础上我们需要 select 寄存器的大小从 128 位到 2048 位以实现最大性能?

例如,我想在 1920 X 1080 Y 图像上使用 3x3 掩码进行 Sobel 滤波。我需要什么寄存器宽度 select?

Scalable Vector Extension 是一个用于 aarch64 执行状态的模块,它扩展了 A64 指令集并且专注于 High-Performance 计算而不是媒体,因为你有 NEON。

寄存器宽度将由硬件 designer/manufacturer 决定,具体取决于该实现试图 solve/do。可能的向量长度为​​:128 256 384 512 640 768 896 1024 1152 1280 1408 1536 1664 1792 1920 2048.

从程序员的角度来看,编程模型是矢量长度无关的,这意味着同一应用程序将在具有不同寄存器宽度(矢量长度)的实现上工作。

规范已经出来,但是,没有可用的硬件来实现 SVE。目前,您可以使用 ARM 指令仿真器 (armie) 来 运行 您的程序。

所以回答你的问题,除非你是制造硬件,否则你不需要 select 任何特定的向量长度,因为这会因一种实现而异。 现在,如果您正在使用 armie 进行测试,那么您可以 select 随心所欲。

SVE 本质上是根据硬件定义的矢量宽度为您隐式增加循环索引,因此您不必担心它。

https://www.rico.cat/files/ICS18-gem5-sve-tutorial.pdf to understand what that means in more detail, and this minimal runnable example with an assertion.

查看计算出的 Daxpy 示例