RISC-V,向量化,如何处理数据类型溢出

问题描述 投票:0回答:0

我正在用 RISC-V 内在函数编写矢量代码,但这个问题可能一般适用于矢量化。

我需要乘以和积累很多

uint8
值。为此,我想用
uint8
s填充向量寄存器,在循环中乘法和累加,完成。然而,为了避免溢出,累积的结果通常必须存储在更大的类型中,例如
uint32
。这如何扩展到向量?

我想我必须将向量寄存器分成 32 位通道并累加到它们中,但是编写向量化代码对我来说是新的。有没有一种方法可以将向量寄存器分成 8 位通道以获得更好的并行性,同时仍然避免溢出?

出现了一个问题,因为我通过提供指向

uint8

数组的指针来填充向量寄存器
vuint8m1_t vec_u8s = __riscv_vle64_v_u8m1(ptr_a, vl);

但是如果我用...替换它

vuint32m1_t vec_u8s_in_32bit_lanes = __riscv_vle64_v_u32m1(ptr_a, vl);

它可以从我的数组中读取 32 位值,将 4 个 (uint8) 元素读取到一个 (uint32) 通道中。我的理解正确吗?我应该如何避免这种情况?

可以吗,因为 ptr_a 被定义为

uint8_t * ptr_a ...
?

c vectorization overflow simd riscv
© www.soinside.com 2019 - 2024. All rights reserved.