Некоторые сомнения в оптимизации неонового кода

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

Вот ссылка на мой код: http://pulsar.webshaker.net/ccc/sample-115d4c29

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

Сегмент кода разделен на 7 разделов в области комментариев, чтобы упростить обращение.

Заранее спасибо. :)


person Anoop K. Prabhu    schedule 16.12.2011    source источник
comment
codereview.stackexchange.com ?   -  person Jens Björnhager    schedule 16.12.2011
comment
Это кажется довольно очевидным, если вы читаете ключ внизу - это потому, что вам трудно его понять, потому что он на французском языке, или вы не знакомы с техническими терминами, относящимися к трубопроводам, киоскам и т. д.?   -  person Paul R    schedule 16.12.2011
comment
это проблема, связанная с техническими терминами: «n.7-0 2c неон-а», «n.43-0 2c n0 d16:7» что такое неон-а в первом случае, как он может выполнять 7 полупериодов в последний случай и т. д. Тогда о чем же говорят эти «красные» и «желтые». Единственное, что я отметил на сайте, это то, что это не так точно. У меня было бы лучшее профилирование производительности с моим оптимизированным кодом, который, по их словам, имеет много накладных расходов на циклы, чем код в примере.! Но все же это достойный инструмент.!   -  person Anoop K. Prabhu    schedule 16.12.2011
comment
@JensBjörnhager: да. я собирался опубликовать там, но чувствовал, что это гораздо лучшее место, так как в обзоре кода не было найдено ни тем, ни пользователей, связанных с рукой, корой, неоном и т. д. :)   -  person Anoop K. Prabhu    schedule 16.12.2011


Ответы (1)


вы можете попробовать эту ссылку

http://pulsar.webshaker.net/ccc/beta-sample-115d4c29

это использует бета-версию 0.9 счетчика циклов. Основное отличие состоит в том, что симулятор NEON больше не использует 2 отдельных конвейера. Из-за Cortex A9, который не может выполнить 2 инструкции NEON за один цикл.

Начал обновлять часть счетчика циклов.

Результат:

-Информация о цикле более точна для Cortex A9.

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

Оранжевый цвет означает задержку из-за ожидания конвейера.

Красный цвет означает задержку из-за конфликта регистров.

Число, указанное рядом с регистром, не является количеством потерянных циклов. Это максимальное количество инструкций, которые вы можете разместить перед этой инструкцией.

Я надеюсь, что помощь!

person webshaker    schedule 19.12.2011
comment
о... я не знаю, что конвейерная обработка больше не поддерживается. Мой биглборд по-прежнему поддерживает конвейерную обработку и кажется эффективным при разумном использовании. Красный цвет появлялся в некоторых ситуациях, когда я не мог заметить никакого конфликта регистров, и это сбивало меня с толку. Теперь бета-версия намного понятнее. n.48-0 2c d16:3 означает 3 полуцикла или полные циклы? Я заметил, что 'vext' может работать параллельно с 'vld'. Старая версия вашего калькулятора, похоже, этого не допускала. :) Калькулятор, который вы предоставили, очень пригодился мне, чтобы иметь хорошее представление о неоне. Благодаря тонну.!! - person Anoop K. Prabhu; 19.12.2011
comment
еще одно сомнение: неон-а, что это значит. - person Anoop K. Prabhu; 19.12.2011
comment
Для d16:3 Нет, в новой версии больше нет полупериода. 3 — это номер инструкции, которую вы можете поставить перед VLD. На Cortex A9 наилучшая производительность NEON, которую вы можете иметь, составляет 1 инструкцию/цикл. Итак, 3 — это 3 инструкции или 3 цикла (как хотите). - person webshaker; 19.12.2011
comment
neon-alu (neon-a) — это ошибка, означающая, что используется алюминиевый блок неона. В этом случае симулятор должен написать «n0» оранжевым цветом, а не красным. Потому что это означает, что NEON должен ждать конвейер 0 из-за невозможности спарить инструкцию с предыдущей. У меня есть ошибка, которую нужно исправить в симуляторе, но сейчас у меня нет времени. - person webshaker; 19.12.2011
comment
Последний комментарий. Конвейерная обработка по-прежнему поддерживается в Cortex A9. Что больше не поддерживается, так это возможности двойных инструкций (только на устройстве NEON). это не одно и то же!!! - person webshaker; 19.12.2011
comment
vld и vadd могут пройти один и тот же цикл. Разве это не то, к чему относятся как двойная инструкция, так и конвейерная обработка? - person Anoop K. Prabhu; 19.12.2011
comment
Мое последнее сомнение: в бета-калькуляторе кажется 3 конфликта регистров и одна задержка конвейера. Есть ли шанс, что в этом случае появится «желтый цвет»? почему в последней строке моего кода задержка составляет 3 инструкции? Одна инструкция подойдет? - person Anoop K. Prabhu; 19.12.2011
comment
На A8 вы можете ЗАПУСТИТЬ VLD и VADD в одном и том же цикле. После этого обе инструкции выполняются параллельно (даже если им требуется много циклов). На A9 вы можете ЗАПУСТИТЬ только 1 инструкцию за цикл, но при необходимости они могут выполняться параллельно. Двойная инструкция означает две инструкции СТАРТ в одном цикле. Конвейерная обработка означает запуск новой инструкции, в то время как другие (1, 2, 3, ... намного больше) инструкции работают. Это как очередь, вы можете иметь одного человека, входящего в очередь каждую секунду, но иметь в очереди 10 человек !!! - person webshaker; 19.12.2011
comment
у вас есть задержка в 3 цикла, потому что VCGE может выполняться каждый цикл, но результат будет получен на 4 цикла позже. Таким образом, VLD должен дождаться вычисления q8, прежде чем сможет его использовать. - person webshaker; 19.12.2011
comment
прочитать этот пост forums.arm .com/index.php?/topic/, который может вам помочь - person webshaker; 19.12.2011
comment
Спасибо за ваше время. Ваши ответы были очень полезны для меня. :) - person Anoop K. Prabhu; 19.12.2011
comment
Ссылка в комментарии больше не работает. Вместо этого используйте это: community.arm.com/message/7932#7932 - person Anoop K. Prabhu; 12.12.2013