Why doesn't parfeval(@splitapply) improve splitapply's performance?

5 visualizaciones (últimos 30 días)
Simon
Simon el 31 de Ag. de 2023
Comentada: Simon el 6 de Sept. de 2023
I want to readtable many html-files to extract tables. I wrote a function extract_sheet to do just that. I had used parfor to perform this task, and it runs decently fast. Then it occurs to me that those html-files can be grouped according to their foder and filename segments. So, I try splitapply(extract_sheet, input variables, groupNumber), and it works. Then I want to see if parfeval would improve the speed. I do something like parfeval(@splitapply, extract_sheet, input variables, groupNumber.)
For a small testing file list, both methods spend almost the same amount of elapsed time, around 27.5 +/- .1 seconds. My question is why parfeval doesn't improve the performance?

Respuesta aceptada

Matt J
Matt J el 31 de Ag. de 2023
Editada: Matt J el 31 de Ag. de 2023
It probably means that Matlab's internal parallellization already does what parfeval does.
  6 comentarios
Simon
Simon el 1 de Sept. de 2023
@Sam Marshalik, the splitapply doc page does say it is one of the functions that support multi-thread and suggest the users to read parfeavl doc. That's all I found in the doc. The doc is too stingy with providing parallelism instruction materials for Matlab-users (not software developers).
Sam Marshalik
Sam Marshalik el 5 de Sept. de 2023
Editada: Sam Marshalik el 5 de Sept. de 2023
@Matt J: You bring up a good point that the doc page is lacking information on this topic. I put in an enhancement request to improve that. In the meantime, I would suggest to call our Technical Support - they can investigate this further and reach out to the relevant Dev team.

Iniciar sesión para comentar.

Más respuestas (1)

Matt J
Matt J el 5 de Sept. de 2023
Editada: Matt J el 5 de Sept. de 2023
If you're going to be using PCT functions anyway, I wonder if a parfor loop might do better than splitapply. I.e., instead of,
splitapply(func,X,G)
one might instead do,
I=splitapply(@(x){x}, 1:numel(G), G);
parfor j=1:numel(I)
results{j}=func( X(I{j}) );
end
  1 comentario
Simon
Simon el 6 de Sept. de 2023
That's a really nice solution. I'll try it. My experience with parfor tells me it's gonna be fast.

Iniciar sesión para comentar.

Categorías

Más información sobre Performance and Memory en Help Center y File Exchange.

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by