add fix
中文文档 | English
DG_RoomAcoustics 是一个基于时域波动法的开源室内声学仿真软件包。该软件采用节点间断伽辽金(Discontinuous Galerkin, DG)方法对线性声学方程进行空间离散,并使用高阶显式 ADER(Arbitrary high-order DERivative)格式进行时间积分。DG_RoomAcoustics 在传统几何声学工具难以胜任的场景中表现优异,能够高精度地捕捉衍射、散射和模态效应等复杂波动现象。软件遵循面向对象编程范式,注重易用性和灵活性,使研究人员和工程师能够以高精度和高计算效率仿真各类室内声学问题。
通过 Triton/TileLang 定制 Kernel 和 CUDA Graph 等优化技术,软件支持在 NVIDIA GPU 及国产沐曦(MetaX)C500 GPU 上进行高效加速计算,相对 CPU 可实现最高约 95 倍的性能提升。
通过 GitHub 仓库安装 DG_RoomAcoustics:
git clone https://github.com/YinLiu-91/edg-acoustics.git cd edg-acoustics python3 -m pip install -e .
请参阅在线文档以高效使用和开发 DG_RoomAcoustics。使用 DG_RoomAcoustics 时,可参考仓库 examples 目录中提供的示例,这些示例涵盖了多种场景,帮助您理解如何将软件应用于特定需求。
DG_RoomAcoustics 支持通过 CUDA/类CUDA 进行 GPU 加速计算,在 NVIDIA GPU(如 V100 等)/沐曦C500 等国产GPU 上可实现显著的性能提升。通过 EDG_ACOUSTICS_DEVICE 环境变量可灵活切换计算设备:
EDG_ACOUSTICS_DEVICE
# 自动检测(默认优先使用 CUDA) export EDG_ACOUSTICS_DEVICE=auto # 强制使用 CPU export EDG_ACOUSTICS_DEVICE=cpu # 强制使用 CUDA/类CUDA export EDG_ACOUSTICS_DEVICE=cuda
此外,软件已适配国产沐曦(MetaX)C500 GPU,通过 MACA 兼容层实现对国产硬件平台的完整支持。针对该架构的特性,我们定制了 TileLang FP64 GEMM 算子以充分利用其计算能力。
以下数据来源于 scenario1 标准测试算例,在 Intel CPU(8 线程)与 国产 GPU 上的对比。
scenario1
coarser
lc0p20
torch.mm
使用 Triton 编写定制 GPU Kernel,替代纯 PyTorch 操作以减少 Kernel 启动开销和内存带宽消耗:
volume_surface_rhs_kernel
compact_interior_flux_kernel
rho0
c0
boundary_ri_flux_kernel
boundary_rp_flux_kernel
boundary_rp_cp_flux_kernel
使用 TileLang 为 DG 求解器中特定形状的 FP64 矩阵乘法编写定制 GEMM Kernel,针对沐曦 C500 GPU 架构(warp=64、共享内存 64 KiB)优化:
bm48_bn64_bk16
bm128_bn64_bk4
(nx, ny, nz)
Dr
Ds
Dt
Q
[105,35] @ [35,N]
[Np, 4, N_tets]
[Np, N_tets, 4]
[3,3,Np,N_tets]
[3,3,N_tets]
这些优化技术的综合效果使求解器在 GPU 上的时间步进性能远超朴素的 PyTorch 实现,并充分发挥了 NVIDIA 和国产沐曦 GPU 的计算潜力。
本算例复现 COMSOL Multiphysics 6.4 官方教程 porous_absorber_time_domain,使用二维间断伽辽金有限元(DG-FEM)方法模拟空气波导中底部多孔吸声材料对声脉冲的反射和吸收过程。算例目录位于 examples/dgfem_acoustic_2d/porous_absorber_time_domain。
porous_absorber_time_domain
examples/dgfem_acoustic_2d/porous_absorber_time_domain
物理模型:多孔材料(三聚氰胺泡沫)采用 Johnson-Champoux-Allard (JCA) 五参数模型描述其频率相关的等效密度和等效压缩率,通过矢量拟合(vectfit3,8 极点)将频域特性转换为时域辅助微分方程(ADE),实现扩展反应(ER)建模。声源为高斯导数型压力脉冲(Ricker 子波),接收点记录时域声压历史,总仿真时长 10 ms。
关键技术:
与 COMSOL 验证结果:DG-FEM 与 COMSOL 参考解全时域相对 L2 误差约 5–7%,PML 在尾部(8–10 ms)精度远优于 Sponge(PML 相对 L2 误差约 6–11%,Sponge 高达 37–86%)。
下图展示了 5 cm 和 15 cm 多孔层厚度工况下某一时刻的声压场分布云图,可以直观观察声波在多孔材料中的透射和衰减过程。
本算例复现 COMSOL 6.3 教程示例 “Car Cabin Acoustics — Transient Analysis”,对汽车乘员舱内的三维瞬态声波传播进行时域仿真,并与 COMSOL 基准结果进行逐点验证。算例目录位于 examples/car_cabin_acoustics_transient_63_cleared。
examples/car_cabin_acoustics_transient_63_cleared
物理模型:三维汽车车厢声腔(空气密度 1.2 kg/m³,声速 343 m/s),左前高音扬声器表面施加高斯调制正弦法向速度激励(中心频率 1000 Hz)。声波在车厢内传播,与车窗、仪表板、车门、皮革座椅、地毯和车顶内衬等不同声学边界相互作用。
网格与边界条件:
mesh2
.mph
AbsorbBC
验证方法:在车厢内设置 3 个麦克风接收点(坐标与 COMSOL “Microphone Response” 结果组对齐),将 EDG 结果插值到 COMSOL golden 时间序列上,计算每个点和全局的 RMS、最大绝对误差和相对 L2 误差。
本项目采用 GNU General Public License v3.0 许可协议。详情请参见 LICENSE 文件。
我们欢迎为 DG_RoomAcoustics 做出贡献!如果您希望帮助改进项目,请参阅贡献指南。
DG_RoomAcoustics 使用了以下开源软件包/代码/工具包:
**GMSH**:功能强大的网格生成工具,内置 CAD 引擎和后处理器。
**meshio**:多功能的网格文件输入/输出库。
**modepy**:用于在单纯形上进行模态(多项式)基函数求值和积分的库。
**numpy**:强大的 Python 数值计算库。
**Vector Fitting**:用于将有理函数拟合到频域数据的软件包。
我们感谢上述软件包的作者对开源社区所做的贡献。
本软件包最初基于 edg-acoustics ,后续由项目作者Fork并进行了修改与拓展。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
中文文档 | English
简介
DG_RoomAcoustics 是一个基于时域波动法的开源室内声学仿真软件包。该软件采用节点间断伽辽金(Discontinuous Galerkin, DG)方法对线性声学方程进行空间离散,并使用高阶显式 ADER(Arbitrary high-order DERivative)格式进行时间积分。DG_RoomAcoustics 在传统几何声学工具难以胜任的场景中表现优异,能够高精度地捕捉衍射、散射和模态效应等复杂波动现象。软件遵循面向对象编程范式,注重易用性和灵活性,使研究人员和工程师能够以高精度和高计算效率仿真各类室内声学问题。
通过 Triton/TileLang 定制 Kernel 和 CUDA Graph 等优化技术,软件支持在 NVIDIA GPU 及国产沐曦(MetaX)C500 GPU 上进行高效加速计算,相对 CPU 可实现最高约 95 倍的性能提升。
安装
通过 GitHub 仓库安装 DG_RoomAcoustics:
使用与文档
请参阅在线文档以高效使用和开发 DG_RoomAcoustics。使用 DG_RoomAcoustics 时,可参考仓库 examples 目录中提供的示例,这些示例涵盖了多种场景,帮助您理解如何将软件应用于特定需求。
GPU 加速
DG_RoomAcoustics 支持通过 CUDA/类CUDA 进行 GPU 加速计算,在 NVIDIA GPU(如 V100 等)/沐曦C500 等国产GPU 上可实现显著的性能提升。通过
EDG_ACOUSTICS_DEVICE环境变量可灵活切换计算设备:此外,软件已适配国产沐曦(MetaX)C500 GPU,通过 MACA 兼容层实现对国产硬件平台的完整支持。针对该架构的特性,我们定制了 TileLang FP64 GEMM 算子以充分利用其计算能力。
GPU 加速性能对比
以下数据来源于
scenario1标准测试算例,在 Intel CPU(8 线程)与 国产 GPU 上的对比。CPU vs GPU 时域求解性能
coarser)lc0p20)求解器热点优化演进
TileLang Kernel 在沐曦 C500 上的加速(相对
torch.mm)Triton Kernel
使用 Triton 编写定制 GPU Kernel,替代纯 PyTorch 操作以减少 Kernel 启动开销和内存带宽消耗:
volume_surface_rhs_kernel**:融合体积 RHS 组装,单次遍历计算全部 4 个打包 RHS 分量compact_interior_flux_kernel**:融合面数据收集、跳跃量和迎风通量计算,将 13 个预计算系数数组压缩为 3 个法向分量 + 2 个标量(rho0、c0),大幅减少全局内存读取boundary_ri_flux_kernel/boundary_rp_flux_kernel/ **boundary_rp_cp_flux_kernel**:针对反射系数 (RI)、有理极点 (RP) 和复共轭极点 (CP) 边界条件的专用融合 Kernel,支持边界 ADE 状态更新TileLang Kernel
使用 TileLang 为 DG 求解器中特定形状的 FP64 矩阵乘法编写定制 GEMM Kernel,针对沐曦 C500 GPU 架构(warp=64、共享内存 64 KiB)优化:
bm48_bn64_bk16):加速 Lift 矩阵乘法(形状 35×60 × 60×N),使用全列 warp 策略和 swizzle 技术减少共享内存 bank 冲突,相对torch.mm加速 2.26 倍bm128_bn64_bk4):加速合并导数矩阵乘法(形状 105×35 × 35×N),利用 C500 大寄存器文件特性,相对torch.mm加速 1.39 倍其他优化技术
(nx, ny, nz)推导声学通量,替代 13 个预计算系数数组Dr、Ds、Dt分别与Q相乘改为单个[105,35] @ [35,N]的 tall DGEMM[Np, 4, N_tets]的 SoA 布局转为[Np, N_tets, 4],使同一节点的 4 个物理量在内存中连续[3,3,Np,N_tets]压缩为[3,3,N_tets]这些优化技术的综合效果使求解器在 GPU 上的时间步进性能远超朴素的 PyTorch 实现,并充分发挥了 NVIDIA 和国产沐曦 GPU 的计算潜力。
算例介绍
二维多孔吸声层时域仿真
本算例复现 COMSOL Multiphysics 6.4 官方教程
porous_absorber_time_domain,使用二维间断伽辽金有限元(DG-FEM)方法模拟空气波导中底部多孔吸声材料对声脉冲的反射和吸收过程。算例目录位于examples/dgfem_acoustic_2d/porous_absorber_time_domain。物理模型:多孔材料(三聚氰胺泡沫)采用 Johnson-Champoux-Allard (JCA) 五参数模型描述其频率相关的等效密度和等效压缩率,通过矢量拟合(vectfit3,8 极点)将频域特性转换为时域辅助微分方程(ADE),实现扩展反应(ER)建模。声源为高斯导数型压力脉冲(Ricker 子波),接收点记录时域声压历史,总仿真时长 10 ms。
关键技术:
与 COMSOL 验证结果:DG-FEM 与 COMSOL 参考解全时域相对 L2 误差约 5–7%,PML 在尾部(8–10 ms)精度远优于 Sponge(PML 相对 L2 误差约 6–11%,Sponge 高达 37–86%)。
下图展示了 5 cm 和 15 cm 多孔层厚度工况下某一时刻的声压场分布云图,可以直观观察声波在多孔材料中的透射和衰减过程。
汽车车厢瞬态声学分析
本算例复现 COMSOL 6.3 教程示例 “Car Cabin Acoustics — Transient Analysis”,对汽车乘员舱内的三维瞬态声波传播进行时域仿真,并与 COMSOL 基准结果进行逐点验证。算例目录位于
examples/car_cabin_acoustics_transient_63_cleared。物理模型:三维汽车车厢声腔(空气密度 1.2 kg/m³,声速 343 m/s),左前高音扬声器表面施加高斯调制正弦法向速度激励(中心频率 1000 Hz)。声波在车厢内传播,与车窗、仪表板、车门、皮革座椅、地毯和车顶内衬等不同声学边界相互作用。
网格与边界条件:
mesh2导出,共 336,228 个四面体,44,448 个节点.mph文件中恢复:硬声学边界、恒阻抗边界(车窗/仪表板/车门)、有理逼近频率相关阻抗边界(座椅/地毯/车顶)、法向速度源AbsorbBC所需的反射系数有理逼近验证方法:在车厢内设置 3 个麦克风接收点(坐标与 COMSOL “Microphone Response” 结果组对齐),将 EDG 结果插值到 COMSOL golden 时间序列上,计算每个点和全局的 RMS、最大绝对误差和相对 L2 误差。
许可证信息
本项目采用 GNU General Public License v3.0 许可协议。详情请参见 LICENSE 文件。
贡献
我们欢迎为 DG_RoomAcoustics 做出贡献!如果您希望帮助改进项目,请参阅贡献指南。
致谢
DG_RoomAcoustics 使用了以下开源软件包/代码/工具包:
**GMSH**:功能强大的网格生成工具,内置 CAD 引擎和后处理器。
**meshio**:多功能的网格文件输入/输出库。
**modepy**:用于在单纯形上进行模态(多项式)基函数求值和积分的库。
**numpy**:强大的 Python 数值计算库。
**Vector Fitting**:用于将有理函数拟合到频域数据的软件包。
我们感谢上述软件包的作者对开源社区所做的贡献。
鸣谢
本软件包最初基于 edg-acoustics ,后续由项目作者Fork并进行了修改与拓展。