Incorrect results from parfor
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
hi, thanks in advance for your help. i am constructing a function which contains a parfor loop, which i am unfamiliar with. Although it runs, the results are incorrect; if i replace the 'parfor' with 'for' (nothing else changed), then the results are correct, with much longer running time. fun_wn and fun_idf_HS are two user-defined functions. The new function just prints out their values when i and j satisfies certain condition. (symptom: x and y_sp{j} are printed out correctly, but feval(fun_1,x,y_sp{j}) and feval(fun_2,y_sp{j}) are not.) thanks a looot!
function output = fun_wn_HS4(x)
global d_HS4_o prescore_HS4 vocabulary_HS4
fun_1 = @fun_wn;
fun_2 = @fun_idf_HS;
output = zeros(size(d_HS4_o,1),1);
parfor i=1:size(d_HS4_o,1)
y_sp = strtrim(strsplit(d_HS4_o{i},' '));
for j=1:length(y_sp)
if i==506 && j==13
x
y_sp{j}
feval(fun_1,x,y_sp{j})
feval(fun_2,y_sp{j})
end
end
end
end
0 commentaires
Réponses (1)
Walter Roberson
le 7 Jan 2014
Unless the user is passing function names to you, use
fun_1(x,y_sp{j});
fun_2{y_sp{j});
instead of using feval()
5 commentaires
Edric Ellis
le 7 Jan 2014
GLOBAL data is not automatically transferred from the MATLAB client to the workers running the body of the PARFOR loop. So, you either need to do this manually, or ideally you'd re-work the functions to rely on explicit input arguments.
Voir également
Catégories
En savoir plus sur Parallel for-Loops (parfor) dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!