J'ai posé aujourd'hui une question sur le calcul parallèle avec Matlab-Simulink. Comme ma question précédente est un peu en désordre et qu'il y a beaucoup de choses dans le code qui ne sont pas vraiment liées au problème.
Mon problème est le suivant
Je veux simuler quelque chose dans une boucle parfor, tandis que ma simulation Simulink utilise le bloc "From Workspace" pour intégrer les données nécessaires de l'espace de travail dans la simulation. Pour une raison quelconque, cela ne fonctionne pas.
Mon code ressemble à ceci :
load DemoData
chemin = pwd;
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
parfor k = 1 : 2
load_system(strcat(chemin,'\\DemoMDL'))
set_param('DemoMDL/Mask', 'DataInput', 'DemoData')
SimOut(k) = sim('DemoMDL')
end
delete(apool);
Ma simulation ressemble à ceci
Le fichier DemoData est juste une matrice de zeros(100,20). C'est un exemple de données.
Maintenant, si je simule le script, le message d'erreur suivant apparaît :
Erreurs
Erreur en utilisant DemoScript (ligne 9)
Erreur lors de l'évaluation du paramètre 'DataInput' dans 'DemoMDL/Mask'
Provqué par :
Erreur en utilisant parallel_function>make_general_channel/channel_general (ligne 907) Erreur lors de l'évaluation du paramètre 'DataInput' dans 'DemoMDL/Mask' Erreur en utilisant parallel_function>make_general_channel/channel_general (ligne 907) Fonction ou variable 'DemoData' non définie.
Avez-vous une idée de pourquoi cela se produit ?
La chose étrange, c'est que si j'essaie d'accéder à 'DemoData' à l'intérieur de la boucle parfor, cela fonctionne. Par exemple, avec ce code :
load DemoData
chemin = pwd;
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
parfor k = 1 : 2
load_system(strcat(chemin,'\\DemoMDL'))
set_param('DemoMDL/Mask', 'DataInput', 'DemoData')
fprintf(num2str(DemoData))
end
delete(apool);
Voici ma sortie sans simuler et afficher les données
'>>'DemoScript 00000000000000000 .....
Merci beaucoup. C'est la question originale avec beaucoup plus de détails (inutiles) :