Project Icon

AMGX

高性能代数多重网格GPU加速求解器库

AMGX是NVIDIA开发的GPU加速线性求解器库,旨在加速计算密集型仿真的线性求解环节。它具有灵活的求解器组合系统,可构建复杂的嵌套求解器和预处理器。AMGX针对大规模并行计算进行了优化,支持单GPU或多GPU运算,并通过C API简化了并行处理。该库支持多精度计算、复数数据类型和分布式求解,适用于隐式非结构化方法。AMGX为科学计算和工程仿真提供了高效的GPU线性代数解决方案。

代数多重网格求解器 (AmgX) 库

AmgX 是一个 GPU 加速的核心求解器库,可以加速计算密集型仿真中的线性求解部分。该库包含一个灵活的求解器组合系统,允许用户轻松构建复杂的嵌套求解器和预处理器。该库非常适合隐式非结构化方法。

AmgX 库为大规模并行提供了优化方法,具有灵活选择求解器构建方式的能力,并通过简单的 C API 实现访问,该 API 抽象了单个或多个 GPU 上的并行性和规模,使用用户提供的 MPI。

这是 NVIDIA 注册开发者计划门户网站上 AMGX 库的源代码。

该库的主要特性包括:

  • fp32、fp64 和混合精度求解
  • 复数数据类型支持(目前有限)
  • 标量或耦合块系统
  • 使用提供的 MPI 进行分布式求解
  • 灵活配置允许嵌套求解器、平滑器和预处理器
  • 经典(Ruge-Steuben)和非平滑聚合代数多重网格
  • Krylov 方法:CG、BiCGSTAB、GMRES 等,可选预处理
  • 各种平滑器:Jacobi、Gauss-Seidel、不完全 LU、Chebyshev 多项式等
  • 通过 JSON 格式的求解器配置公开大量算法参数
  • 模块化结构,便于实现自己的方法
  • 支持 Linux 和 Windows

查看这些案例研究和白皮书:

目录

快速入门

以下是如何构建库并在 Matrix Market 格式文件的矩阵上运行示例求解器的说明。默认提供的示例使用全 1 向量作为线性系统的右侧,使用全 0 向量作为初始解。如果要提供自己的右侧值和初始解,请编辑示例。

依赖和要求

要构建项目,您需要 CMakeCUDA Toolkit。如果要尝试 AMGX 库的分布式版本,还需要 MPI 实现,例如 Linux 上的 OpenMPI 或 Windows 上的 MPICH。您需要支持 c++11 的编译器(例如 GCC 4.8 或 MSVC 14.0)。 您还需要计算能力 >=3.0 的 NVIDIA GPU,请在此处查看您的 GPU 是否支持。

克隆/拉取

为了拉取所有必要的依赖项,必须使用 --recursive 选项克隆 AmgX,即:

git clone --recursive git@github.com:nvidia/amgx.git

如果要更新未使用 --recursive 克隆的存储库副本,可以使用:

git submodule update --init --recursive

构建

从项目根目录进行典型的构建命令:

mkdir build
cd build
cmake ../
make -j16 all

有几个自定义 CMake 标志可以使用:

  • CUDA_ARCH:虚拟架构值列表,在 CMakeLists 文件中转换为相应的 nvcc 标志。例如:
cmake ....  -DCUDA_ARCH="60 70" ....
  • CMAKE_NO_MPI:布尔值。如果为 True,则强制非 MPI(单 GPU)构建。会生成较小的库,可以在未安装 MPI 的系统上运行。如果未指定,则在 FindMPI 脚本找到任何 MPI 安装时启用 MPI 构建。
  • AMGX_NO_RPATH:布尔值。默认情况下,CMake 会向二进制文件添加 -rpath 标志。将此标志设置为 True 告诉 CMake 不这样做 - 对于控制执行环境很有用。
  • MKL_ROOT_DIR 和 MAGMA_ROOT_DIR:字符串值。MAGMA/MKL 功能用于加速一些 AMGX 特征求解器。如果 AMGX 未使用 MKL/MAGMA 支持构建,这些求解器将返回错误"不支持"。

构建系统现在启用 CUDA 作为语言,并使用 FindCUDAToolkit 和 FindMPI, 因此请参考 CMake 安装中这些脚本的模块特定标志。

使用 NVIDIA HPC SDK 构建时,请使用 CMake >= 3.22, 并使用 GCC 进行 C/CXX 编译,例如

cmake \
    -DCMAKE_C_COMPILER=gcc \
    -DCMAKE_CXX_COMPILER=g++ \
    -DCMAKE_BUILD_TYPE=Release \
    -DCUDA_ARCH="80" ..

构建的产物是共享库和静态库(libamgxsh.so 或 amgxsh.dll 和 libamgx.a 或 amgx.lib)以及"examples"目录中的几个二进制文件,为您提供 使用各种 AMGX C API 的示例。仅在启用 MPI 构建时才构建 MPI 示例。

运行示例

