在虚拟化设置中执行数值计算?

时间:2012-06-13 10:00:18

标签: performance virtualization numerical-methods scientific-computing hpc

我想知道在虚拟化设置中数值计算会带来什么样的性能?更具体地说,在相当快的x86_64多核机器上,在虚拟化Windows操作系统中运行CPU绑定C ++代码而不是本机Linux代码,我可以期待什么样的性能损失?

我很乐意根据需要添加精度,但由于我对虚拟化知之甚少,我不知道哪些信息是相关的。

2 个答案:

答案 0 :(得分:4)

进程只是一串线程,它们是以顺序方式执行的指令流。在现代虚拟化解决方案中,就CPU而言,主机和客户机进程一起执行,区别仅在于后者的I / O被捕获和虚拟化。内存也是虚拟化的,但在硬件MMU中或多或少会发生。访客指令由CPU直接执行,否则它不是虚拟化而是仿真,只要它们不访问任何虚拟化资源,它们就会像主机指令一样快地执行。最后,这一切都取决于CPU能够应对增加的运行进程数量。

Solaris中有轻量级虚拟化解决方案,如区域划分进程空间,以便提供操作系统的多个副本,但这一切都发生在单个操作系统内核的保护下。

纯计算代码的性能损失非常小,通常低于1-2%。问题在于,实际上所有程序读写数据和计算代码通常都会读写大量数据。即使使用Intel VT- *或AMD-V等解决方案,虚拟化I / O通常也比直接I / O慢得多。

确切的数字在很大程度上取决于具体的硬件。

答案 1 :(得分:1)

@Mitch小麦的无可争议的断言,我原来的帖子不是一个答案,这是一个尝试重新将其作为答案:

我主要从事能源领域的HPC工作。我的科学家同事运行的一些计算花费了O(10 ^ 5)CPU小时,我们在不久的将来认真考虑O(10 ^ 6)CPU小时工作。

我很高兴从代码中挤出最后一滴性能,我认为如果我能在一些程序的运行时间内减少1%的话,这是一个美好的一天。有时我花了一个月的时间来改善这种性能,确定我可能会很慢,但对于我们的科学家来说,它仍然具有成本效益。

因此,当明亮的销售人员提供最新最好的数据中心软件(其中虚拟化是一个方面)时,我会感到不寒而栗,只有在我看来,它才能将我的代码束缚在一堆250,00dwt的锚链上油轮(这是一个比喻)。

我仔细阅读了这个问题并理解OP并不是说虚拟化会有所帮助,我提供了一个从业者的观点。如果这仍然是一个评论太多,做SO的事情并投票结束,我保证我不会被冒犯!