如果 运行 "inside" 个虚拟机,我们会在 Chapel 中看到预期的加速吗?

Will we see an expected speedup in Chapel if running "inside" VMs?

下学期我将在 Chapel 任教,我们正在考虑使用 VM 代替物理机器让学生进行编程。作为 class 的一部分,我希望学生能够在使用多线程时看到加速。我担心他们看不到这一点,因为虚拟机将使用隐式超线程;一个线程将 运行 与多个线程一样快。

有没有人有这方面的经验?有没有可能我可以使用 VM 而不是物理设备?

是的,但是任何加速都不仅仅是语法构造器的问题,而是问题的可实现的 ( [SEQ], [PAR] ) 重新表述:


恕我直言,教授,Amdahl's Law 违背了大多数幼稚的、语法修饰的努力。

Contemporary criticism and re-formulation of the original Dr. Gene AMDAHL's argument 考虑了两个主要扩展:

  • 开销严格公式(不要忘记,从 [SEQ][PAR] 代码执行是有代价的,总是附加成本,这严重违背了任何预期(实际附加开销成本不可知)加速)

  • 任何[PAR]执行粒度的主要限制,在有限的原子事务级别,其中任何进一步可用的资源,甚至在无限容量下,由于进一步的不可分调度,不会进一步提高整体速度权"atomicity"

这两个问题将比您的实际 VM 抽象更能主导您的教育工作,并且确实很高兴更详细地讨论来自调度-"blocking"-资源的所有这些影响,而不仅仅是 CPU-核心和硬件线程(O/S 计划在其上),无论是物理的还是由 VM-hypervisor 抽象的。

正如伟大的 CRAY Chapel 团队成员已经多次指出的那样,真正的硬件 NUMA 问题对最终的附加开销有很大的影响,高级制定的语法实际上会注入到真正的平台处理中,所以风景更加荒凉。


虚拟机:

更好地检查 VM-hypervisor 生成的 VM-NUMA 拓扑(hwloc / lstopo)以更好地解码 VM-CPU-Cache 架构,您的 VM-sand-boxes 将享受任何面向硬件的低级{ C |汇编 } 代码,并且可以想象许多 "fooling" 效果,如果 VM 声称 vCPU 有 8 个独立的 vCPU-sockets,每个有 4 个独立的 vCPU-核心,每个核心都有一个完全独立和自治的非共享 vCPU-CACHE(s) 层次结构,none 级别是共享的(尽管事实上,主机的物理 CPU(s) 主要共享 L3_CACHE(s)).

所有这些都误导了任何以硬件为中心的资源优化器的决策(如果虚拟化错过了主机的物理属性,性能永远不会提高)。


( 也可以使用 Live platform at https://tio.run for tweaking and prototyping )


我们在虚拟机上取得了成功!我们用于整个 class 的 VM 有:

  • 16 个 CPU
  • 一个 60 GB 的硬盘
  • 4 GB 内存
  • 3 台 ESXI 主机

系统也有 umlimited IOPs。 (Input/Outputs 每秒。)

我向其他老师推荐这个解决方案。