Исключения, прерывания и промывка трубопроводов - PullRequest
0 голосов
/ 22 февраля 2020

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

Всегда ли прерывания / исключения всегда грипп sh конвейер? Если мы выполняем «основной» (не ISR / исключение) код, будет ли любое внутреннее исключение или внешнее прерывание всегда вызывать flu sh то, что находится в конвейере, начинать выполнение кода ISR / конвейер заполнения с инструкциями ISR, затем return и flu sh снова, и начните со следующей инструкции перед прерыванием и начните с чистого / пустого конвейера ..? Или есть какие-то архитектурные волхвы c, чтобы сохранить / восстановить конвейер до того, каким он был.

Если содержимое конвейера всегда очищается, значит ли это, что числовые прерывания всегда будут напрямую влиять на производительность моего конвейера? Больше прерываний означает прямую меньшую выгоду от конвейера или это более сложная оценка? Скажем, исключение systemtick от ARM: означает ли это, что чем выше частота тиков, тем меньше выгоды от конвейера и аналогично для всех других прерываний?

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

...