0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA cuFFTMp FFT解决具有挑战性的问题

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-13 09:04 次阅读

NVIDIA 宣布发布 Early Access ( EA )的 cuFFTMp 。 cuFFTMp 是 cuFFT 的多节点、多进程扩展,使科学家和工程师能够在 exascale 平台上解决具有挑战性的问题。

FFTs ( Fast Fourier Transforms )广泛应用于分子动力学、信号处理、计算流体力学( CFD )、无线多媒体和机器学习等领域。有了 cuFFTMp , NVIDIA 现在不仅支持单个系统中的多个 GPU ,还支持跨多个节点的多个 GPU 。

图 1 显示, cuFFTMp 达到 1.8 PFlop / s 以上,超过该规模转换峰值机器带宽的 70% 。

poYBAGJWIe-AP3VhAAG5CUtpEiQ912.png

图 1 。 Selene cluster 上的 cuFFTMp (弱伸缩)性能

在图 2 中,问题大小保持不变,但 GPU 的数量从 8 增加到 2048 。可以看到, cuFFTMp 成功地扩展了问题,将单精度时间从 8 GPU ( 1 个节点)的 78ms 提高到 2048 GPU ( 256 个节点)的 4ms 。

poYBAGJWIf-ASC_CAAFeEUM0mnM670.png

图 2 。 Selene cluster 上的 cuFFTMp (强伸缩)性能

图 1 和图 2 在 Selene 集群上运行。 Selene 由 NVIDIA DGXA100 和 NVSwitch ( 300 GB / s / GPU ,双向)以及 Mellanox Infiniband HDR ( 200 GB / s / node ,双向)组成,每个节点 8xA100-80GB 。使用 nvcr 提供的 CUDA 11.4 和 NVIDIA HPC SDK 21.9 Docker 容器 进行测试。 io / NVIDIA / nvhpc:21.9-runtime-cuda11 。 4-ubuntu20 。 04.GPU 应用程序时钟设置为最大值。

性能和可扩展性

由于MPI_Alltoallv类型的全局集体通信,分布式 3D FFT 以通信受限而闻名。MPI_Alltoallv是分布式 FFT 的主要瓶颈,因为与高计算能力相比,节点间带宽较低,而且all_to_all类型通信的加速器感知 MPI 实现在质量上各不相同。

cuFFTMp 使用 NVSHMEM ,这是一个基于 OpenSHMEM 标准的新通信库,通过提供内核启动的通信,为 NVIDIA GPU 设计。 NVSHMEM 创建一个全局地址空间,其中包含集群中所有 GPU 的内存。从 CUDA 内核内部执行通信可以实现细粒度远程数据访问,从而降低同步成本,并利用 GPU 中的大规模并行性来隐藏通信开销。

通过使用 NVSHMEM , cuFFTMp 独立于 MPI 实现的质量,这是至关重要的,因为不同 MPI 的性能可能会有很大差异。有关更多信息,请参阅 关于高性能系统 FFT 库基准测试的中期报告。第三章 。

图 3 显示,随着 GPU 的数量增加一倍, cuFFTMp 能够保持大约 75% 的峰值。

poYBAGJWIhuAbGVaAAF3hRm-CRA788.png

图 3 。硒原子团上 cuFFTMp 的弱标度,显示为峰值性能的一小部分

峰值性能是使用 2000 GB / s / GPU 的双向全局内存带宽, 300 GB / s / GPU 的双向 NVLink 带宽和 25 GB / s / GPU 的 Infiniband 带宽。

设 N 为 1D 变换大小, G 为 GPU 的个数。每个 GPU 都拥有 N 3/ G 元素(每个元素 8 或 16 字节),模型假设 N 3/ G 元素在全局内存中被读/写六次,并且 N 3 G 2元素从每个 GPU 发送一次到其他 GPU 。在 4096 GPU 上,非 InfiniBand 通信所花费的时间不到总时间的 10% 。

MPI 可移植性和多体系结构支持

如前所述, cuFFTMp 的性能不依赖于 MPI 实现。为了便于携带, cuFFTMp 要求启动 MPI ,并管理 CPU 上的数据分发。

目前, TMP 静态链接到 NVSHMEM 。 NVSHMEM 使用一个小型 MPI “引导插件”( NVSHMEM _ bootstrap _ MPI.so ),它是使用 MPI 构建的,并在运行时自动加载。此引导程序针对 HPC SDK 中包含的 OpenMPI 版本。对于依赖于另一个 MPI 实现的用户应用程序, EA 包包括帮助程序脚本,用于构建针对不同 MPI 的引导程序。

