loongson-community / discussions

Cross-community issue tracker & discussions / 跨社区工单追踪 & 讨论场所
9 stars 0 forks source link

英雄帖:glibc-hwcaps 子目录支持 #30

Open MingcongBai opened 9 months ago

MingcongBai commented 9 months ago

背景

龙芯 5000 和 6000 系列之间核心微架构发生明显变化,如后者(如果我没理解错)不再需要利用 dbar 0x700 指令且无此指令的二进制性能可获得大幅度提升。再者,后续核心迭代估计会继续引入新特性和指令,类似 6000 系列 dbar 指令变化的情况可能再次发生,中长期看来,龙芯的二进制发行版生态也会出现和 x86 生态一样的 SIMD/ISA 兼容难题。

这方面,x86_64 通过 glibc-hwcaps 实现了微架构级别 (micro-architecture level) 子目录,得以在一份系统中通过将不同优化级别的二进制放在相应子目录中,让不同微架构的核心利用优化级别最高的二进制,提升性能。

需求

为 LoongArch 实现类似机制,使得二进制发行版可以通过提供性能上较为关键的库(如 Glibc,GCC 运行时和 FFmpeg 等),进而让使用未来 LoongArch 核心的用户享受到微架构优化带来的性能提升。

展望

目前 Glibc 方面 已经实现了 HWCAPS 框架,但似乎未对具体的 ISA 级别进行定义;GCC 方面也需要设计相应选项和机制。

具体实现细节也许可以参考 x86_64 的实现过程,但涉及具体需要实现什么,路线图应该长什么样等问题,我个人理解有限,故发此英雄帖提出需求,恳请谅解。

MingcongBai commented 9 months ago

作为参考,可考虑阅读 openSUSE 对在发行版适配相关支持的项目 Hack Week 说明

MingcongBai commented 5 months ago

目前已有 ISA 1.0 和 1.1 的定义,是否可以利用此规范设计?POWER(小端序)有类似设计:

https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=4c38c1a229bc3628269ad98bd7e8d31d118d91f6