vmadot的使用

BianbuCloud上面ISA中没有IME扩展,如何使用vmadot?直接使用vmadot,加-mcpu=spacemit-x60编译,运行时还是会出现“非法指令(核心已转储)”。

可能不是vmadot的问题 而是其他问题 比如向量寄存器设置错误了?最简单的vmadot指令中A、B都是int8类型,C是int32类型,所以使用内联编码时 需要给C 重新设置向量寄存器 比如

    asm volatile(
        // 设置向量寄存器,元素 8bit,LMUL=1
        "vsetvli t0, x0, e8, m1, tu, mu\n"
        // 加载矩阵数据
        "vle8.v v0, (%[va])\n"       // 加载 A 向量
        "vsetvli t0, x0, e8, m1, tu, mu\n"
        "vle8.v v1, (%[vb])\n"       // 加载 B 向量
        // IME 扩展的 dot product
        "vmadot v2, v0, v1\n"      // v2 = v0 * v1 + v2(累加)
        
        //重新设置C的寄存器
        "vsetvli t0, x0, e32, m2, tu, mu\n"
        // 保存结果
        "vse32.v v2, (%[vc])\n"      // 存储 32bit 结果
        :
        : [va]"r"(a), [vb]"r"(b), [vc]"r"(c)
        : "t0", "v2", "v3", "memory"
    );

https://github.com/spacemit-com/onnxruntime/blob/spacemit-dev-1.21.0/onnxruntime/core/mlas/lib/sqnbitgemm_kernel_spacemit_ime_int8.cpp 可以参考这个实现