cuFFTMp 同时支持 Linux x86 _ 64 和 IBM POWER 体系结构。您可以下载不同体系结构的 EA 包。图 4 显示,在 256 个节点中使用 1536V100 GPU , cuFFTMp 可以达到 50Tflop / s 以上,转换 40963复杂的数据点,仅占 Summit 系统的 5% 。

pYYBAGJWIiKAR_AZAAD-yiqudas363.png

图 4 。 cuFFTMp ( FP32 )在 Summit cluster 上的性能

图 5 显示,在 256 个节点中使用 1536V100 GPU 时, cuFFTMp 可以达到 4096 个以上的 TFlop / s3复杂的数据点,仅占 Summit 系统的 5% 。

pYYBAGJWIjqAeUziAAEAmSFST9Y106.png

图 5 。 cuFFTMp ( FP64 )在 Summit cluster 上的性能

轻松过渡到 TMP

cuFFTMp 只是当前多 GPU cuFFT 库的扩展。大多数现有的多 GPU 函数适用于 TMP 。作为一个分布式多进程库, cuFFTMp 要求 MPI 被引导(“启动”),并期望数据分布在 MPI 进程之间。下表显示了将应用程序从使用 multi- GPU cuFFT 转换为 cuFFTMp 所需的代码。

Multi-GPU, single-process cuFFT cuFFTMp

#include

#include
#include

MPI_Init(&argc, &argv);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); cudaSetDevice(my_device);


size_t my_NX = (NX / size) + (rank < NX %
size ?1:0);

// host buffer h_f size NX*NY*NZ // host buffer h_f size my_NX*NY*NZ
cufftHandle plan_c2c;
cufftCreate(&plan_c2c);

for (auto i =0; i < NGPUS; ++i)
whichGPUs[i] = i;
cufftXtSetGPUs(plan_c2c, NGPUS,
whichGPUs)


cufftMpAttachComm(plan, CUFFT_COMM_MPI, MPI_COMM_WORLD)

size_t worksize;
cufftMakePlan3d(plan_c2c, NX, NY, NZ, CUFFT_R2C, &worksize);

cudaLibXtDesc *d_f;
cufftXtMalloc(plan_c2c, &d_f, CUFFT_XT_FORMAT_INPLACE);

cufftXtMemcpy(plan_c2c, d_f, h_f, CUFFT_COPY_HOST_TO_DEVICE);

cufftXtExecDescriptor(plan_c2c, d_f, d_f, CUFFT_FORWARD)
// Any user-defined operations (filtering, …)
cufftXtExecDescriptor(plan_c2c, d_f, d_f, CUFFT_INVERSE)

cufftXtMemcpy(plan_c2c, h_f, d_f, CUFFT_COPY_DEVICE_TO_HOST);
cufftXtFree(d_f)

MPI_Finalize();

Slab 、 pencil 和 block 分解是多维 FFT 算法中用于跨节点并行计算的数据分布方法的典型名称。 cuFFTMp EA 仅支持优化的 slab ( 1D )分解,并提供辅助功能,例如 cufftXtSetDistribution 和 cufftMpReshape ,以帮助用户从任何其他数据分发重新分发到 cuFFTMp 的 slab 数据分发。

CufftMP EA 包包括 C ++和 Fortran 示例,覆盖了一系列用例: C2C 、 R2C / C2R 、不同的计划共享工作空间,以及从一个分布到另一个分布的数据或在 GPU 上重新分布。 cuFFTMp 使用 EA 包中包含的 HPC SDK 21.7 +编译器和包装器,为 Fortran 应用程序提供全面支持。

客户体验:湍流模拟

cuFFTMp 使科学家能够研究具有挑战性的流体湍流问题 物理学中最古老的悬而未决的问题 。

为了了解湍流行为,印度海得拉巴塔塔基础研究所( TFRI )的一个研究团队开发了 Fluid3D ,这是一个 CFD 软件包,使用伪谱方法对 Navier-Stokes 方程进行直接数值模拟( DNS )。通过将 Fluid3D 移植到 cuFFTMp 和 CUDA ,该团队现在可以在几个小时内模拟数千个 GPU 上更高的雷诺数流动,这是使用 MPI CPU 版本不可能完成的任务。

在图 6 中,湍流由不同尺度的漩涡组成,能量从大尺度的运动转移到小尺度。模拟和理解大型 DNS 运行中最小湍流结构的各向同性行为非常重要。

DNS 是提高对湍流理解的关键工具,伪谱方法因其计算效率和准确性而被广泛使用。

