有关使用aarch64程序集在数据类型为8位时将向量乘以标量的问题

时间:2018-10-16 10:32:39

标签: simd intrinsics neon arm64

我正在解决将8位数组A乘以8位数组B的问题。

在这里,我将A视为向量,并将B中的每个元素视为标量。

例如,如果A为{1,2,3,4,5,6,7,8},而B为{1,2},则

然后我将得到{1,1,1,1,1,1,1,1} x {1,2,3,4,5,6,7,8} + {2,2,2, 2,2,2,2,2} x {1,2,3,4,5,6,7,8},这里的'+'表示concat。

但是……让我感到困惑。

我知道当https://www.element14.com/community/servlet/JiveServlet/previewBody/41836-102-1-229511/ARM.Reference_Manual.pdf中的数据类型为16位或32位时,可以做到这一点

我看到了

SMULL Vd.<Ta>, Vn.<Tb>, Vm.<Ts>[index]
Signed integer multiply long (vector, by element). Where <Ta>/<Tb>/<Ts> is 4S/4H/H or 2D/2S/S. If <Ts>
is H, then Vm must be in the range V0-V15

但是仅支持H,D或S,不支持B。

如果我改用 DUP ,那么我将使用更多的霓虹灯代理保存数据,这意味着,如果数据是Vn.16B,则必须使用16个 DUP 指令以加载16个Vm.8B数据,然后将每个数据乘以A。但是,如果我可以使用 SMULL ,那么我只使用一个霓虹灯注册器来保存数据,因为可以使用索引来表示标量。

我不知道是否还有其他有效的方法来实现这一目标?有什么建议吗?

0 个答案:

没有答案