Русский
Русский
English
Статистика
Реклама

I386

Сколько инструкций процессора использует компилятор?

16.06.2020 20:21:53 | Автор: admin
Месяц назад я попытался сосчитать, сколько разных инструкций поддерживается современными процессорами, и насчитал 945 в Ice Lake. Комментаторы затронули интересный вопрос: какая часть всего этого разнообразия реально используется компиляторами? Например, некто Pepijn de Vos в 2016 подсчитал, сколько разных инструкций задействовано в бинарниках у него в /usr/bin, и насчитал 411 т.е. примерно треть всех инструкций x86_64, существовавших на тот момент, не использовались ни в одной из стандартных программ в его ОС. Другая любопытная его находка что код для x86_64 на треть состоит из инструкций mov. (В общем-то известно, что одних инструкций mov достаточно, чтобы написать любую программу.)

Я решил развить исследование de Vos, взяв в качестве эталонного кода компилятор LLVM/Clang. У него сразу несколько преимуществ перед содержимым /usr/bin неназванной версии неназванной ОС:

  1. С ним удобно работать: это один огромный бинарник, по размеру сопоставимый со всем содержимым /usr/bin среднестатистического линукса;
  2. Он позволяет сравнить разные ISA: на releases.llvm.org/download.html доступны официальные бинарники для x86, ARM, SPARC, MIPS и PowerPC;
  3. Он позволяет отследить исторические тренды: официальные бинарники доступны для всех релизов начиная с 2003;
  4. Наконец, в исследовании компиляторов логично использовать компилятор и в качестве подопытного объекта :-)

Начну со статистики по мартовскому релизу LLVM 10.0:
ISA Размер бинарника Общее число инструкций Число разных инструкций
AArch64 97 МБ 13,814,975 195
ARMv7A 101 МБ 15,621,010 308
i386 106 МБ 20,138,657 122
PowerPC64LE 108 МБ 17,208,502 288
SPARCv9 129 МБ 19,993,362 122
x86_64 107 МБ 15,281,299 203
В прошлом топике комментаторы упомянули, что самый компактный код у них получается для SPARC. Здесь же видим, что бинарник для AArch64 оказывается на треть меньше что по размеру, что по общему числу инструкций.

А вот распределение по числу инструкций:


Неожиданно, что код для SPARC на 11% состоит из nop-ов, заполняющих branch delay slots. Для i386 среди самых частых инструкций видим и int3, заполняющую промежутки между функциями, и nop, используемую для выравнивания циклов на строки кэша. Наблюдение de Vos о том, что код на треть состоит из mov, подтверждается на обоих вариантах x86; но даже и на load-store-архитектурах mov оказывается если не самой частой инструкцией, то второй после load.

А как набор используемых инструкций менялся со временем?

Единственная ISA, для которой в каждом релизе есть официальный бинарник это i386:


Серая линия, отложенная на правой оси это число разных инструкций, использованных в компиляторе. Как мы видим, некоторое время назад компилятор компилировался гораздо разнообразнее. int3 стала использоваться для заполнения промежутков только с 2018; до этого использовались такие же nop, как и для выравнивания внутри функций. Здесь же видно, что выравнивание внутри функций стало использоваться с 2013; до этого nop-ов было гораздо меньше. Ещё интересно, что до 2016 mov-ы составляли почти половину компилятора.

Самые первые версии LLVM, до появления clang, выпускались ещё и с бинарниками для SPARC. Потом поддержка SPARC утратила актуальность, и вновь она появилась лишь через 14 лет с на порядок увеличившимся числом nop-ов:


Исторически следующая ISA, для которой выпускались бинарники LLVM это PowerPC: сначала для Mac OS X и затем, после десятилетнего перерыва, для RHEL. Как видно из графика, переход после этого перерыва к 64-битному варианту ISA сопровождался заменой большинства lwz на ld, и вдобавок удвоением разнообразия инструкций:


В бинарниках для x86_64 и ARM частота использования разных инструкций почти не изменялась:




При подсчёте инструкций ARM я отсекал суффиксы условий вместе с ними получалось около тысячи разных инструкций, но даже и без них ARM сильно опережает другие ISA по разнообразию генерируемых инструкций. Таким образом, слой b на этом графике включает и все условные переходы тоже. Для остальных ISA, где условными могут быть только переходы и немногие другие инструкции, суффиксы условий при подсчёте не отсекались.

Наконец, самая недавняя ISA, для которой публикуются официальные бинарники это AArch64. Здесь интересно то, что orr с прошлого года почти перестала использоваться:


PowerPC и AArch64 оказались единственными ISA, для которых число разных используемых инструкций всё растёт и растёт.
Подробнее..

Вехи истории Intel. 35-летие процессора i386

30.10.2020 10:10:09 | Автор: admin

Архив Intel продолжает напоминать нам о знаменательных страницах истории компании а их за прошедшие 50 с лишним лет было, как вы понимаете, немало. Сегодня мы перенесемся в середину восьмидесятых, а именно в 1985 год, когда Intel объявила о запуске своего нового процессора, получившего индекс 386.

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

Так было написано в ежемесячном информационном листе Intel за октябрь 1985 года, выходившем для сотрудников компании. В нем же объявлялось, что 16 октября вышел новый процессор 80386, так же известный как i386 или просто 386 первый 32-битный процессор Intel, содержащий 275 тысяч транзисторов. Это случилось, как вы понимаете, ровно 35 лет назад.

Официальном запуск i386 для прессы и вендоров состоялся в Музее де Янга, Сан Франциско, с участием Энди Гроува и других руководителей Intel.


Клод Леглиз (слева) и Жан-Клод Корне на фоне гигантской схемы процессора 80386

386 самый производительный коммерческий процессор из когда-либо создававшихся. Он работает со средней скоростью в 3-4 миллиона инструкций в секунду на частоте 16 мегагерц, что существенно выше, чем у ближайших конкурентов. утверждал Клод Леглиз, продакт-менеджер i386 по маркетингу.

Сегодняшние топовые процессоры Intel содержат более 7 миллиардов транзисторов и обрабатывает до 2 миллиардов инструкций в секунду, но 30 с лишним лет назад 386 был просто-таки ошеломляюще быстрым.


Инженеры Intel изучают схематику процессора i386

Во время официальной церемонии запуска президент Intel сказал: у нас ведется совместная работа с 30 крупнейшими компьютерными производителями по созданию оборудования на базе i386. Названия этих компаний всем прекрасно знакомы. И это действительно так, сейчас мы знаем, что Энди имел в виду AT&T, Compaq, IBM, McDonnell Douglas и других.

Стоит отметить, что запуск процессора 80386 произошел через 6 дней после объявления Intel об уходе с рынка чипов памяти. Причиной ухода стало падение цен на DRAM и уменьшение прибыльности бизнеса. Этот драматический эпизод истории Intel описан в книге Энди Гроува Выживают только параноики, соответствующий отрывок из которой мы когда-то публиковали в блоге.

Позже мероприятия, связанные с запуском 386, прошли в Токио, Лондоне, Париже и Мюнхене. Впервые в своей истории представлял не просто чип, а целое семейство продуктов, включавшее в себя материнские платы, сопроцессоры, компиляторы, операционные системы и так далее.

А какие воспоминания остались об i386 лично у вас?
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru