J'ai un travail embarrassingly parallèle qui ne nécessite aucune communication entre les travailleurs. J'essaie d'utiliser la fonction dfeval, mais les frais généraux semblent énormes. Pour commencer, j'essaie de lancer l'exemple à partir de la documentation.Matlab dfeval frais généraux
>> 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.
L'exécution ultérieure entraîne des durées similaires. Donc mes questions sont:
- Pourquoi ai-je besoin d'exécuter matlabpool close force local pour faire passer le nombre à zéro, étant donné que je lance matlabpool open dans une nouvelle instance?
- Cinq secondes de surcharge sont-elles vraiment nécessaires pour un exemple si trivial? d'autant plus que les travailleurs de Matlab ont déjà démarré?
Merci. Je pensais que les travailleurs étaient déjà ouverts, mais vous avez raison, c'est le lancement des trois travailleurs. Existe-t-il un planificateur qui permet la réutilisation des travailleurs, pour éviter le démarrage et les frais généraux? Je n'ai pas beaucoup d'accélération de la part de parfor car les données de chaque itération sont grandes et l'indexation est irrégulière, c'est pourquoi j'essaie d'utiliser les constructions de niveau inférieur. – MatlabSorter
Oui, le gestionnaire de travaux propre à MathWorks peut réutiliser les travailleurs, tout comme l'intégration avec HPCServer en mode «SOA». Les deux nécessitent des licences MATLAB Distributed Computing Server supplémentaires. – Edric