Mex file still too slow
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Alice Malvaldi
el 11 de Feb. de 2015
Comentada: Seyedmohammadhadi Sadati
el 2 de Sept. de 2021
I have created a mex file for my matlab functions as follow:
% Create a MEX configuration object
cfg = coder.config('mex');
% Turn on dynamic memory allocation
cfg.DynamicMemoryAllocation = 'AllVariableSizeArrays';
% Generate MEX function
codegen -config cfg MYfunction -args {Data,Mask}
tic
result = MYfunction_mex(Data,Mask);
toc
But it is still too slow for what I want to do:
telapsed = 2262.62 sec % normal Matlab function
telapsed = 670.64 sec % mex function
It is an improvement but I was expecting much higher speed up as this is running not the complete for loop I would need. The 3rd for loop is running from 1:50 instead 8760, so it would take more than 1 day to run the entire code! I know that there are certainly many ways to speed it up but I can't see them.
As "MYfunction" is about my research I cannot share the code but the basic things are:
for l = 1:4
for n = 1:24
for i = 1:50 % i shoudl go till 8760
INDEXvector = DataSelectionINDEX(inputs); % function that create an array of indices to select specific data of MyData.mat file
X = MyData(INDEXvector(:),:);
% Covariance matrix
[R,P] = CalcCOVARIANCEmatrix(X); % function that calculates the covariance matrix
% do other minor calculations %
Result = "from previous calculations";
end;
end;
end;
I know that the function that is more time consuming is the one in which the cross-correlations of my data are computed. But I don't understand why it is still so slow and how can I further speed it up. Thank you!
4 comentarios
dpb
el 12 de Feb. de 2015
"...I cannot share much more about my code and I thing that the key things are there."
Well, I guess that's research... :) Good luck.
Ryan Livingston
el 23 de Feb. de 2015
It is hard to tell from the example code snippet but if your code lends itself to parallelism, you could consider using PARFOR if the loop iterations are independent.
Respuestas (1)
Rick Rosson
el 11 de Feb. de 2015
Please try:
cfg.DynamicMemoryAllocation = 'off';
Also:
cfg.IntegrityChecks = false;
cfg.ResponsivenessChecks = false;
2 comentarios
Ver también
Categorías
Más información sobre MATLAB Coder en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!