2017-04-20 2 views
1

Je suis en train de déterminer la meilleure façon d'effectuer une tâche particulière dans MatLab donc je créé deux pour les boucles et mis tic et toc avant et après chacun d'entre eux:Tester la vitesse des algorithmes dans MatLab en chronométrant l'exécution des boucles - pas fiable car la boucle for positionnée en premier est toujours plus rapide?

mMax = 5000; 

tic 
% Approach 1 
for m=1:mMax 
    result_1 = ...; 
end 
toc 


tic 
% Approach 2 
for m=1:mMax 
    result_2 = ...; 
end 
toc 

Après avoir exécuté le code plusieurs fois, d'abord il semblait que l'approche 1 donnait de meilleurs résultats et était environ trois fois plus rapide que l'approche 2.

Cependant, j'ai ensuite déplacé la boucle d'approche 1 après la boucle Appraoch 2. Cette fois, il a semblé que l'approche 2 est deux fois plus rapide que l'approche 1.

Donc, je suppose que les ressources consommées pendant la première boucle for impactent les ressources disponibles pour la deuxième boucle?

Comment puis-je tester de manière fiable les performances de ces approches pour voir lequel est le plus rapide. Est-ce suffisant de simplement créer une pause entre eux? Existe-t-il un moyen de «vider» MatLab pour que les approches aient toutes deux un «terrain de jeu égal»?

+1

Avez-vous essayé "Profiling"? – Ozcan

Répondre

1

Sans voir votre code complet, je vous suggère ce qui suit: créer une fonction pour chaque approche

Quelque chose comme:

myTest.m

function myTest() 
    mMax = 5000; 
    tic; 
    myApproachA_test(mMax); 
    toc; 

    tic; 
    myApproachB_test(mMax); 
    toc; 
end 

myApproachA_test.m et myApproachB_test .m aime:

function myApproachA_test(nTrials) 
    for m=1:nTrials 
     result_1 = ...; 
    end 
end