跨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上构建高性能的应用系统。
参考资料
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00