gpt4 book ai didi

assembly - 将 NEON 汇编与非向量函数混合

转载 作者:行者123 更新时间:2023-12-02 21:45:23 24 4
gpt4 key购买 nike

我想我找到了问题的答案。 VFP 有一个“fmacs”指令,它可以实现在 NEON/VFP 寄存器上进行标量计算的技巧。

<小时/>

我对 NEON 或 ARM 编程非常陌生...

我想将上三角矩阵加载到 NEON 寄存器中,并使用单精度对向量的外积进行积分(累加)。基本思想是 A += x'*x 其中 A 是上三角矩阵。某些操作可以通过在四或双寄存器上使用 NEON 指令“vmla.f32”对操作进行向量化来完成。然而,有时我只需要一次对一个单精度寄存器 1 进行操作,即不需要对 2 个或 4 个单精度寄存器进行操作。在下面的示例中(不起作用),我对该行感兴趣

// A[8-14] += A[1]*x[1-7] 
"mla s16, s16, d0[1]\n\t"

我想使用 NEON 寄存器来执行一次单精度运算。

代码片段:

    __asm__ volatile (
//load x into registers
"vldmia %0, {d0-d3}\n\t"
// load A into registers
"vldmia %1, {d4-d12}\n\t"
"vldmia %1, {d13-d21}\n\t"
// A[0-7] += x[0]*x[0-7]
"vmla.f32 q2, q2, d0[0]\n\t"
"vmla.f32 q3, q3, d0[0]\n\t"
// A[8-14] += A[1]*x[1-7]
"mla s16, s16, d0[1]\n\t"
// output
:
// input
: "r"(A), "r"(x)
// registers
: "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9", "q10"
);

最佳答案

所以我认为您是在问将向量与标量相乘

我会使用“vdup”将标量加载到 NEON 寄存器的所有 channel 中,然后相乘。

如果您可以发布您想要做的事情的纯 C 版本,我可以尝试提供更多帮助...

关于assembly - 将 NEON 汇编与非向量函数混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022038/

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