Относительно времени инструкции руки

На веб-сайте arm указано время выполнения инструкций для процессора Cortex-a9. Ссылка на инструкцию

Для каждой инструкции (чтобы быть конкретным, я говорю о векторной инструкции NEON) время указано в таблице в формате, показанном ниже (с использованием инструкции VADD в качестве примера):

NAME    FORMAT    Cycle      Source    Result    Writeback 
VADD    Dd,Dn,Dm  1          -,2,2     3         6

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

Но у меня вопрос:

Когда этот номер цикла начинает отсчитываться? Считается ли это после выдачи инструкции?

Кроме того, насколько я знаю, проблема заключается в том, что команда отправляется процессору для выполнения после получения и декодирования инструкции, тогда почему тогда в таблице не отображаются циклы декодирования и выборки? Это очень важная информация, так как мне нужно знать циклы выборки и декодирования, чтобы знать, сколько циклов мне нужно подождать для плавного выполнения инструкции, которая зависит от результата предыдущей инструкции.

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


person Da Teng    schedule 07.06.2014    source источник
comment
Огромное спасибо ooga, за исправление ошибок моего поста!   -  person Da Teng    schedule 09.06.2014


Ответы (1)


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

Во всяком случае, вот мое понимание этой таблицы. Поскольку Cortex A9 поддерживает выполнение вне очереди, циклы выборки и декодирования не имеют значения. Вот почему они отсчитывают от времени выпуска. Вы можете добавить циклы выборки и декодирования самостоятельно, но вы должны учитывать эффекты предыдущих инструкций и такие вещи, как барьеры памяти, чтобы их точно подсчитать.

В таблице выше показано, что минимальное время выдачи этой инструкции составляет 1 цикл. Поэтому исходные значения должны быть доступны в следующем цикле (цикл 2), чтобы избежать остановки. Для выполнения инструкции требуется всего один цикл после того, как появятся исходные результаты, поэтому следующая инструкция может использовать результаты, если в ЦП существует путь пересылки. Однако требуется еще 3 цикла (до шестого цикла), чтобы результаты были зафиксированы в регистровом файле, где гарантировано, что любая инструкция может получить доступ к результатам.

Суть в том, что выполнение этой инструкции может занять от 1 до 6 циклов в идеальных условиях. Никаких ожиданий кеша, никаких барьеров памяти и т. Д.

person Vlad    schedule 07.06.2014