c++ - 具有可扩展 vector 扩展 (SVE) 的 ARM V-8

标签 c++ arm simd armv8 sve

我发现 ARMv8 现在支持从 128 位到 2048 位 的可变长度 vector 寄存器(可扩展 vector 扩展 SVE) . 拥有更大宽度的寄存器以实现数据级并行性总是好的。但是,我们需要根据什么来选择从 128 位到 2048 位的寄存器大小以实现最佳性能?

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

最佳答案

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

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

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

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

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

关于c++ - 具有可扩展 vector 扩展 (SVE) 的 ARM V-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48672941/

相关文章:

assembly - 编写自己的SVC调用ARM汇编

c - AltiVec 中的 mm_storel_epi64 等效吗?

parallel-processing - `#pragma parallel for collapse` 和 `#pragma omp parallel for` 之间的区别

c++ - ISampleGrabber 可以将视频帧转换为特定的媒体类型吗?

c++ - auto_ptr 会防止这种情况发生吗?

python - 将 SciPy 编译为 Android - 是否已完成,关于如何将 FORTRAN 代码编译为 Android Arm 的任何帮助

assembly - 如何在 ARMv7 32 位上将浮点寄存器压入(和弹出)堆栈?

c++ - 使用 SSE 获取 __m128i vector 中的最小短值?

c++ - 共享库链接到具有公共(public)接口(interface)但不同实现的静态库

c++ - 无法遍历 STL 集