Functions working with parfor but not parfeval

1 visualizzazione (ultimi 30 giorni)
V.D-C
V.D-C il 1 Mag 2020
Commentato: V.D-C il 4 Mag 2020
Hello,
I am currently working on a code where I want to accelerate a bit the process with some parallel computing.
I have 2 independant functions which give me outputs in two different folder. They run by writing :
parfor i = 1:2
if i == 1
glacier_point_output(temp_folder,formatOut,result_path, run_number, forcing_divided_path_glacier, parameters_file_glacier, constants_file_glacier, date, main_folder,yr,mm,dd);
else
land_point_output(temp_folder,formatOut,result_path, run_number, forcing_divided_path_land, parameters_file_land, constants_file_land, date, main_folder, yr,mm,dd);
end
end
I have those two lists generated in the functions that I save in a temporary folder, load later in the script and display them.
Now, a Staff member from Mathworks told me I could use parfeval since the two functions are totally independant, and that it would be more resilient if I want to get the two generated lists as an output. I write the following lines:
% Invoke both function evaluations in parallel.
fut_land = parfeval(@land_point_output, 1, temp_folder,formatOut,result_path, run_number, forcing_divided_path_land, parameters_file_land, constants_file_land, date, main_folder, yr,mm,dd);
fut_glacier = parfeval(@glacier_point_output, 1, temp_folder,formatOut,result_path, run_number, forcing_divided_path_glacier, parameters_file_glacier, constants_file_glacier, date, main_folder, yr,mm,dd);
% Collect results - this blocks until the evaluation is complete.
[buggy_points_land] = fetchOutputs(fut_land);
[buggy_points_glacier] = fetchOutputs(fut_glacier);
The issue is that these lines above don't work. The functions are exactly the same in the two cases, but I get an error message saying the functions were not able to write the files into the folder.
Is this code just not adapted ? Because the functions in both cases are exactly the same, and the parfor loop works really well.
Thank you !
  2 Commenti
Edric Ellis
Edric Ellis il 4 Mag 2020
Those two pieces of code ought to be doing the same thing. Although perhaps if temp_folder is a function rather than a variable, that would make a difference (in the parfor case, it would be evaluated on the worker; in the parfeval case, it would be evaluated on the client at the point you execute the parfeval call).
V.D-C
V.D-C il 4 Mag 2020
It is a variable, in fact it is just a path towards a the temporary folder, which I delete at the end of my script.
I tried again on a different server and the parfor option works way faster than the parfeval (when it works).
To this point my script is working, but I really want to identify why the parfeval doesn't work, it can be useful for later.

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Parallel for-Loops (parfor) in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by