湍流模拟的挑战是需要获得高雷诺数( Re )。为了保持计算稳定性, Re 数受到网格分辨率的限制,即 Re 2.25 N 3,其中 N 是每个维度中的网格点数量。因此,模拟高 Re 数湍流需要数值分辨率,计算成本可能会很高,甚至会让人望而却步。

表 1 显示了最大 Re 数所需的网格分辨率以及模拟所需的内存。

Fluid3D 在傅里叶空间中使用二阶指数时间步进法。模拟通常集成在数万个时间步上,每个时间步计算九个 3D FFT 。 FFT 主导整个仿真运行时。每个时间步长的壁面时间是衡量数值实验特定结构的求解时间是否合理的一个重要指标。

图 7 显示了 Fluid3D 的每个时间步的壁时间小于 5 秒,分辨率为 81923,在 Selene 上使用 1024 个 A100 GPU ( 128 个节点)。带有 FFTW-MPI 的 CPU 版本,每次迭代需要 23.9 秒,分辨率为 10243在单个 64 核 CPU 节点上使用 64 MPI 列组的问题大小。与同样 1024 小时的墙时间相比3问题大小使用两个 A100 GPU ,很明显 Fluid3D 从 CPU 节点到单个 A100 的加速比超过 20 倍。

图 7 。在 Selene 上运行的 Fluid3D DNS 的每个时间步长的墙时间

开始使用 cuFFTMp

有兴趣尝试使用 cuFFTMp 将应用程序转换为在多个节点上运行吗?请转到 cuFFTMp EA 的入门页面。下载 cuFFTMp 后,玩一下示例代码,看看它们与 multi- GPU 版本有多相似,以及它们如何在多个节点上扩展。

关于作者

Leopold Cambier 于 2021 在斯坦福大学获得了计算和数学工程博士学位。在博士期间,他专注于从理论和并行计算的角度研究大型稀疏线性系统的快速求解器。 2016 年和 2017 年,他还在NVIDIA cuDNN 团队实习。自从他在 2021 年 1 月加入全职以来,利奥波德一直在cuFFT。

Doris Pan 是 cuFFT 团队的软件工程师,之前是 NVIDIA 的解决方案架构师。她的热情在于帮助和教育世界各地的客户加速他们的 HPC 和 DL / ML 应用程序。在加入 NVIDIA 之前,她曾在 NOAA 、 NASA 和斯伦贝谢担任 HPC 软件工程师和技术经理。多丽丝拥有北卡罗来纳大学教堂山分校环境科学与工程博士学位。

Lukasz Ligowski 是负责cuFFT和设备扩展库的工程经理。他于 2012 加入NVIDIA HPC 数学图书馆团队。最初,他花了大部分时间开发 cuFFT 库,只做了一小段 cuDNN / DL 工作。他从华沙大学超级计算中心ICM )转入 Nvidia 。他推动了 CUDA 的早期采用,并使用其他奇特的硬件体系结构来加速科学应用。他热衷于从硬件中提取最后一点计算性能。在空闲时间,他喜欢喝咖啡和独角兽。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10832

    浏览量

    211249
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4704

    浏览量

    128747
  • 应用程序
    +关注

    关注

    37

    文章

    3248

    浏览量

    57621
