【问题标题】:Creating a pool of tasks/jobs with a limited amount of workers (ThreadPool) by using parallel toolbox使用并行工具箱创建具有有限数量工作人员 (ThreadPool) 的任务/作业池
【发布时间】:2012-01-28 02:00:40
【问题描述】:

我想使用并行计算工具箱来加速一组互不依赖的函数调用。为了提高效率,我想使用计时器函数/回调函数在我的一个函数完成执行后继续执行更多函数。我不提前知道哪些会更快,所以我不能将我的一组函数分成几个池并设置它们并行运行。

换句话说,我想要一些并行执行来继续从函数池中提取。

我现在进行此设置的唯一方法是我有一个使用str2fun 的字符串元胞数组,有更好的方法吗?

欢迎提问。

【问题讨论】:

    标签: parallel-processing matlab


    【解决方案1】:

    没有必要自己编写这样的代码。 Matlab 并行工具箱能够创建scheduler with multiple jobs。 你可以多次调用createJob,调度器会进行拉取。

     foos = [@foo1,@foo2,@foo3,@foo4]
     for i=1:numel(foos)
         obj = createJob();
         createTask(obj, foos(i), 1, {'your input'});
         submit(obj);
     end
    

    【讨论】:

    • 函数句柄的元胞数组比普通数组工作得更好——以避免在索引到数组和评估函数句柄之间产生混淆。事实上,在 R2011b 中,您无法连接函数句柄。
    • 谢谢,@Edric。调用eval而不是应用函数句柄不是有开销吗?
    • 你不需要打电话给eval - 但你可能需要feval(也许这就是你的意思)。我不确定,但我怀疑直接评估函数句柄和调用 feval 之间有很大区别(如果有的话)。
    【解决方案2】:

    为什么不做一些更简单的事情:

    matlabpool 3
    
    parfor t=1:3
      if t==1
        a1=f1();
      end
      if t==2
        a2=f2();
      end
      if t==3
        a3=f3();
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2012-08-11
      • 2014-08-26
      • 1970-01-01
      • 2012-06-30
      • 2019-01-02
      • 1970-01-01
      • 2011-01-13
      • 2020-02-13
      • 1970-01-01
      相关资源
      最近更新 更多