我发现ARMv8现在支持来自ARMv8 (scalable vector extension SVE)的可变长度向量寄存器。为了达到数据级的并行性,寄存器宽度越大越好。但是,我们需要在什么基础上选择128位到2048位之间的寄存器大小才能达到最大的性能呢?
例如,我想在1920年X 1080 Y图像上做带3x3掩码的Sobel滤波。我需要选择的寄存器宽度是多少?
发布于 2018-02-18 13:40:14
可伸缩向量扩展是aarch64执行状态的一个模块,它扩展了A64指令集,重点是高性能计算,而不是媒体,因为您有霓虹灯。
寄存器宽度将由硬件设计器/制造商决定,具体取决于该实现要解决/做什么。可能的矢量长度是: 128 256 384 512 640 768 896 1024 1152 1280 1408 1536 1664 1792 1920 2048。
从程序员的角度来看,编程模型与向量长度无关,这意味着相同的应用程序将在不同寄存器宽度(向量长度)的实现上工作。
该规范已经过时,但是,SVE实现后没有可用的硬件。目前,您可以使用ARM指令模拟器(阿米)来运行您的程序。
所以回答您的问题,除非您正在制造硬件,否则您不需要选择任何特定的向量长度,因为这将因实现而异。现在,如果您正在使用armie进行测试,那么您可以选择任何您想要的。
发布于 2018-10-22 15:43:32
SVE本质上是基于硬件定义的向量宽度隐式递增循环索引,所以您不必担心它。
请查看Daxpy示例:https://www.rico.cat/files/ICS18-gem5-sve-tutorial.pdf,以更详细地理解这意味着什么,以及这个带有断言的最小可运行示例。
https://stackoverflow.com/questions/48672941
复制相似问题