3

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

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

4

2 回答 2

2

Scalable Vector Extension 是用于 aarch64 执行状态的模块,它扩展了 A64 指令集,专注于高性能计算而不是媒体,因为你有 NEON。

寄存器宽度将由硬件设计者/制造商决定,具体取决于该实现试图解决/做什么。可能的向量长度为​​:128 256 384 512 640 768 896 1024 1152 1280 1408 1536 1664 1792 1920 2048。

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

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

因此,回答您的问题,除非您正在制造硬件,否则您无需选择任何特定的向量长度,因为这会因一种实现而异。现在,如果您正在使用 armie 进行测试,那么您可以选择任何您想要的。

于 2018-02-18T13:40:14.400 回答
1

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

查看以下已制定的Daxpy示例:https ://www.rico.cat/files/ICS18-gem5-sve-tutorial.pdf以更详细地了解这意味着什么,以及这个带有断言的最小可运行示例

于 2018-10-22T15:43:32.880 回答