gpt4 book ai didi

multithreading - AArch64 - 并行运行 ARM 和 ASIMD 指令

转载 作者:行者123 更新时间:2023-12-01 08:13:24 41 4
gpt4 key购买 nike

我想同时使用 ARM 汇编指令和 ASIMD 指令在汇编指令中实现代码。我的第一个问题是,这是否可以在 ARMv8 上完成?基于this线程,这在 ARMv7 上是可能的,但是 NEON 和 ARM 寄存器之间的数据传输需要相当长的时间。其次,我正在寻找一种可以并行执行汇编代码的方法。这是我正在尝试做的事情:

.
.
.
<ASIMD instruction>
<ASIMD instruction>
<ASIMD instruction>
<Data MOV between ASIMD vectors and ARM Reg>
<ARM assembly instruction> ------- <ASIMD instruction>
<ARM assembly instruction> ------- <ASIMD instruction>
<ARM assembly instruction> ------- <ASIMD instruction>
<Data MOV between ARM Reg and ASIMD vectors>
<ARM assembly instruction> ------- <ASIMD instruction>
<ARM assembly instruction> ------- <ASIMD instruction>
<ARM assembly instruction> ------- <ASIMD instruction>
.
.
.

我想知道我是否可以使用两个线程来完成此操作。我正在研究 ARM-CortexA53 微处理器。我也可以访问 ARM-CortexA57,但我认为这些平台大致相同,并且它们具有相同的功能。

最佳答案

我认为您在这里对线程的评论放错了地方,或者您有超线程(或其他同步多线程)架构的背景。 Cortex-A57 或 Cortex-A53 都不是 SMT 微架构,因此在任何时候您都只会在一个内核上执行一个线程。这意味着您拥有一个线程用于高级 SIMD 指令和一个线程用于整数/A32/T32(您称之为“ARM 指令”)指令的想法不会导致多核系统的良好整体利用率。

您链接到的线程讨论了 Cortex-A8 微架构的模型,其中通过 Neon 指令返回 A32 指令的数据依赖性导致管道气泡(请注意,其他评论说这与同步的内存有关是不正确的) .虽然将数据从高级 SIMD 寄存器移动到核心寄存器会产生一些成本,但成本远低于该线程建议的成本(例如,参见 Cortex-A57 Software Optimisation Guide ,它给出了每条指令的延迟数)。

使用矢量化高级 SIMD 指令获得的性能优势将取决于您打算在算法的 A32 和高级 SIMD 部分中使用的指令混合。过于频繁地移动数据会对您的执行速度产生明显的影响 - 您移动数据所花费的时间越多,您花在做您打算做的工作上的时间就越少!

您在上面提出的指令交错是公开指令级并行性的常用方法,并且很可能在单个线程中运行良好。

关于multithreading - AArch64 - 并行运行 ARM 和 ASIMD 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903370/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com