具有可扩展矢量扩展 (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
示例
我发现 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
示例