Страницы

Поиск по вопросам

суббота, 9 марта 2019 г.

Измерить время выполнения одной инструкции

Всем привет. Вот недавно возник такой вопрос. Вопрос носит характер удовлетворения скорее чистого любопытства, а не практический интерес, хотя, в-принципе, было бы и на практике интересно попробовать возможно ли такое проверить. В-общем, насколько я понимаю, такое невозможно на сегодняшних, современных процессорах (невозможно же?), так как Instruction pipeline на современных процах конвееризирован. Каждая инструкция состоит из нескольких составляющих ее операций, которые далеко не факт что будут выполняться за одинаковое время - допустим, при fetching'е операнда из памяти или на стадии Write back может произойти cache miss, и в итоге время доступа вырастет очень существенно, от десятков наносекунд до микро или даже милисекунд. Также на многих процессорах используются конвеерные оптимизации, т.е. опредленная последовательность инструкций (паттерн) будет отрабатывать быстрее, нежели другой, менее удачливый набор, опять-таки, из-за особенностей конвеера и стадий обработки инструкции. Получается, это невозможно? Скажите, прав я или нет?


Ответ

Да, всё зависит от огромного числа факторов, некоторые из которых Вы назвали. Я слышал, что intel'овские профайлеры умеют показывать некоторые подобные скрытые вещи (насколько я помню, - например, промахи кэша и ошибки предсказания переходов), используя знания об архитектуре и некоторые вещи эмулируя (а не измеряя).

Комментариев нет:

Отправить комментарий