收藏 人收藏

    评论

    相关推荐

    从零到一:搭建属于自己的海外IP代理池

    从零到一搭建属于自己的海外IP代理池是一个复杂但具有挑战性的任务,它涉及多个步骤和考虑因素。
    的头像 发表于 11-15 08:15 247次阅读

    Vivado中FFT IP核的使用教程

    本文介绍了Vidado中FFT IP核的使用,具体内容为:调用IP核>>配置界面介绍>>IP核端口介绍>>MATLAB生成测试数据>>测试verilogHDL>>TestBench仿真>>结果验证>>FFT运算。
    的头像 发表于 11-06 09:51 413次阅读
    Vivado中<b class='flag-5'>FFT</b> IP核的使用教程

    2024年ICPC与华为挑战赛冠军杯圆满落幕

    近日,2024年ICPC&华为挑战赛冠军杯在深圳圆满落幕。该活动由华为和ICPC联合举办,汇聚全球顶尖的编程人才,共同探讨和解决具有挑战性的工业界真实问题,并对未来技术发展趋势及关键挑战
    的头像 发表于 10-27 16:00 668次阅读

    NVIDIA为AI城市挑战赛构建合成数据集

    在一年一度的 AI 城市挑战赛中,来自世界各地的数百支参赛队伍在 NVIDIA Omniverse 生成的基于物理学的数据集上测试了他们的 AI 模型。
    的头像 发表于 09-09 10:04 446次阅读

    康谋分享 | 在基于场景的AD/ADAS验证过程中,识别挑战性场景!

    基于场景的验证是AD/ADAS系统开发过程中的重要步骤,然而面对海量驾驶记录数据时,如何实现自动且高效地识别、分类和提取驾驶记录中的挑战性场景?本文康谋为您介绍IVEX软件识别挑战性场景并进行数据分析的强大功能。
    的头像 发表于 08-28 10:16 1040次阅读
    康谋分享 | 在基于场景的AD/ADAS验证过程中,识别<b class='flag-5'>挑战性</b>场景!

    NVIDIA Isaac Lab助力银河通用打造灵巧手抓取技能模型

    在本案例中,银河通用的团队借助Isaac Lab搭建了具有挑战性的灵巧抓握基准 DexGraspNet,这是一个最近提出的基准套件,专门用于学习可泛化的灵巧抓握。DexGraspNet 包含
    的头像 发表于 08-23 15:38 493次阅读

    FPGA设计面临的挑战和解决方案

    设计可靠的可编程逻辑门阵列(FPGA)对于不容故障的系统来说是一项具有挑战性的任务。本文介绍FPGA设计的复杂,重点关注如何在提高可靠的同时管理随之带来的功耗增加、设计复杂
    的头像 发表于 08-06 11:33 415次阅读

    人脸识别技术的可行在于矛盾具有什么

    人脸识别技术的可行在于矛盾具有普遍。 一、引言 人脸识别技术作为人工智能领域的一项重要技术,近年来得到了广泛的关注和应用。然而,随着技术的发展,人脸识别技术也面临着越来越多的挑战
    的头像 发表于 07-04 09:28 471次阅读

    革命的图形分析: NVIDIA cuGraph 加速的下一代架构

    在我们的 先前的图分析探索 中,我们使用 NVIDIA cuGraph 揭示了 GPU-CPU 融合的变革力量。基于这些见解,我们现在引入了一种革命的新架构,它重新定义了图处理的边界。 图形处理
    的头像 发表于 06-04 17:54 7514次阅读
    革命<b class='flag-5'>性</b>的图形分析: <b class='flag-5'>NVIDIA</b> cuGraph 加速的下一代架构

    具有密集交联结构的明胶基水凝胶电解质(ODGelMA)

    目前,开发一种能够成功实现兼具机械强度、离子电导率和界面适应的综合水凝胶电解质基质仍然具有挑战性
    的头像 发表于 05-22 09:17 643次阅读
    <b class='flag-5'>具有</b>密集交联结构的明胶基水凝胶电解质(ODGelMA)

    汽车雷达系统设计面临的挑战

    通道,以进一步提高准确和安全。 对于高价值嵌入式雷达系统的制造商来说,有很大的潜力。然而,竞争性地利用这种潜力可能具有挑战性。在这里,我们将探讨其中的一些
    的头像 发表于 04-28 14:15 3051次阅读
    汽车雷达系统设计面临的<b class='flag-5'>挑战</b>

    单片机开发好学吗?学习中有哪些乐趣与挑战

    单片机编程究竟是不是好学的问题。先来说一说单片机编程的挑战性,对于初学者而言,单片机编程可能具有一定的挑战性,因为它需要你具备以下几点能力;单片机开发学习中的乐趣与
    的头像 发表于 03-28 08:04 1821次阅读
    单片机开发好学吗?学习中有哪些乐趣与<b class='flag-5'>挑战</b>?

    示波器的 FFT 功能怎么调?

    示波器fft功能-示波器中的快速傅立叶变换 FFT功能非常有用。是德科技与您分享keysight示波器fft调出来的方法。Keysight示波器FFT调出来的方法
    的头像 发表于 03-19 18:04 2958次阅读
    示波器的 <b class='flag-5'>FFT</b> 功能怎么调?

    探讨制造中差异变量的概念和重要

    制造高端电子产品是非常复杂精密的过程。制作用于演示或原型的一次样品可能具有挑战性,但真正的挑战在于如何以盈利的方式持续生产。
    的头像 发表于 03-13 10:40 399次阅读
    探讨制造中差异变量的概念和重要<b class='flag-5'>性</b>

    云骥智行:打造由 NVIDIA Jetson 计算平台提供支持的自主专用车辆基础架构

    具有挑战性的工作环境下保持可靠 网络和功能安全需求 更短的研发周期和市场化 借助 NVIDIA Jetson  创建灵活的解决方案 云骥智行域控制器产品为诸如 L4 自动驾驶、自动驾
    的头像 发表于 12-04 20:30 603次阅读