私は、労働者間のコミュニケーションを必要としない恥ずかしいほど並行した仕事をしています。dfeval関数を使おうとしているのですが、オーバーヘッドが凄そうです。まず、ドキュメントから例を実行しようとしています。
>> matlabpool open
Starting matlabpool using the 'local' configuration ... connected to 8 labs.
>> sched = findResource('scheduler','type','local')
sched =
Local Scheduler Information
===========================
Type : local
ClusterOsType : pc
ClusterSize : 8
DataLocation : C:\Users\~\AppData\Roaming\MathWorks\MATLAB\local_scheduler_data\R2010a
HasSharedFilesystem : true
- Assigned Jobs
Number Pending : 0
Number Queued : 0
Number Running : 1
Number Finished : 8
- Local Specific Properties
ClusterMatlabRoot : C:\Program Files\MATLAB\R2010a
>> matlabpool close force local
Sending a stop signal to all the labs ... stopped.
Did not find any pre-existing parallel jobs created by matlabpool.
>> sched = findResource('scheduler','type','local')
sched =
Local Scheduler Information
===========================
Type : local
ClusterOsType : pc
ClusterSize : 8
DataLocation : C:\Users\~\AppData\Roaming\MathWorks\MATLAB\local_scheduler_data\R2010a
HasSharedFilesystem : true
- Assigned Jobs
Number Pending : 0
Number Queued : 0
Number Running : 0
Number Finished : 8
- Local Specific Properties
ClusterMatlabRoot : C:\Program Files\MATLAB\R2010a
>> tic;y = dfeval(@rand,{1 2 3},'Configuration', 'local');toc
Elapsed time is 4.442944 seconds.
後続の時間を実行すると、同様のタイミングが生成されます。だから私の質問は:
- 新しいインスタンスで matlabpool open を実行したのに、実行中の数値をゼロにするために matlabpool close force local を実行する必要があるのはなぜですか?
- このような些細な例に 5 秒のオーバーヘッドが本当に必要なのでしょうか? 特に、Matlab ワーカーが既に起動されていることを考えると?