Есть ли способ реализовать логику ниже в neon . Поскольку я не нашел инструкции умножения и накопления для 64-битного входного и выходного значения.
int64x2_t result;
int64x2_t num1;
int64x2_t num2;
>> result + = num1*num2 <<
Есть ли способ реализовать логику ниже в neon . Поскольку я не нашел инструкции умножения и накопления для 64-битного входного и выходного значения.
int64x2_t result;
int64x2_t num1;
int64x2_t num2;
>> result + = num1*num2 <<
Технически два 64-битных значения могут дать 128-битный результат. Вот почему существуют следующие функции int64*int32+int32
, но не та, которая принимает два 64-битных входных значения.
int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t);
int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t);
Если это не работает для вас, вам нужно будет использовать скалярные операции 64 * 64, за которыми следует vaddq_s64
.
Примечание. Visual Studio реализует _mul128
, __umul128
, _mulh
и __umulh
для всех архитектур, включая ARM, для обработки полного сценария 64*64 = 128 бит.