Има ли наличен скрипт за последваща обработка на някои objdump --disassemble
изходни данни за анотиране с брой цикли? Специално за семейството на ARM. По-голямата част от времето това би било само съвпадение на шаблон с търсене в таблица за броя. Предполагам, че може да са необходими анотации като Perl, python, bash, +5M
за пет цикъла на паметта.C
и т.н. Мисля, че това може да се направи общо, но се интересувам от ARM, който има ортогонален набор от инструкции. Ето тема за 68HC11, която прави същото. Скриптът ще се нуждае от опция за модел на процесора, за да избере подходящия брой цикли; Мисля, че тези бройки вече съществуват в описанието на машината gcc
.
Не мисля, че има превключвател objdump
за това, но RTFM би бил страхотен.
Редактиране: За да поясним, предположенията като най-добрия случай на подсистема на паметта, какъвто ще бъде случаят, когато кодът се изпълнява от кеша, са добри. Целта не е 100% точен брой цикли според някоя работеща машина. Възможно е да се получи разумна оценка, в противен случай дизайнът на компилатора би бил невъзможен.
Както посочва DWelch, проста текуща обща сума не е възможна с дълбока конвейерна архитектура, като по-новите Cortex чипове. Постобработката objdump
ще трябва да разгледа околните кодове за операции. Приставката за gcc е по-вероятно да успее да постигне това и тъй като е нова (4.5+), не мисля, че съществува такова нещо. Скрипт за ARM926 със сигурност е възможен и доста прост.
Забавянето на паметта няма значение. Контролерът на паметта е като друг CPU
. Той върши работата си, докато процесорът извършва аритметика и т.н. Един добър/добре настроен алгоритъм ще паралелен паметта осъществява достъп с изчисленията. Чрез преброяване на зареждания/запаметяване и цикли можете да определите колко паралелизъм е постигнат, когато активно профилирате с таймер. Конвейерът е значителен поради блокировките между регистрите, но броят на циклите за основни блокове може надеждно да бъде изчислява се и се използва дори на съвременни ARM процесори; това е твърде сложно за прост скрипт.