使用 Neon aarch64 优化 gemm(矩阵乘法)

Optimize gemm (matrix multiplication) with Neon aarch64

我有一个矩阵乘法,如下所示:

void gemm_nn(int N, int K, float *A, float *B, float *C) {
    int j, k;
    for (k = 0; k < K; k++)
        for (j = 0; j < N; j++)
            C[j] += A[k] * B[k * N + j];
}

浮点数是单个的,4字节,32位。

我想用 armv8-a 64 位优化循环。

我可以在单个 128 位寄存器中加载 4 个连续的浮点数并进行一次乘法累加运算吗?

你能指出我应该尝试实现这个的说明吗?

需要原生 SIMD ld1 {v16.4s} 和 fmla 指令。