一 C语言实现
int a[128] = {0};
int b[128] = {0};
int sum = 0;
for (int i = 0; i < 128; i++)
{
sum += a[i] * b[i];
}
二 simd汇编实现
global dpb_8x8_uint8
dpb_8x8_uint8:
vpmovsxbd ymm0, [rdi];
vpmovsxbd ymm1, [rsi];
vpmulld ymm1, ymm1, ymm0
vmovdqu ymm2, [rdx]
vpaddd ymm2, ymm2, ymm1
vmovdqu [rdx], ymm2;
ret
c语言调用代码
#include#include #include #include extern void dpb_8x8_uint8(uint8_t *a, uint8_t *b, uint8_t *c); int main() { uint8_t a[16] = {0}; memset(a, 0x02, 16); uint8_t b[16] = {0}; memset(b, 0x03, 16); uint32_t res[8] = {0}; memset(res, 0x0, 32); dpb_8x8_uint8(a, b, res); for (int i = 0; i < 8; i++) printf("%d ", res[i]); printf("n"); dpb_8x8_uint8(a + 8, b + 8, res); printf("add againn"); for (int i = 0; i < 8; i++) printf("%d ", res[i]); printf("n"); return 0; }
test# ./dpb_test 6 6 6 6 6 6 6 6 add again 12 12 12 12 12 12 12 12



