Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
486946 opened this issue Jan 26, 2024 · 5 comments
Closed
Assignees

Comments

@486946
Copy link

486946 commented Jan 26, 2024

如:
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 wangzhaode self-assigned this Jan 26, 2024
@wangzhaode
Copy link
Collaborator

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

@486946
Copy link
Author

486946 commented Jan 29, 2024

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

@wangzhaode
Copy link
Collaborator

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

@486946
Copy link
Author

486946 commented Jan 29, 2024

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

@wangzhaode
Copy link
Collaborator

打开宏是必要条件不是充分条件;判断在这里:

if (gInstance->supportI8mm) {

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants