Конвейеризация команд - симулятор архитектуры и визуализация конвейеров - PullRequest
0 голосов
/ 24 февраля 2012

Я работаю над компилятором и написал оптимизацию, которая фактически замедлила мой код! Изучив его, я обнаружил, что там генератор кода решил использовать дескриптор (двойная ссылка в случае нашего компилятора), когда моя оптимизация была отключена, и указатель на дескриптор, когда моя оптимизация была включена! Это привело к появлению еще одной инструкции отмены ссылки во втором случае при каждом обращении к массиву.

Но эта единственная инструкция вызвала удивительное замедление времени выполнения кода на 32%. Я подозреваю, что это связано с конвейерной обработкой инструкций, поскольку эта дополнительная де-ссылка вызывает 3 зависимые инструкции, которые могут объяснить замедление.

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

1 Ответ

0 голосов
/ 07 апреля 2012

Когда вам нужно разыменовать указатель, вы должны сначала загрузить указатель из памяти, и только затем вы можете загрузить значение, на которое указывает указатель. Если у вас есть указатель на указатель на значение, вам нужно выполнить три последовательных загрузки. Это называется погоней за указателем. Если эти указатели не находятся в кэше, влияние на производительность может быть огромным. Трубопроводы не очень помогают. Стандартная книга по компьютерной архитектуре - hennessy & patterson. Там есть несколько архитектурных симуляторов. http://gem5.org довольно популярен (полное раскрытие, я приверженец), но у них почти всегда крутая кривая обучения.

...