Linux 并行计算:如何在用户之间共享计算资源?

Linux 并行计算:如何在用户之间共享计算资源?,linux,performance,parallel-processing,linux-kernel,parallelism-amdahl,Linux,Performance,Parallel Processing,Linux Kernel,Parallelism Amdahl,我正在一台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):

我正在一台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>强>:“在这种情况下,对于我来说,什么是<强>最快选项< /强>?……短时间运行。我已经处于模拟的中间。”

向亚琛致敬。如果不是事后评论,最快的选择是预先配置计算生态系统,以便:

  • 使用
    lstopo
    lstopo无图形-.ascii
    而不是
    lscpu
  • 启动作业时,将尽可能多的MPI工作进程映射到物理(最好每个进程都专门映射到其私有)CPU核心上(因为这些进程承载着核心FEM/网格化处理工作负载,因此它们值得这样做)
  • 如果您的FH策略不禁止这样做,您可以要求系统管理员引入CPU关联映射(这将保护您的缓存内数据不被逐出和昂贵的重新获取,这将使10个CPU专门映射供您的同事使用,而上述30个CPU专门映射供您的应用程序运行,其余列出的资源(40个CPU)被“共享”——供双方使用,由各自的CPU关联掩码使用
Q:“使用30个MPI进程?”

不,这不是ASAP处理的合理假设-为工作人员使用尽可能多的CPU,用于已经MPI并行化的FEM模拟(它们具有高度并行性,并且通常具有本质上的“窄”局部性(可以表示为稀疏矩阵/N带矩阵)因此,与其他数值问题相比,平行部分通常非常高

当然,可能会有一些学术上的反对意见,关于一些可能的细微差异,例如,通信开销可能会在少一个工人的情况下稍微减少,但在FEM/网格解算器中需要蛮力处理规则(通信成本通常比大型FEM分段数值计算部分便宜,只发送少量相邻块的“边界”——节点的状态数据)

htop
将向您显示实际状态(可能需要注意的是:由于HT/CPU内核热平衡技巧,导致CPU内核徘徊,从而降低了最终性能)

请务必咨询meshfree的支持部门,以获取有关最佳实践的知识库资源



下次最好的选择是获取一个不受限制的计算基础设施来处理关键的工作负载(考虑到商业关键条件认为这是平滑BAU的风险,更大程度上影响了你的业务连续性).

问题是——我最好运行一次这个过程,还是启动30次?这是一个非常特定于应用程序的问题,取决于太多的变量,无法得出结论。总之,这是一个“尝试并发现”的案例,它只是一项工作。我需要为它分配正确的资源。因此,在一台40核、10核的机器上它已经被使用了,我最好在30个处理器上运行代码吗?同时考虑超线程。你建议的备选方案是什么?为什么你不能运行它并找出最好的方案?备选方案是使用60个进程,但我不确定进程如何在处理器之间分配。整个sim卡大约需要4天时间我的时间已经很短了。我已经在模拟中了。你会想,在开始4天的模拟之前,你应该知道最大化你的计算能力的方法-通常是通过使用一个缩减的版本(例如10%个样本)。。再次-这不是任何人都能回答的问题,因为它太过定制。谢谢。这很有帮助。欢迎光临,@vikingd-您可能喜欢这一点,因为它对性能有影响的细节以及Amdahl's Law net在现实世界
[SERIAL]
-
[PARALLEL]
工作负载上的交互式图形工具(模拟器)