AMGX

AMGX

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

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

AmgXGPU加速线性求解器多重网格法NVIDIAGithub开源项目

代数多重网格求解器 (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

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

目录

<a name="quickstart"></a> 快速入门

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

<a name="requirements"></a> 依赖和要求

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

<a name="cloning"></a> 克隆/拉取

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

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

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

git submodule update --init --recursive

<a name="building"></a> 构建

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

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 示例。

<a name="running"></a> 运行示例

示例输入矩阵 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 秒

<a name="testing"></a> 测试库

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

<a name="further-reading"></a> 进一步阅读

<a name="bindings"></a> 插件和其他软件的绑定

用户 @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 参考文档。在接下来的几周内,我们将提供更多有关该项目的信息和细节,例如:

  • 项目开发计划和优先事项
  • 问题
  • 贡献信息
  • 求解器配置信息
  • 代码和算法信息

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多