如何从池中挑选最快的计算机来执行计算任务

丹达(A. Donda)

我在Matlab中编写了一个计算任务,该任务包括处理大量数据,这些数据在启动时会读入内存。运行时间在几小时到几天之间。该任务是单线程的。

为了运行此任务,我可以使用许多不同的Linux机器。由于任务已经在运行,因此计算机在不同的系统负载下将继续运行,在可预见的将来。所有机器都具有amd64架构,但是它们在物理核心数,虚拟核心数以及CPU模型(包括时钟速度和其他因素)方面有所不同。

我的问题:是否有一种原则性的方法选择一台机器来执行任务,以期尽快完成任务?


以下部分根据Doktoro Reichard的答案进行了更新。

我大致的想法是如何大致了解哪台机器将是最快的,是结合以下两个方面:

(1)估计如果计算机在我的任务中运行,那么它的一部分处理资源将分配给我的任务,我称之为“相对速度”:如果计算机空闲,则按照定义,我的任务将以相对速度1执行。如果当前负载为L,内核数为C,则在我提交任务后,负载将为L + 1,相对执行速度将为R = min(C /(L + 1),1)。min运算符,因为该进程不能利用多个内核。–相对于机器在当前负载下的最佳状态,该计算是否正确地指示了可达到的处理速度?并且,相关的数字C是物理内核的数量还是虚拟内核的数量,由于超线程,虚拟内核的数量是虚拟内核的两倍吗?

(2)根据机器性能指标,估计如果所有机器都处于空闲状态,则在多台机器上相对较快地执行任务的速度。这不应该是时钟速度,但适当选择的基准。

然后根据哪个机器具有最大的乘积(1)和(2)来选择机器。

雷查德博士

主要由于计算机的工作方式,这将不会有一个明确的答案,但是我将尝试给出一些指导,以确定如何找出最快的方法。

我将分析您的陈述,以告诉您哪些可以解决,哪些不能解决。

1.资料

在第一段中,您声明已加载所有数据并从内存中读取所有数据。这对速度很有好处,因为就带宽而言,内存是首屈一指的。如果您的程序使用磁盘(无论是HDD,SSD还是笔驱动器),则可能会成为程序运行速度的瓶颈。

这是由于传输速度。RAM几乎可以直接访问处理器。磁盘必须通过带宽远低于RAM的连接,而对于HDD,则需要考虑一些时间来获取和存储数据。

2.作业系统

所使用的操作系统确实对速度产生了一些影响,但可以认为是残留的。

3.处理器架构(或指令集)

这是一个相关方面。尽管您说的机器使用的是amd64处理器,但是所使用的指令集可能会有一些差异。

例如考虑OpteronSempron系列处理器。它们之间的主要区别在于后者具有SSE3支持。

SSE3允许使用更新,更有效的方式处理数据(特别是数组操作),而在较早的指令集中,这些操作将使用效率较低的流程来完成。

因此,在这方面,较新的处理器在设计上更快,因为它们支持更有效的指令集。

4.系统负载

正如您可能会说的,这是棺材中的最后一个钉子。除非您知道每个程序的工作方式,否则无法以线性方式计算计算机的负载。话虽这么说,您可能正在运行10.000个进程,但是却有剩余负载或单个多线程进程浪费了所有处理器时间。

但是...让我们进一步分析。添加进程意味着向底层系统添加某种类型的数据,以使其了解该进程的存在以及应该为其准备多少处理器时间。在这方面,较少的进程可以提高速度,因为内核/处理器可以更好地决定可用的时间。

要考虑的另一件事是内核赋予进程的优先级。具有最高优先级的进程将占用处理器的大部分时间。

您最终可以构想一个系统,该系统可以给予您的进程最大的优先级,并使所有其他进程永远等待,直到您的进程停止。这样,您的处理速度将由CPU决定。

5. CPU

让我们考虑一下要点:内核和CPU时钟速度。

