文章目录
一、关于 Kokkos
- github : https://github.com/kokkos/kokkos
- 官网:https://kokkos.org
- 教程:https://github.com/kokkos/kokkos-tutorials
- blog : https://kokkos.org/blog/
- slack 支持 : https://kokkosteam.slack.com
- Kokkos 讲座 : https://kokkos.org/kokkos-core-wiki/videolectures.html
它们包含讲座视频和实践练习,涵盖了所有重要功能。 - 编程指南 : https://kokkos.org/kokkos-core-wiki/programmingguide.html
以“叙述”形式包含编程模型、机器模型以及视图和并行调度等主要构建块的技术描述。 - API 参考 : https://kokkos.org/kokkos-core-wiki/
按类别组织,即核心、算法和容器,或者如果您愿意,按字母顺序组织。 - 用例和示例 : https://kokkos.org/kokkos-core-wiki/usecases.html
一系列示例,包括如何将 Kokkos 与 MPI 结合使用以及 Fortran 互操作性。
Kokkos 是美国能源部百亿亿次级项目的一部分,该项目是美国为 HPC 社区迎接下一代超级计算平台而开展的一项领先工作。
Kokkos Core 用 C++ 实现了一个编程模型,用于编写 面向所有主要 HPC 平台 的 高性能可移植应用程序。以与硬件无关的方式 编写现代 C++ 应用程序。
为此,它为代码的并行执行和数据管理提供了抽象。
Kokkos 旨在针对具有 N 级内存层次结构和多种执行资源的复杂节点架构。
它目前可以使用 CUDA、HIP、SYCL、HPX、OpenMP 和 C++ 线程作为后端编程模型,并进行其他几个后端开发。
该生态系统由多个库组成,解决了以可移植方式开发和维护应用程序的主要问题。
三个主要组件是 Kokkos 核心编程模型、Kokkos 内核数学库和 Kokkos 分析和调试工具。
Kokkos生态系统
包括:
姓名 | 信息 | |
---|---|---|
kokkos | (此库)编程模型 - 并行执行和内存抽象 | GitHub 链接 |
kokkos-kernels | 稀疏、密集、分批数学内核 | GitHub 链接 |
kokkos-tools | 分析和调试工具 | GitHub 链接 |
pykokkos | 为 Kokkos 性能可移植并行编程提供 Python 绑定。 | GitHub 链接 |
kokkos-remote-spaces | 跨多个进程的共享内存语义 | GitHub 链接 |
kokkos-resilience | Kokkos 的弹性和检查点扩展 | GitHub 链接 |
C++ 标准库的相关工作
相关及相关的努力包括:
姓名 | 信息 | 提议 | |
---|---|---|---|
mdspan | 针对 C++23 的 mdspan 参考实现 | P0009 | GitHub 链接 |
stdBLAS | stdBLAS 的参考实现 | P1673 | GitHub 链接 |
Kokkos Core
https://kokkos.org/about/core/
Kokkos Core 是一种并行算法编程模型,它使用 多核芯片 并在这些核心之间 共享内存。
该编程模型包括常用并行计算模式的计算抽象、提供这些计算模式应用细节的策略 以及表示在哪些核心上执行并行计算的执行空间。
该编程模型还包括常见数据结构的模式、提供这些数据结构在内存中布局细节的策略以及表示数据驻留在哪个内存中的内存空间。
Kokkos Core 编程模型的工作原理是要求应用程序开发团队根据 Kokkos 的模式、策略和空间来实现他们的算法。
然后,Kokkos Core 可以根据实现最佳性能所必需的体系结构特定规则将这些算法映射到目标体系结构上。虽然其他编程模型支持执行模式、执行策略、执行空间和内存空间;但只有 Kokkos 支持数据模式和策略,而这些对于性能可移植性是必不可少的。
Kokkos Core 用 C++ 实现了一个编程模型,用于编写面向所有主要 HPC 平台的高性能可移植应用程序。
为此,它为代码的并行执行和数据管理提供了抽象。
Kokkos 旨在针对具有 N 级内存层次结构和多种执行资源的复杂节点架构。
它目前可以使用 CUDA、HIP、SYCL、HPX、OpenMP 和 C++ 线程作为后端编程模型,其他几个后端正在开发中。
Kokkos Core 是Kokkos C++ 性能可移植性编程生态系统的一部分。
Kokkos 是Linux 基金会的一个项目。
Kokkos Kernels
https://kokkos.org/about/kernels/
https://github.com/kokkos/kokkos-kernels
Kokkos Kernels是一个线性代数和图形算法的软件库,可用于许多 HPC 应用程序,以在每种架构上实现最佳(而不仅仅是良好)性能。
该库的基准版本是使用 Kokkos Core 编程模型编写的,以实现可移植性和良好的性能。
该库具有针对架构的优化,或在需要时 使用这些数学算法的供应商特定版本。
这减少了应用程序团队可能需要开发的针对架构的软件数量,从而进一步降低了他们实现“一流”性能的(修改成本)。
Kokkos Tools
https://kokkos.org/about/tools/
Kokkos Tools是一种创新的“插入式”软件接口,以及一组不断增长的性能测量和调试工具,这些工具可插入该接口,供应用程序开发团队分析其软件的执行和内存性能。
团队使用此性能分析和调试信息来确定他们设计和实施算法的程度,并确定其软件中应改进或行为错误的部分。
Kokkos Tools 接口利用 Kokkos Core 编程模型接口,通过使用用户提供的标签来识别数据结构和计算,从而显著改善应用程序开发人员的体验。
二、PyKokkos
https://github.com/kokkos/pykokkos
https://kokkos.github.io/pykokkos/index.html
PyKokkos 是一个用于编写与 Numba 类似的高性能 Python 代码的框架。
与 Numba 相比,PyKokkos 内核主要采用并行方式,并且性能可移植,这意味着它们可以在不同的硬件(CPU、NVIDIA GPU 和 AMD GPU)上高效运行,无需进行任何更改。
安装:https://kokkos.github.io/pykokkos/installation.html
三、快速开始
1、下载最新版本
请熟悉Kokkos 要求,并验证您的机器具有所有必要的编译器、后端 GPU SDK(例如 CUDA、ROCM、Intel oneAPI 等)和构建系统组件。
最新发布:https://github.com/kokkos/kokkos/releases/latest
curl -OJ -L https://github.com/kokkos/kokkos/archive/refs/tags/4.3.00.tar.gz
# Or with wget
wget https://github.com/kokkos/kokkos/archive/refs/tags/4.3.00.tar.gz
要从 GitHub 克隆 Kokkos 的最新开发版本:
git clone -b develop https://github.com/kokkos/kokkos.git
解压,进入文件夹
# Uncomment according to the type of file you've downloaded (zip or tar)
unzip kokkos-x.y.z.zip
# tar -xzf kokkos-x.y.z.tar.gz
cd kokkos-x.y.z
2、建造 Kokkos
要构建 Kokkos,您需要一个支持 C++17 或更高版本的 C++ 编译器。
所有要求(包括最低和主要测试的编译器版本)可在此处 找到。
构建和安装说明 : https://kokkos.org/kokkos-core-wiki/building.html
您还可以使用Spack安装 Kokkos spack install kokkos
:。可以使用 显示可用的配置选项spack info kokkos
。
完整文档请访问:https://kokkos.org/kokkos-core-wiki/
3、基本配置、构建、安装配方
OpenMP(CPU 并行)
cmake -B <build-directory> -DKokkos_ENABLE_OPENMP=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<install-directory> -S <source-directory>
cmake --build <build-directory>
cmake --install <build-directory>
Kokkos 将尝试自动检测 GPU 微架构,但也可以指定所需的GPU 架构。
在启用设备(GPU)后端(例如 CUDA、HIP)的情况下,Kokkos 将默认在主机(CPU)上进行串行执行。
CUDA
cmake -B <build-directory> -DKokkos_ENABLE_CUDA=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<install-directory> -S <source-directory>
cmake --build <build-directory>
cmake --install <build-directory>
HIP
cmake -B <build-directory> -DKokkos_ENABLE_HIP=ON -DCMAKE_CXX_COMPILER=hipcc -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<install-directory> -S <source-directory>
cmake --build <build-directory>
cmake --install <build-directory>
4、构建并链接 Kokkos 的“Hello World”
需要设置 Kokkos_ROOT
和目标后端SDK的根目录(即CUDA_ROOT、ROCM_PATH)。Kokkos_ROOT应设置为Kokkos安装的路径。
在模块环境中,SDK变量通常会在模块加载时自动设置(例如,模块加载 rocm/5.7.1
)。
有关其他详细信息,请参阅生成、安装和使用。下面详细介绍的示例位于Kokkos Core示例目录中。
git clone https://github.com/kokkos/kokkos.git
cd example/build_cmake_installed
cmake -B <build-directory> -S . -DKokkos_ROOT=<install-directory>
cd <build-directory>
cmake --build .
./example
2024-05-28(二)