项目简介
Highway是一个C++库,致力于提供便携式SIMD/向量指令集。它支持x86、Arm、POWER、RISC-V等多种架构,让开发者能在不同平台实现高性能的向量化编程。其设计目标是使SIMD/向量编程实用且易于操作,通过一组精心选择的函数,无需大量编译器转换就能很好地映射到CPU指令。
项目的主要特性和功能
- 跨平台支持:支持x86、Arm、POWER、RISC-V和WebAssembly五种架构,可使用相同代码针对不同指令集编译,包括“可扩展”向量的指令集。
- 灵活部署:应用程序可在异构云或客户端设备上运行并选择最佳指令集,也能针对单一指令集编译且无运行时开销。
- 广泛的操作集:提供大量操作,适用于图像处理(浮点数)、压缩、视频分析、线性代数、密码学、排序和随机生成等领域。
- 数据并行设计:提供Gather、MaskedLoad和FixedTag等工具,加速遗留数据结构的并行处理。
安装使用步骤
安装依赖
- 安装CMake:Highway使用CMake进行构建,在Debian系统上,通过以下命令安装:
bash sudo apt install cmake
- 安装googletest:Highway的单元测试依赖于googletest,默认情况下,Highway的CMake会在配置时下载这个依赖。可通过设置
HWY_SYSTEM_GTEST
CMake变量为ON来禁用此行为,并手动安装:bash sudo apt install libgtest-dev
构建Highway
- 创建构建目录:
bash mkdir -p build && cd build
- 生成构建文件:
bash cmake ..
- 编译并运行测试:
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】