alibaba / MNN

MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba
http://www.mnn.zone/
8.78k stars 1.67k forks source link

汇编里为什么使用机器码,而不直接使用对应汇编指令? #2742

Closed 486946 closed 10 months ago

486946 commented 10 months ago

如: MNN//source/backend/cpu/arm/arm64/bf16/ARMV86_MNNPackedMatMul_BF16.S 中 .inst 0x6e40ec48 // bfmmla v8.4s, v2.8h, v0.8h

MNN/source/backend/cpu/arm/arm64/low_memory/MNNGemmHybridInt8FP32_sdot.S中 .inst 0x4f84e010 // sdot v16.4s, v0.16b, v4.4b[0]

为什么使用机器码,而不直接使用对应汇编指令?

wangzhaode commented 10 months ago

兼容更多编译器,有些低版本的gcc不支持这些汇编指令,会编译失败

486946 commented 10 months ago

兼容更多编译器,有些低版本的gcc不支持这些汇编指令,会编译失败 只是为了编译,但实际bfmmla需要支持armv8.6扩展,就算低版本编译器能编译过,但是不支持armv8.6扩展的硬件上还是跑不了吧?还是会报非法指令吧

wangzhaode commented 10 months ago

不会,运行时会根据CPU支持的指令集来选择计算kernel,不支持i8mm的CPU不会执行mmla代码;不支持sdot的CPU也不会执行sdot的代码;

486946 commented 10 months ago

不会,运行时会根据CPU支持的指令集来选择计算kernel,不支持i8mm的CPU不会执行mmla代码;不支持sdot的CPU也不会执行sdot的代码; dot是有cpu判定;貌似bf启用没有这些cpu是否支持的判定?bf直接就是宏控制打开支持,且配置走bf16

wangzhaode commented 10 months ago

打开宏是必要条件不是充分条件;判断在这里:https://github.com/alibaba/MNN/blob/d284430f92557aa8b4cc435752b1dff3309f2e38/source/backend/cpu/bf16/BF16Functions.cpp#L901