Выполнение объективного сравнения производительности программы / скрипта - PullRequest
0 голосов
/ 29 октября 2010

Я хочу выполнить сравнение нескольких реализаций одного и того же алгоритма, написанного на Java, C ++ и Python, последний выполняется с использованием Pypy, Jython и CPython на Mac OS X 10.6.4 Macbook Pro с обычным (неSSD) HDD.

Это алгоритм типа «декодировать поток данных из файла», где релевантным измерением является общее время выполнения, и я хочу предотвратить смещение с помощью, например, кэш-памяти жесткого диска, других программ.запущенный одновременно, слишком большой / маленький файл сэмпла и т. д. На что нужно обратить внимание, чтобы создать справедливое сравнение?

Ответы [ 4 ]

1 голос
/ 29 октября 2010

Это трудно сделать хорошо.

Во многих случаях операционная система будет кэшировать файлы, поэтому во второй раз, когда они выполняются, они внезапно работают намного лучше.повторное сравнение интерпретируемых языков с компилированным.Для интерпретируемых языков требуется, чтобы где-то в память загружался интерпретатор, иначе они не смогут работать.Чтобы быть честным, вы должны подумать о том, должно ли использование памяти и время загрузки интерпретатора быть частью теста.Если вы ищете производительность в среде, в которой вы можете предполагать, что переводчик всегда предварительно загружен, вы можете игнорировать это.Многие настройки для веб-серверов смогут сохранять предустановленный интерпретатор.Если вы выполняете специальные клиентские приложения на рабочем столе, запуск может быть очень медленным, пока загружается интерпретатор.

0 голосов
/ 29 октября 2010

Получить полную беспристрастность невозможно, вы можете делать разные вещи, такие как запуск минимальных процессов и т. Д., Но лучший способ IMO - запускать сценарии в произвольном порядке в течение длительного периода времени в разные дни и получить среднее значение, которое будет максимально приближено к непредвзятостинасколько это возможно.

Потому что в конечном итоге код будет выполняться в такой среде в произвольном порядке, и вас интересует среднее поведение, а не некоторые числа.

0 голосов
/ 29 октября 2010

Я бы порекомендовал вам просто запускать каждую программу много раз (например, около 20) и выполнять наименьшее измерение из каждого набора.Это сделает так, что весьма вероятно, что программа будет использовать кеш HD и другие подобные вещи.Если они все это делают, то это не предвзято.

0 голосов
/ 29 октября 2010

Чтобы предотвратить смещение, я бы рекомендовал сначала остановить все ненужные процессы в фоновом режиме.

Я не уверен насчет окон, но в Linux вы можете очистить кэш HDD через drop_caches Информация о том, как его использовать здесь

Кроме того, вы можете получить среднее значение для нескольких прогонов приложения, чтобы любые помехи на жестком диске или в ОС не искажали результаты.

...