iPhone ARMv6 VFP asm задержка, пропускная способность и опасности - PullRequest
4 голосов
/ 20 января 2010

в этом документе: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301g/DDI0301G_arm1176jzfs_r0p7_trm.pdf

на стр. 21-25 (pdf, стр. 875) приведены значения времени прохождения и задержки для инструкций по сборке устройства VFP.

Это течисла, независимые от вектора размера?

1: давайте возьмем FMULS с пропускной способностью 1 и задержкой 8. Означает ли это, что я могу запустить в каждом цикле новую операцию FMULS, если я не использую регистр, которыйв настоящее время не рассчитывается по предыдущей функции?например:

FMULS s8, s16, s20
FMULS s12, s21, s25

будут ли они работать сразу после друг друга?

2: что произойдет, если у меня есть две функции FMULS после друг друга, где один аргумент зависит от предыдущего вычисления

FMULS s8, s16, s20
FMULS s12, s21, s8

будет ли VFP ждать 8 циклов, прежде чем начинать обрабатывать вторую инструкцию?

3: что если мы находимся в векторном режиме с 4 элементами и во второй инструкции FMULS все входные регистры, кроме одного, доступны,что произойдет?

4: sqrt и деление: помешает ли операция sqrt или деление запускать любую последующую операцию в течение 19 циклов?

спасибо!

1 Ответ

2 голосов
/ 20 января 2010

Все ваши вопросы даны в документе, на который вы ссылаетесь. Вы должны прочитать это внимательно.

Эти числа независимы от вектора?

Нет. См., Например, таблицу 21-15 в документе, на который вы ссылаетесь. Обратите внимание на задержку короткого вектора FADDS.

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

Да, это определение пропускной способности.

что произойдет, если у меня есть две функции FMULS друг за другом, где один аргумент зависит от предыдущего вычисления

Выполнение будет остановлено, пока не станет доступен результат первого FMULS. Подробнее см. 21.6 «Работа табло».

что если мы находимся в векторном режиме с 4 элементами и по второй инструкции FMULS доступны все входные регистры, кроме одного. что будет?

Это остановится. Та же ссылка.

sqrt и деление: предотвратит ли операция sqrt или деление любую последующую операцию для 19 циклов?

Нет. См. Раздел 21.10 «Параллельное выполнение». Пример приведен в таблице 21-15, в которой независимый FADDS выполняется сразу после FDIVS.

Обратите внимание, что может быть непросто (хотя и не невозможно) написать коротко-векторный код VFP, который работает значительно быстрее, чем скалярный код для многих типов вычислений. Даже если вы научитесь это делать, это будет иметь сомнительную ценность, поскольку блок NEON, похоже, является новой моделью для векторного вычисления в ARM. Возможно, в долгосрочной перспективе вам будет лучше, если вы игнорируете операцию с короткими векторами и сосредоточитесь на изучении NEON в будущем.

...