并行计算:如何在用户之间共享计算资源?
Parallel computing: how to share computing resources among users?
我正在 运行 在具有以下规格的 Linux 机器上进行模拟。
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 80
On-line CPU(s) list: 0-79
Thread(s) per core: 2
Core(s) per socket: 20
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz
Stepping: 4
CPU MHz: 3099.902
CPU max MHz: 3700.0000
CPU min MHz: 1000.0000
BogoMIPS: 4800.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 28160K
这是我的求解器的 运行 命令行脚本。
/path/to/meshfree/installation/folder/meshfree_run.sh # on 1 (serial) worker
/path/to/meshfree/installation/folder/meshfree_run.sh N # on N parallel MPI processes
我和我的另一个同事共享这个系统。他的解决方案使用 10 个内核。在这种情况下,对我来说最快的选择是什么?使用 30 个 MPI 进程?
我是一名机械工程师,对并行计算知之甚少。如果问题太愚蠢,请原谅。
Q : "What would be the fastest option for me in this case? ...running short on time. I am already in the middle of a simulation."
向亚琛致敬。如果不是 ex-post 备注,最快的选择 将是预先配置计算生态系统,以便:
- 检查您的 NUMA 设备的完整详细信息 - 使用
lstopo
,或 lstopo-no-graphics -.ascii
而不是 lscpu
- 启动你的工作,将尽可能多的 MPI 工作进程映射到物理上(最好每个都映射到它的 private)CPU-core(如这些值得这样做,因为它们承载了核心 FEM / 网格处理工作量)
- 如果您的 FH 政策不禁止这样做,您可以要求系统管理员引入 CPU-affinity 映射(这将保护您的 in-cache 数据从驱逐和昂贵的重新获取中,这将使 10-CPUs 映射专门供您的同事使用,而上述 30-CPUs 专门映射供您的应用程序运行和列出的其余资源~ 40-CPUs ~ 被“共享”-供你们各自的CPU-亲和掩码使用。
Q : "Using 30 MPI processes?"
不,这不是 ASAP 处理的合理假设 - 对 worker 使用尽可能多的 CPUs,尽可能多地用于已经 MPI 并行化的 FEM 模拟(它们具有高度并行性,并且通常一个天生的 "narrow" 局部性(表示为稀疏矩阵/N 波段矩阵)求解器,因此与其他数值问题相比,并行部分通常非常高)- Amdahl's Law explains why.
当然,对于一些可能存在一些细微差别的学术反对意见,对于这样的情况,通信开销可能会在少一个 worker 的情况下略微减少,但需要蛮力处理规则在 FEM/meshed-solvers(通信成本通常比大规模的 FEM 分段数值计算部分要便宜得多,只发送少量相邻块的 "boundary"-节点的状态数据)
htop
将向您显示实际状态(可能会注意到 process:CPU-核心四处游荡,由于 HT / CPU-核心热平衡技巧,减少了结果性能)
并请参考 meshfree
支持,以获取有关最佳实践的知识库资源。
下次 - 最好的选择是获得一个限制较少的计算基础设施来处理关键工作负载(考虑到业务关键条件,认为这是平滑 BAU 的风险,如果影响您的业务连续性则更多) .
我正在 运行 在具有以下规格的 Linux 机器上进行模拟。
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 80
On-line CPU(s) list: 0-79
Thread(s) per core: 2
Core(s) per socket: 20
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz
Stepping: 4
CPU MHz: 3099.902
CPU max MHz: 3700.0000
CPU min MHz: 1000.0000
BogoMIPS: 4800.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 28160K
这是我的求解器的 运行 命令行脚本。
/path/to/meshfree/installation/folder/meshfree_run.sh # on 1 (serial) worker
/path/to/meshfree/installation/folder/meshfree_run.sh N # on N parallel MPI processes
我和我的另一个同事共享这个系统。他的解决方案使用 10 个内核。在这种情况下,对我来说最快的选择是什么?使用 30 个 MPI 进程?
我是一名机械工程师,对并行计算知之甚少。如果问题太愚蠢,请原谅。
Q : "What would be the fastest option for me in this case? ...running short on time. I am already in the middle of a simulation."
向亚琛致敬。如果不是 ex-post 备注,最快的选择 将是预先配置计算生态系统,以便:
- 检查您的 NUMA 设备的完整详细信息 - 使用
lstopo
,或lstopo-no-graphics -.ascii
而不是lscpu
- 启动你的工作,将尽可能多的 MPI 工作进程映射到物理上(最好每个都映射到它的 private)CPU-core(如这些值得这样做,因为它们承载了核心 FEM / 网格处理工作量)
- 如果您的 FH 政策不禁止这样做,您可以要求系统管理员引入 CPU-affinity 映射(这将保护您的 in-cache 数据从驱逐和昂贵的重新获取中,这将使 10-CPUs 映射专门供您的同事使用,而上述 30-CPUs 专门映射供您的应用程序运行和列出的其余资源~ 40-CPUs ~ 被“共享”-供你们各自的CPU-亲和掩码使用。
Q : "Using 30 MPI processes?"
不,这不是 ASAP 处理的合理假设 - 对 worker 使用尽可能多的 CPUs,尽可能多地用于已经 MPI 并行化的 FEM 模拟(它们具有高度并行性,并且通常一个天生的 "narrow" 局部性(表示为稀疏矩阵/N 波段矩阵)求解器,因此与其他数值问题相比,并行部分通常非常高)- Amdahl's Law explains why.
当然,对于一些可能存在一些细微差别的学术反对意见,对于这样的情况,通信开销可能会在少一个 worker 的情况下略微减少,但需要蛮力处理规则在 FEM/meshed-solvers(通信成本通常比大规模的 FEM 分段数值计算部分要便宜得多,只发送少量相邻块的 "boundary"-节点的状态数据)
htop
将向您显示实际状态(可能会注意到 process:CPU-核心四处游荡,由于 HT / CPU-核心热平衡技巧,减少了结果性能)
并请参考 meshfree
支持,以获取有关最佳实践的知识库资源。
下次 - 最好的选择是获得一个限制较少的计算基础设施来处理关键工作负载(考虑到业务关键条件,认为这是平滑 BAU 的风险,如果影响您的业务连续性则更多) .