可以想象内核可以将某些进程转移到其他内核。在极限情况下,您的进程可以指定一个完整的核心。在这方面,更多的内核可以使更多的进程同时运行(因此,运行速度更快)。

我对多线程了解不多,所以我会将其留给了解的人。

时钟速度并不是处理器效率的明确指标。基于此,我向您介绍在Apple硬件中使用Intel和PowerPC处理器之间的“战斗”。苹果公司辩称,尽管Intel处理器的处理器速度提高了,但仍首选PowerPC处理器而不是Intel的主要原因是PowerPC的性能更好,因为它们每秒可以处理与其竞争对手相比更多的操作。最后,由于功率问题和其他经济因素,苹果选择了英特尔。

FLOPS(用于每秒浮点运算)是计算机性能的一种度量,特别是在科学计算领域中,这种计算大量使用浮点计算,类似于每秒更旧,更简单的指令。如果您的工作严重依赖于此类操作(对于使用Matlab而言可能),则这可能比时钟速度更好。

但是,这不是一个非常令人费解的数量(因为它取决于您执行的是哪种操作)。我在Overclock.net上找到了一些基准我指出了这两个:

  • AMD Phenom Ix4 9850 @ 2.83GHz RAM 754MHz 5-5-5-15 GFLOPS:27.5
  • AMD Phenom IIx2 555 @ 4.12GHz内存1000MHz 5-5-5-18 GFLOPS:26

如您所见,即使速度为两倍的处理器也可能比速度为一半的处理器性能更差。

底线

由于程序处理中涉及的因素不计其数,因此没有一个明确的公式可用来估计运行时间。我总结了一些经验法则(我已尝试按重要性对它们进行排序):

  • 将所有(或最常用的)数据存储在RAM中更快。(数据存储是任何过程中的主要瓶颈)。
  • 同一台计算机上运行的进程越少越好。
  • 内核越多越好。
  • 较新的处理器在设计上会更快。
  • CPU速度是速度的粗略指标(因为需要干预RAM延迟和其他因素)
  • 您可以要求机器给予您的过程最高的优先级。机器将尝试为您的过程分配更多时间。(当我说要尝试时,我的意思是机器没有义务给您的过程更多的时间,它会尝试平衡所有内容,这就是第二项存在的原因)。

我仍然不太愿意给出一个全面的公式,但是我相信我可以根据您的评论输出给您一个非常非常近似的公式我不会谈论多线程,因此我将所有内核视为独立的。对于此演示,假定以下内容:

  • 所有进程具有相同的负载。
  • 进程不等待输入/输出。
  • 假定内存速度不是一个因素。
  • 所有进程都是单线程的。它们具有相同的优先级。

这样,瓶颈将是CPU的容量。因此,对于任何CPU,任何进程的相对负载如下:

R = min(C / N ; 1)

R为相对负载,C为CPU中的内核数量,N为活动进程的数量。但是,这假设系统可以均匀且完美地将所有负载分配到整个内核,这可能并不总是正确的。

在CPU的相对负载下,将其乘以您选择的度量单位(UM)(例如GHz或GFLOPS),然后即可得出该过程可能有多“快”的度量。

Speed = R * UM

因此,使用此公式,您的公式是正确的。但请注意注意我必须做出的假设数量。这与实际情况相去甚远。这不会给您确切的数量,而是有根据的猜测

您的第二点与第一点相同(实际上,您在回答问题时回答了这一点)。简而言之,它机器的性能指标(如R = 1),因此这里的问题是如何选择一个。这是您应该自己分析的东西:您可以使用GHz乘以内核数或GFLOPS或两者的某种组合。

有些程序(在写第一个答案时,我应该早已记得)可以在CPU上进行一些基准测试,从中可以得到一些可能有助于您做出决定的值。我有SiSoftware Sandra(在我的较旧版本中具有Processor Arithmetic基准测试),但我想还有其他一些

在这种情况下,除非您使用不同的度量单位,否则将1)和2)相乘不会有任何区别。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算机如何执行计算?

来自分类Dev

