Salut à tous,

J'ai posté récement sur le forum pour avoir un ptit coup de main sur l'optimisation de mon prog de fitting.
Depuis il marche très bien, un peu plus vite mais je voulais gagner du temps en multithreadant. Ma version étudiant ne me permet pas d'avoir accès à ces fonctions, mais l'ordi de mon patron a une version de matlab intégrale sur quadcore.
Du coup j'ai essayé de lancer le prog en remplacant une de mes boucles FOR par PARFOR mais il me retourne en permence une erreur de prog que je n'arrive pas à résoudre.

Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Algorithme d'extraction compartimentale par fitting %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
clear all;close all;clc;% Vide toute la mÈmoire pour plus de claretÈ
tic;% Initialise le timer
slice = 4; % Coupe anatomique ‡ analyser
%% Place les images en mÈmoire dans une matrice image
diffIm = zeros(128,128,48) ;
for i =1:48
    n = i*8 - slice;
    diffIm(:,:,i) = dicomread(sprintf('Diff%03d',n));
end
 
% PrÈpare les 6 images paramÈtriques
res_image=zeros(128,128,6);
 
% DÈclare les valeurs de b
XVAL = 0 : 100: 4700  ;
XVAL = XVAL(:);
 
% Compteur d'itÈrations
h = waitbar(0,'Calcul du fitting en cours...');
steps = 8910;
step = 1;
matlabpool close force local
matlabpool(4)
% Pour Chaque pixel
parfor x= 10:119
    for y= 24:104
        %CrÈe un tableau contenant les diffÈrentes valeur du signal en (x,y)
        YVAL = double(diffIm(x,y,:));
 
        % Fit les donnÈes contenues dans le tableau experimentalValue
        paramValue = createFit(XVAL,YVAL);
 
        % InsËre les valeurs des paramËtres retournÈs dans une matrice
        for k=1:6
            res_image(x,y,k) = paramValue(k);
        end
 
        % Affiche le % d'itÈrations de la double boucle dÈja effectuÈ
        step = step+1;
        waitbar(step / steps)
    end
end
 
close(h)
toc
Voici le message d'erreur :

Sending a stop signal to all the labs ... stopped.
Destroying 1 pre-existing parallel job(s) created by matlabpool.

Starting matlabpool using the 'local' configuration ... connected to 4 labs.
??? Error: The variable res_image in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".

Error in ==> Compex at 29
parfor x= 10:119
Si l'un de vous à une idée je suis preneur

A bientôt