Как указать время выполнения инструкций x86 и PowerPC? - PullRequest
3 голосов
/ 20 мая 2010

Мне нужно приблизить время выполнения кода ассемблера PowerPC и x86. Я понимаю, что не могу точно вычислить, это зависит от многих проблем (текущее состояние процессора - процессор x86 определяет внутренние инструкции в микроинструкциях, время доступа к памяти, получение кода из кеша из медленного память и т. д.).

Я нашел некоторую информацию в справочнике по оптимизации Intel (ПРИЛОЖЕНИЕ C), но он не предоставляет информацию обо всех инструкциях общего назначения. Есть ли полная ссылка на это?

А как насчет процессоров PowerPC? Где я могу найти такую ​​информацию?

Ответы [ 4 ]

2 голосов
/ 21 мая 2010

PowerPC довольно хорошо документирован, но это зависит от того, о каком процессоре вы говорите. IBM сделала довольно хорошее руководство для 970 (G5). Intel немного менее настойчива, когда дело доходит до деталей микроархитектуры.

Сказав это, хотя, то, что вы хотите сделать, довольно сложно. И x86, и PowerPC являются суперскалярными - они имеют несколько исполнительных блоков и конвейеров, так что это не похоже на старые времена, когда вы, возможно, выполняли одну инструкцию за такт. Например, PowerPC 970 может иметь до 215 команд «в полете» в любой момент времени. В идеале вам нужен симулятор, если вы хотите измерить точное количество циклов для небольших фрагментов кода.

1 голос
/ 21 мая 2010

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

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

1 голос

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

1 голос
/ 21 мая 2010

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

Я думаю, вам следует попытаться оптимизировать использование памяти.

...