在MapReduce中,如何在多个计算机上执行相同的reduce任务?

来自分类Dev

如何从本地计算机执行存储在远程计算机上的Shell脚本?

来自分类Dev

Celery-如何从远程计算机发送任务?

来自分类Dev

关闭后,如何设置任务以唤醒计算机?

来自分类Dev

如何在Azure devops管道池中要求多个代理计算机?

来自分类Dev

如何在远程计算机上执行AutoIt脚本

来自分类Dev

如何从远程计算机复制,执行和检索数据?

来自分类Dev

如何通过Windows上的脚本文件使计算机执行一系列重复的任务?

来自分类Dev

计算机如何启动?

来自分类Dev

在远程计算机上执行readlink

来自分类Dev

计算机执行启动循环

来自分类Dev

特定于计算机的javascript执行

来自分类Dev

您可以让计算机在不损坏计算机的情况下执行重复性任务的最长时间是什么?

来自分类Dev

从Windows计算机到Linux计算机执行命令ls

来自分类Dev

无法对一台计算机上的.local计算机执行ping操作

来自分类Dev

如何在与提交计算机不同的计算机上获得Dask计算的结果?

来自分类Dev

Javascript使用未声明函数作为对象的能力如何帮助在计算机之间划分任务?

来自分类Dev

如何仅允许特定计算机在Luigi中运行任务

来自分类Dev

每当我输入密码/解锁计算机时,如何使窗口任务运行?

来自分类Dev

如何获得远程Windows 7计算机上正在运行的任务的列表?

来自分类Dev

无法访问任务栏时如何查看Windows计算机的设置

来自分类Dev

计算机如何评估大量数字?

来自分类Dev

如何知道计算机的RAM总量?

来自分类Dev

如何检查计算机掉电?

来自分类Dev

如何允许访问某些计算机?

来自分类Dev

如何使每台计算机自动启动?

来自分类Dev

如何打印计算机唤醒源?

来自分类Dev

如何使redshift从计算机开始?

Related 相关文章

  1. 1

    计算机如何执行计算?

  2. 2

    在MapReduce中,如何在多个计算机上执行相同的reduce任务?

  3. 3

    如何从本地计算机执行存储在远程计算机上的Shell脚本?

  4. 4

    Celery-如何从远程计算机发送任务?

  5. 5

    关闭后,如何设置任务以唤醒计算机?

  6. 6

    如何在Azure devops管道池中要求多个代理计算机?

  7. 7

    如何在远程计算机上执行AutoIt脚本

  8. 8

    如何从远程计算机复制,执行和检索数据?

  9. 9

    如何通过Windows上的脚本文件使计算机执行一系列重复的任务?

  10. 10

    计算机如何启动?

  11. 11

    在远程计算机上执行readlink

  12. 12

    计算机执行启动循环

  13. 13

    特定于计算机的javascript执行

  14. 14

    您可以让计算机在不损坏计算机的情况下执行重复性任务的最长时间是什么?

  15. 15

    从Windows计算机到Linux计算机执行命令ls

  16. 16

    无法对一台计算机上的.local计算机执行ping操作

  17. 17

    如何在与提交计算机不同的计算机上获得Dask计算的结果?

  18. 18

    Javascript使用未声明函数作为对象的能力如何帮助在计算机之间划分任务?

  19. 19

    如何仅允许特定计算机在Luigi中运行任务

  20. 20

    每当我输入密码/解锁计算机时,如何使窗口任务运行?

  21. 21

    如何获得远程Windows 7计算机上正在运行的任务的列表?

  22. 22

    无法访问任务栏时如何查看Windows计算机的设置

  23. 23

    计算机如何评估大量数字?

  24. 24

    如何知道计算机的RAM总量?

  25. 25

    如何检查计算机掉电?

  26. 26

    如何允许访问某些计算机?

  27. 27

    如何使每台计算机自动启动?

  28. 28

    如何打印计算机唤醒源?

  29. 29

    如何使redshift从计算机开始?

热门标签

归档