跨CPU架构实践:Sogou C++ Workflow在ARM/龙芯平台的移植与优化
项目概述
Sogou C++ Workflow是一个高性能的并行计算与异步网络框架,支持Linux、macOS和Windows等多种操作系统。该框架的一个重要特性是跨平台兼容性,能够在不同架构的CPU上高效运行,包括32位或64位的x86处理器、大端或小端的ARM处理器以及龙芯处理器。详细信息可参考README.md。
架构支持现状
Workflow框架通过精心设计的代码结构,实现了对多种CPU架构的支持。在README_cn.md中明确提到,该框架支持国产龙芯处理器,这为其在国内服务器市场的应用奠定了基础。
框架的核心组件,如IO服务,在代码层面就考虑了不同架构的差异。以src/kernel/IOService_linux.cc为例,该文件中包含了对多种架构的条件编译支持。
跨架构移植的关键挑战
字节序问题
不同架构的CPU可能采用不同的字节序(大端或小端),这对数据的存储和传输会产生影响。Workflow框架在src/kernel/IOService_linux.cc中通过宏定义巧妙地解决了这一问题:
#if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \
defined(__sh__) || defined(__bfin__) || defined(__MIPSEL__) || \
defined(__cris__) || (defined(__riscv) && __riscv_xlen == 32) || \
(defined(__GNUC__) && defined(__BYTE_ORDER__) && \
__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 4)
#define PADDED(x, y) x; unsigned y
#define PADDEDptr(x, y) x; unsigned y
#define PADDEDul(x, y) unsigned long x; unsigned y
#elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
(defined(__aarch64__) && defined(__AARCH64EL__)) || \
(defined(__riscv) && __riscv_xlen == 64) || \
(defined(__GNUC__) && defined(__BYTE_ORDER__) && \
__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_LONG__ == 8)
#define PADDED(x, y) x, y
#define PADDEDptr(x, y) x
#define PADDEDul(x, y) unsigned long x
#elif defined(__powerpc64__) || defined(__s390x__) || \
(defined(__sparc__) && defined(__arch64__)) || \
(defined(__aarch64__) && defined(__AARCH64EB__)) || \
(defined(__GNUC__) && defined(__BYTE_ORDER__) && \
__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 8)
#define PADDED(x, y) unsigned y; x
#define PADDEDptr(x,y) x
#define PADDEDul(x, y) unsigned long x
#elif defined(__PPC__) || defined(__s390__) || \
(defined(__arm__) && defined(__ARMEB__)) || \
defined(__sparc__) || defined(__MIPSEB__) || defined(__m68k__) || \
defined(__hppa__) || defined(__frv__) || defined(__avr32__) || \
(defined(__GNUC__) && defined(__BYTE_ORDER__) && \
__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 4)
#define PADDED(x, y) unsigned y; x
#define PADDEDptr(x, y) unsigned y; x
#define PADDEDul(x, y) unsigned y; unsigned long x
#else
#error endian?
#endif
这段代码根据不同的架构和字节序定义了不同的宏,确保数据结构在内存中的布局正确。
数据类型大小差异
不同架构的CPU对基本数据类型的大小可能有不同的定义,这会影响结构体的大小和布局。Workflow框架通过条件编译来处理这一问题,例如在处理32位和64位系统时使用不同的宏定义。
性能优化策略
针对ARM架构的优化
ARM架构的CPU通常具有低功耗、高效率的特点。Workflow框架可以通过以下方式针对ARM架构进行优化:
- 利用ARM的NEON指令集进行向量运算优化
- 针对ARM的缓存结构调整数据布局
- 优化函数调用,减少栈操作
针对龙芯架构的优化
龙芯处理器作为国产CPU的代表,具有独特的架构特点。Workflow框架在龙芯平台上的优化可以关注以下方面:
- 充分利用龙芯的多核心优势,优化并行计算任务的调度
- 针对龙芯的缓存层次结构调整数据访问模式
- 利用龙芯特有的指令集提高关键算法的性能
移植实践案例
以IO服务组件为例,src/kernel/IOService_linux.cc中的代码展示了如何实现跨架构的兼容性。该文件中的IOService::init函数负责初始化IO服务,它使用了与架构无关的系统调用,确保在不同CPU架构上都能正确工作:
int IOService::init(int maxevents)
{
int ret;
if (maxevents < 0)
{
errno = EINVAL;
return -1;
}
this->io_ctx = NULL;
if (io_setup(maxevents, &this->io_ctx) >= 0)
{
ret = pthread_mutex_init(&this->mutex, NULL);
if (ret == 0)
{
INIT_LIST_HEAD(&this->session_list);
this->event_fd = -1;
return 0;
}
errno = ret;
io_destroy(this->io_ctx);
}
return -1;
}
未来展望
随着ARM和龙芯等架构在服务器领域的应用越来越广泛,Workflow框架将继续加强对这些平台的支持和优化。未来的工作可能包括:
- 进一步优化针对ARM和龙芯架构的代码路径
- 增加更多针对特定架构的性能测试用例
- 与硬件厂商合作,深入挖掘架构特性,提升框架性能
通过持续的优化和改进,Sogou C++ Workflow将为跨平台应用开发提供更强大的支持,助力开发者在不同架构的CPU上构建高性能的应用系统。
参考资料
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00