littlebot
Published on 2025-04-17 / 0 Visits
0

【源码】基于C++的Highway高性能向量库

项目简介

Highway是一个C++库,致力于提供便携式SIMD/向量指令集。它支持x86、Arm、POWER、RISC-V等多种架构,让开发者能在不同平台实现高性能的向量化编程。其设计目标是使SIMD/向量编程实用且易于操作,通过一组精心选择的函数,无需大量编译器转换就能很好地映射到CPU指令。

项目的主要特性和功能

  • 跨平台支持:支持x86、Arm、POWER、RISC-V和WebAssembly五种架构,可使用相同代码针对不同指令集编译,包括“可扩展”向量的指令集。
  • 灵活部署:应用程序可在异构云或客户端设备上运行并选择最佳指令集,也能针对单一指令集编译且无运行时开销。
  • 广泛的操作集:提供大量操作,适用于图像处理(浮点数)、压缩、视频分析、线性代数、密码学、排序和随机生成等领域。
  • 数据并行设计:提供Gather、MaskedLoad和FixedTag等工具,加速遗留数据结构的并行处理。

安装使用步骤

安装依赖

  1. 安装CMake:Highway使用CMake进行构建,在Debian系统上,通过以下命令安装: bash sudo apt install cmake
  2. 安装googletest:Highway的单元测试依赖于googletest,默认情况下,Highway的CMake会在配置时下载这个依赖。可通过设置HWY_SYSTEM_GTEST CMake变量为ON来禁用此行为,并手动安装: bash sudo apt install libgtest-dev

构建Highway

  1. 创建构建目录bash mkdir -p build && cd build
  2. 生成构建文件bash cmake ..
  3. 编译并运行测试bash make -j && make test

使用vcpkg安装

Highway也可以通过vcpkg进行安装: bash vcpkg install highway

快速开始

可以使用examples/benchmark作为起点。此外,可参考以下页面快速上手: - 快速参考页面 - FAQ

编译器标志

为获得最佳性能,编译时建议启用优化。对于clang和GCC,-O2通常足够;对于MSVC,建议使用/Gv/arch:AVX2

循环向量化

Highway提供多种策略向量化循环,包括确保输入/输出被填充、处理完整向量、使用Transform*函数、以及使用掩码处理剩余部分等。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】