Je travaille actuellement sur un projet impliquant l'enregistrement/chargement de gros fichiers MAT (environ 150 Mo), et je me suis rendu compte qu'il était beaucoup plus lent d'accéder à une matrice de cellules chargées que l'équivalent version créée à l'intérieur d'un script ou d'une fonction.MATLAB: accès fichier MAT chargé très lent
J'ai créé cet exemple pour simuler mon code et montrer la différence:
clear; clc;
disp('Test for computing with loading');
if exist('data.mat', 'file')
delete('data.mat');
end
n_tests = 10000;
data = {};
for i=1:n_tests
data{end+1} = rand(1, 4096);
end
% disp('Saving data');
% save('data.mat', 'data');
% clear('data');
%
% disp('Loading data');
% load('data.mat', '-mat');
for i=1:n_tests
tic;
for j=1:n_tests
d = sum((data{i} - data{j}) .^ 2);
end
time = toc;
disp(['#' num2str(i) ' computed in ' num2str(time) ' s']);
end
Dans ce code, aucun fichier MAT est enregistré ni chargé. La durée moyenne d'une itération sur i est de 0,75s. Lorsque je décommente les lignes pour enregistrer/charger le fichier, le calcul pour une itération sur i prend environ 6,2 s (le temps d'enregistrement/chargement n'est pas pris en compte). La différence est 8 fois plus lente! J'utilise MATLAB 7.12.0 (R2011a) 64 bits avec Windows 7 64 bits, et les fichiers MAT sont enregistrés avec la version v7.3.
Peut-il être lié à la compression du fichier MAT? Ou des variables de mise en cache? Y at-il un moyen de prévenir/éviter cela?
Y at-il une raison importante pour laquelle vous utilisez des cellules et non une matrice? – cyborg
En fait, la différence avec ou sans matrices d'enregistrement/chargement est plus petite que pour les matrices de cellules, mais le problème est toujours là: pour 10000 tests, le calcul est 4.3s vs 1.5s pour matrices (10000 lignes) et 6.1s vs 0.4s pour les baies de cellules (10000 éléments) –