示例输入矩阵 matrix.mtx 位于 examples 目录中。示例 AMGX 求解器配置位于根文件夹中的 src/configs 目录中。确保示例能够找到 AMGX 共享库 - 默认情况下,二进制文件使用 -rpath 标志,但您可以在环境变量中手动指定路径:Linux 上的 LD_LIBRARY_PATH 和 Windows 上的 PATH

从构建目录运行单 GPU 示例:

> examples/amgx_capi -m ../examples/matrix.mtx -c ../src/configs/FGMRES_AGGREGATION.json
AMGX 版本 2.0.0-public-build125
构建于 2017年10月7日 04:51:11
使用 CUDA Runtime 9.0 编译,使用 CUDA 驱动程序 9.0
警告:未指定模式,默认使用 dDDI。
正在读取数据...
未找到 RHS 向量。使用 RHS b=[1,…,1]^T
未找到解向量。将初始解设置为 x=[0,…,0]^T
读取完成
AMG 网格:
         层级数:1
            层级         行数               非零元素数    稀疏度       内存 (GB)
         --------------------------------------------------------------
           0(D)           12                61     0.424       8.75e-07
         --------------------------------------------------------------
         网格复杂度:1
         算子复杂度:1
         总内存使用:8.75443e-07 GB
         --------------------------------------------------------------
           迭代      内存使用 (GB)       残差           收敛率
         --------------------------------------------------------------
            初始            0.403564   3.464102e+00
              0            0.403564   1.619840e-14         0.0000
         --------------------------------------------------------------
         总迭代次数:1
         平均收敛率:               0.0000
         最终残差:           1.619840e-14
         残差总减少量:      4.676075e-15
         最大内存使用:                0.404 GB
         --------------------------------------------------------------
总时间:0.00169123
    设置:0.00100198 秒
    求解:0.000689248 秒
    求解(每次迭代):0.000689248 秒

从构建目录运行多 GPU 示例:

> mpirun -n 2 examples/amgx_mpi_capi.exe -m ../examples/matrix.mtx -c ../src/configs/FGMRES_AGGREGATION.json
进程 0 选择设备 0
进程 1 选择设备 0
AMGX 版本 2.0.0-public-build125
构建于 2017年10月7日 04:51:11
使用 CUDA Runtime 9.0 编译,使用 CUDA 驱动程序 9.0
警告:未指定模式,默认使用 dDDI。
警告:未指定模式,默认使用 dDDI。
无法将文件读取为 JSON 对象,尝试作为 AMGX 配置读取
将配置字符串转换为当前配置版本
解析配置字符串:exception_handling=1 ;
使用普通 MPI(主机缓冲区)通信器...
正在读取文件中的矩阵维度:../examples/matrix.mtx
正在读取数据...
未找到 RHS 向量。使用 RHS b=[1,…,1]^T
未找到解向量。将初始解设置为 x=[0,…,0]^T
读取完成
使用普通 MPI(主机缓冲区)通信器...
使用普通 MPI(主机缓冲区)通信器...
使用普通 MPI(主机缓冲区)通信器...
AMG 网格:
         层级数:1
            层级         行数               非零元素数    稀疏度       内存 (GB)
         --------------------------------------------------------------
           0(D)           12                61     0.424        1.1e-06
         --------------------------------------------------------------
         网格复杂度:1
         算子复杂度:1
         总内存使用:1.09896e-06 GB
         --------------------------------------------------------------
           迭代      内存使用 (GB)       残差           收敛率
         --------------------------------------------------------------
            初始             0.79834   3.464102e+00
              0             0.79834   3.166381e+00         0.9141
              1              0.7983   3.046277e+00         0.9621
              2              0.7983   2.804132e+00         0.9205
              3              0.7983   2.596292e+00         0.9259
              4              0.7983   2.593806e+00         0.9990
              5              0.7983   3.124839e-01         0.1205
              6              0.7983   5.373423e-02         0.1720
              7              0.7983   9.795357e-04         0.0182
              8              0.7983   1.651436e-13         0.0000
         --------------------------------------------------------------
         总迭代次数:9
         平均收敛率:               0.0331
         最终残差:           1.651436e-13
         残差总减少量:      4.767284e-14
         最大内存使用:                0.798 GB
         --------------------------------------------------------------
总时间:0.0170917
    设置:0.00145344 秒
    求解:0.0156382 秒
    求解(每次迭代):0.00173758 秒

测试库

AmgX 使用 ci/ 目录中的基础设施自动进行测试, 更多信息请参阅 README.md

进一步阅读

插件和其他软件的绑定

用户 @shwina 构建了 AMGX 的 Python 绑定,请查看以下仓库:https://github.com/shwina/pyamgx。

用户 @piyueh 提供了他们用于 AMGX 的 PETSc 包装器插件的链接:https://github.com/barbagroup/AmgXWrapper。

AMGX 的 Julia 绑定可在以下地址获得:https://github.com/JuliaGPU/AMGX.jl。

有关接口的详细描述,请参阅 API 参考文档。在接下来的几周内,我们将提供更多有关该项目的信息和细节,例如:

  • 项目开发计划和优先事项
  • 问题
  • 贡献信息
  • 求解器配置信息
  • 代码和算法信息
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号