Giter Club home page Giter Club logo

vc's Introduction

VC 现在处于维护模式,不再积极开发。但是,我们将继续审查来自社区的错误修复的拉取请求。

您可能有兴趣切换到std-simd GCC 11 包含一个实验版本std::simd作为 libstdc++ 的一部分,它也可以与 clang 一起使用。 Vc 1.4 中存在但std-simd中不存在的功能最终将变成 Vc 2.0,然后取决于std-simd

Vc:可移植、零开销的 C++ 类型,用于显式数据并行编程

最近几代 CPU,尤其是 GPU,需要数据并行代码才能充分发挥效率。数据并行性要求相同的操作序列应用于不同的输入数据。因此,CPU 和 GPU 可以减少指令解码和调度所需的硬件,有利于更多的算术和逻辑单元,同步执行相同的指令。在 CPU 架构上,这是通过 SIMD 寄存器和指令实现的。单个 SIMD 寄存器可以存储 N 个值,并且单个 SIMD 指令可以对这些值执行 N 个操作。在 GPU 架构上,N 个线程完美同步运行,由单个指令解码器/调度器提供。每个线程都有本地内存和给定索引来计算加载和存储在内存中的偏移量。

当前的 C++ 编译器可以自动将标量代码转换为 SIMD 指令(自动向量化)。然而,编译器必须重建算法的内在属性,而当开发人员用 C++ 编写纯标量实现时,该属性就丢失了。因此,C++ 编译器无法将任何给定代码矢量化为其最有效的数据并行变体。特别是较大的数据并行循环,跨越多个函数甚至翻译单元,通常不会转换为高效的 SIMD 代码。

Vc 库提供了缺失的链接。它的类型允许显式地声明对多个值的数据并行操作。因此,并行性是通过类型系统添加的。竞争方法通过新的控制结构以及这些控制结构体内的新语义来声明并行性。

Vc 是一个免费软件库,可简化 C++ 代码的显式矢量化。它具有直观的 API,并提供不同编译器和编译器版本之间的可移植性以及不同向量指令集之间的可移植性。因此,用 Vc 编写的应用程序可以编译为:

  • AVX 和 AVX2
  • SSE2 至 SSE4.2 或 SSE4a
  • 标量
  • AVX-512(Vc 2开发)
  • 霓虹灯(开发中)
  • NVIDIA GPU / CUDA(研究)

在 Intel 在 ICC 18 中放弃 MIC 支持后,Vc 1.4 也删除了对其的支持。

例子

编译器资源管理器上的用法

标量积

让我们从使用内置浮点数计算 3D 标量积的代码开始:

using Vec3D = std::array<float, 3>;
float scalar_product(Vec3D a, Vec3D b) {
  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}

使用 Vc,我们可以使用以下类型轻松对代码进行向量化float_v

using Vc::float_v
using Vec3D = std::array<float_v, 3>;
float_v scalar_product(Vec3D a, Vec3D b) {
  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}

以上将扩展到并行计算的 1、4、8、16 等标量积,具体取决于目标硬件的功能。

为了进行比较,使用英特尔 SSE 内在函数的相同矢量化更加冗长,并且使用前缀表示法(即函数调用):

using Vec3D = std::array<__m128, 3>;
__m128 scalar_product(Vec3D a, Vec3D b) {
  return _mm_add_ps(_mm_add_ps(_mm_mul_ps(a[0], b[0]), _mm_mul_ps(a[1], b[1])),
                    _mm_mul_ps(a[2], b[2]));
}

上述内容既不能扩展到 AVX、AVX-512 等,也不能移植到其他 SIMD ISA。

构建要求

cmake >= 3.0

C++11 编译器:

  • 海湾合作委员会 >= 4.8.1
  • 铿锵> = 3.4
  • 国际商会 >= 18.0.5
  • Visual Studio 2019(64 位目标)

构建和安装VC

  • 克隆Vc并初始化Vc的git子模块:
git clone https://github.com/VcDevel/Vc.git
cd Vc
git submodule update --init
  • 创建构建目录:
$ mkdir build
$ cd build
  • 使用cmake进行配置并添加相关选项:
$ cmake ..

(可选)指定安装目录:

$ cmake -DCMAKE_INSTALL_PREFIX=/opt/Vc ..

(可选)包括构建单元测试:

$ cmake -DBUILD_TESTING=ON ..

在 Windows 上,如果安装了多个版本的 Visual Studio,则可以选择一个:

$ cmake -G "Visual Studio 16 2019" ..

请参阅cmake --help参考资料 以获得可能的生成器的列表。

  • 构建并安装:
$ cmake --build . -j 16
$ cmake --install . # may require permissions

在 Windows 上,您还可以Vc.sln在 Visual Studio 中打开并从 IDE 构建/安装。

文档

该文档是通过doxygen生成的。您可以通过在子目录doxygen中运行来构建文档doc。或者,您可以在以下位置找到文档的夜间版本:

刊物

致力于将 Vc 的功能集成到 C++ 标准库中。

执照

Vc 是根据3 条款 BSD 许可证的条款发布的。

vc's People

Contributors

mattkretz avatar bernhardmgruber avatar chr-engwer avatar axel-naumann avatar amadio avatar hahnjo avatar amyspark avatar vks avatar gruenich avatar dennisklein avatar themarix avatar j-stephan avatar pauljurczak avatar corristo avatar kgnk avatar jcowgill avatar ericators avatar yuanzhongqiao avatar lduhem avatar bmanga avatar adra0 avatar htfy96 avatar stephanlachnit avatar stefanbruens avatar linev avatar sawenzel avatar pinotree avatar oshadura avatar pikacic avatar ex-bart avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.