并行池可以异步启动吗



当MATLAB并行池首次启动时,通常需要几秒钟的时间。因此,在用户交互应用程序中,有一种动机是确保在对计算任务的第一个需求到来之前有一个并行池在运行,因此启动并行池的过程不会添加到响应请求的总时间中。

然而,我看到的每一个将启动并行池的编程操作(如parpool(都会阻止执行,直到池启动完成。这意味着,即使用户在一段时间内不需要调用并行池,他们也不能做任何其他事情,比如开始设置计算成本高昂的请求——例如填充用户界面——直到并行池完成启动。

这太令人沮丧了!如果这是任何其他耗时的准备操作,那么一旦并行池到位,就可以在后台使用parfeval进行,并且在实际调用任何请求完成准备之前,不会阻碍用户的工作流程。但是,由于该任务实际上解决了缺乏运行的并行池的问题,因此用户似乎必须等待任务完成后很长一段时间才真正需要使用的东西。

有没有办法绕过这种明显的可用性限制?

目前没有办法在后台启动并行池。有几个潜在的缓解措施可能会有所帮助:

  1. 永远不要显式调用parpool-只需让池的自动创建仅在遇到并行语言构造(如parforparfevalspmd(时才开始创建池
  2. 如果您使用的集群可能在一段时间内无法为您的工作者请求提供服务,则可以使用batch在后台启动整个计算。(这可能只适用于具有相当长时间运行的计算的情况(

对于大多数需要在后台完成的计算工作,添加backgroundPool是一个更合适的解决方案。它并不能访问与实际启动并行工作者池相同的所有功能(据我所见,这仍然不能在后台完成(,但对于创建响应用户交互界面的既定用例来说,它是消除大多数界面延迟的理想选择。

相关内容

  • 没有找到相关文章

最新更新