Инструменты сравнительного анализа, не зависящие от языка, для измерения скорости и потребления памяти

#benchmarking

#сравнительный анализ

Вопрос:

Я пробую разные языки для написания программ командной строки, которые из них делают точно то же самое. Теперь я хотел бы знать, какой из них является наиболее производительным. Существует ли не зависящий от языка инструмент, который может помочь мне измерить скорость и потребление памяти? Было бы лучше, если бы это было кроссплатформенным. Спасибо!

Ответ №1:

В любой системе Unix time целый исполняемый файл, идеально подходящий для инструментов командной строки. В некоторых реализациях time или других подобных инструментов выводится отметка о высоком расходе памяти.

В Linux perf stat ./my_executable определяет время (настенные часы и общее время процессора) и может показывать другие показатели, такие как неверные прогнозы ветвей, промахи кэша и другие события счетчика производительности оборудования. А также программные счетчики ядра, такие как ошибки страниц, переключения контекста и миграции процессора. (Полезно для обнаружения помех от других процессов или для многопоточных программ, чтобы заметить фактические эффекты.)

perf record ./my_executable будет выполнено профилирование на основе выборки, чтобы показать горячие точки. В нем больше возможностей для создания снимков стека вызовов, чтобы вы могли выяснить, какие родительские функции на самом деле ответственны за выполнение дорогостоящих вызовов функций.

По какой-то причине perf report не позволяет перейти к дизассемблированию, если в нем нет символов отладки, вероятно, потому, что машинный код x86 нельзя дизассемблировать в обратном направлении, только вперед от известной начальной точки. Но у него много отправных точек, и он отказывается их использовать.

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