2012-05-08 4 views
2

я мог бы неправильно что-то .. но я ожидал, что ход кода в редакторе и в окне командной строки, чтобы быть таким же ..Странная производительность MATLAB при использовании редактора против командного окна

У меня есть следующий код в редакторе

display(' '); 
display('script'); 
fac = @(n) prod(1:n); 

n=20; 
display(['- use of anonymous function: fac = @(n) prod(1:n); with n = ' num2str(n)]); 
tic; fac(n); toc; 

display(['- use of build in MatLab function: factorial(); with n = ' num2str(n)]); 
tic; factorial(n); toc; 

перед запуском (что называется компиляции или выполнения?) Я быстро ввести в одной и той же команды в окне командной строки. Что дает мне это:

strange performance time

Так внезапно факторного функции в редакторе получили новый импульс, когда речь идет о производительности .. Что только что произошло?

+0

Определенно интересный вопрос. См. Также разницу в производительности между 'tic; FAC (п); TOC; TIC; факториала (п); toc; 'и' tic; факториала (п); TOC; TIC; FAC (п); toc; 'в командной строке. Кажется, что порядок вызовов функций имеет значение ... –

ответ

2

Во-первых, расчет, который вы пытаетесь измерить, слишком быстр, чтобы получить что-то вроде точного чтения. Это ниже шума измерения, который вы получаете при использовании tic/toc из-за других процессов и активности в системе. Чтобы получить более точные меры, повторите расчет много раз ... (я бы повторил расчет, поэтому он занимает 10-20 секунд).

Во-вторых, действительно существует разница между введенным кодом в интерактивном режиме и в скрипте. Я думаю, что JIT работает только для запуска кода из сценария или функции m-file, где и не для работы в интерпретаторе (но я изо всех сил пытаюсь найти ссылку для этого сейчас - добавлю, если найду его).

1

Вы имеете в виду различия в времени выполнения между запуском в окне команд и запуском из сценария? Я думаю, что они вызваны все остальное также работает на вашем компьютере, собственное управление памятью MatLab и несколько других вещей ...

это объясняется более подробно здесь: http://www.mathworks.com/matlabcentral/newsreader/view_thread/296850

Другой метод измерения времени потраченный на CPU - это функция cputime. Однако он имеет меньшую точность. Так что расширьте свой тестовый пример тем, что требуется больше времени ( n = 2e7, например factorial ограничено 171), чтобы увидеть результаты с помощью cputime.

Вывод: одна ласточка не делает летний

Расширьте тестирование с большим количеством случаев.

n=200; 
tic; 
for ii=1:1e4 
    factorial(n); 
end; 
toc 
Смежные вопросы