gpt4 book ai didi

multithreading - Matlab 'svd'在N个线程上

转载 作者:行者123 更新时间:2023-12-03 13:04:35 25 4
gpt4 key购买 nike

我知道Matlabsvd函数(以及许多其他函数)在默认情况下是多线程的。在台式机上工作时,这很棒,但对于许多用户同时提交作业且必须提前请求资源的群集而言,这是不希望的。如果用户尝试运行具有1个内核的matlab脚本但调用svd,则该作业将在我们的计算机上使用时最多使用20个内核。

我想将此类函数限制为预定义的,用户初始化的线程数。我知道您可以通过以matlab开始它来限制singleCompThread到一个线程,然后用N个线程调用一个parpool,但是我无法让svd使用这些 worker 。

在具有M核心的主机上,是否有办法将“预多线程”功能限制为N核心所在的1 < N < M核心?

更新:

关于这个问题的目的,我会更深入一些。我们拥有一个大型集群,其中包含GPU节点,Hadoop系统,250多个主机,总共5000+内核和40+ TB的RAM,并且如果有可用的开放内核,则没有理由为什么用户应该共享cpu内核。因此,当用户提交作业时,他们告诉我们的排队系统他们要使用多少个内核。如果userA提交多核作业,并且userB提交多核作业,但都没有告诉我们的排队系统它们需要多少个核,则有可能将它们放置在同一主机上。可能还有其他(空闲)主机,但是这两台主机共享同一台主机,并且损害了它们的性能

为此,我希望我们的用户知道他们要使用多少个内核,并提前请求该数量的内核。他们可以轻松地说出他们想要一台机器上的所有20个内核,而不必担心matlab将使用所有可能的线程这一事实,但是他们需要等待一台开放的机器,因为他们想要每个内核。更好的解决方案是教用户如何在预定义数量的内核中并行运行他们的代码,然后告诉我们的排队系统他们需要多少个内核。

另一个问题是,我们的许多用户都使用“引导”解决方案,因此在需要高吞吐量工作的地方解决了他们的问题。每个作业都是单线程的,但是他们希望一次运行数千个。在这种情况下,并行运行代码实际上会伤害他们(请相信我)。

因此问题仍然存在:如何使用预先指定的线程数运行svd或类似的多线程函数,以确保我们可以为所有用户优化集群上的资源?

最佳答案

您有两种选择:

  • 使用处理器关联化来限制线程化的影响
  • 调用 maxNumCompThreads

  • 请注意,当前不建议使用 maxNumCompThreads,这很遗憾-但这是最佳选择。

    关于multithreading - Matlab 'svd'在N个线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566171/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com