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

Сравнение

Визуальное сравнение 13 CSS-фреймворков

27.07.2020 10:17:57 | Автор: admin


Доброго времени суток, друзья!

Предлагаю Вашему вниманию результаты небольшого исследования визуального сравнения 13 CSS-фреймворков.

Цель исследования определить, какой из фреймворков лучше всего справляется со стилизацией по умолчанию, т.е. без добавления специальных (предусмотренных фреймворком) классов.

В исследовании представлены следующие фреймворки:


Использовались следующие версии стилей:



В тестовой разметке представлены основные элементы веб-страницы с акцентом на семантические теги:

<header>    <figure>        <figcaption>logo</figcaption>        <img src="logo.png" alt="logo">    </figure>    <nav>        <a href="#">link1</a>        <a href="#">link2</a>        <a href="#">link3</a>    </nav></header><hr><main>    <h1>main title</h1>    <aside>        <h4>aside title</h4>        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium, quibusdam.</p>    </aside>    <section>        <h2>section title</h2>        <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Odit, illum.</p>        <ul>            <li>item1</li>            <li>item2</li>            <li>item3</li>        </ul>        <table>            <caption>table</caption>            <tr>                <th>1</th>                <th>2</th>                <th>3</th>            </tr>            <tr>                <td>1</td>                <td>2</td>                <td>3</td>            </tr>            <tr>                <td>4</td>                <td>5</td>                <td>6</td>            </tr>        </table>        <dl>            <dt>term</dt>            <dd>Lorem <strong>ipsum</strong>, dolor sit <em>amet</em> consectetur adipisicing elit. <mark>Accusamus</mark>, obcaecati?</dd>        </dl>        <details open>            <summary>summary</summary>            <p><small>Lorem dolor sit amet ipsum, consectetur adipisicing elit. Explicabo, repellat?</small></p>        </details>        <button>button</button>    </section>    <article>        <h3>article title</h3>        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam, architecto?</p>        <blockquote>Lorem ipsum dolor, sit amet <cite>consectetur adipisicing elit.</cite> Ipsam, ad!</blockquote>        <code>            console.log('hello world')        </code>    </article></main><hr><footer>    <form action="#">        <fieldset>            <legend>form</legend>            <label>name:                <input type="text">            </label>            <label>email:                <input type="email">            </label>            <input type="submit" value="subscribe">        </fieldset>    </form>    <p> 2020.</p></footer>

Вот как это выглядит:




Поиграть с кодом можно здесь:



Песочница не позволяет работать с тегом head, поэтому милости прошу на GitHub Pages.

Код проекта находится здесь.

Результаты исследования вполне ожидаемы: первое место Bootstrap, второе Materialize.

Materialize, судя по всему, следует концепции mobile first, из-за чего проигрывает Bootstrap, когда дело касается широких экранов. Также Materialize проигрывает в плане функциональности, но это другая история.

Перспективными мне показались Skeleton и Picnic.

Благодарю за внимание.
Подробнее..

Перевод NVIDIA Ampere против AMD RDNA 2 битва архитектур

05.03.2021 14:13:31 | Автор: admin

Спустя два года после запуска Turing в сентябре 2020 года NVIDIA сменила архитектуру своих видеокарт на Ampere. AMD не осталась в стороне и вскоре после этого тоже обновила архитектуру RDNA до второй версии.

Всем хотелось, чтобы новые видеокарты RX 6000 могли составить конкуренцию лучшим продуктам NVIDIA. И теперь, когда обе серии вышли в продажу, геймеры оказались избалованы выбором (по крайней мере, теоретически), куда вложить свои деньги.

Но что насчет чипов, лежащих в их основе? Какой из них лучше?

Размеры кристаллов

На протяжении долгих лет графические процессоры были больше центральных и продолжают неуклонно расти. Площадь последнего ГП AMD составляет примерно 520 мм2, что более чем в два раза больше их предыдущего чипа Navi. При этом он все еще не самый большой: эта честь принадлежит графическому процессору в новом ускорителе Instinct MI100 с площадью порядка 750 мм2.

В последний раз AMD производила игровой процессор размером примерно с Navi 21 для карт Radeon R9 Fury и Nano, которые имели архитектуру GCN 3.0 в чипе Fiji. Его площадь составляла 596 мм2.

С 2018 года AMD использует в работе 7-нм процесс от TSMC, и самым большим чипом из этой производственной линейки был Vega 20 (из Radeon VII) с площадью 331 мм2. Все графические процессоры Navi созданы на основе слегка обновленной версии этого процесса, называемой N7P.

И все же, что касается размеров кристалла, корона остается за NVIDIA, но не то чтобы это было хорошо. Последний чип на базе Ampere, GA102, имеет площадь 628 мм2. Это примерно на 17% меньше, чем у его предка, TU102: он имел ошеломляющую площадь кристалла в 754 мм2. Но все это ничто по сравнению с монструозным чипом NVIDIA GA100: используемый в ИИ и обработке данных, этот 7-нм графический процессор имеет площадь 826 мм2. Он наглядно показывает, каких размеров может достичь графический процессор.

По сравнению с ГП NVIDIA Navi 21 выглядит довольно стройно, хотя стоит помнить, что процессор это не только кристалл. GA102 содержит около 28,3 миллиарда транзисторов, тогда как новый чип AMD на 5% меньше 26,8 миллиарда.

Мы не знаем, из скольких слоев состоит каждый из этих ГП, поэтому все, что мы можем сравнить, это отношение транзисторов к площади кристалла, обычно называемое плотностью кристалла. Navi 21 имеет примерно 51,5 млн транзисторов на квадратный мм, в GA102 она заметно ниже 41,1 млн.

Navi 21 производится у TSMC в соответствии с процессом N7P, который дает небольшое увеличение производительности по сравнению с N7. Свои новые чипы GA102 NVIDIA предпочла производить у Samsung. В них используется модифицированная специально для NVIDIA версия так называемого 8-нм узла (обозначаемого как 8N или 8NN). Значения узлов 7 и 8 имеют мало общего с фактическим размером компонентов: это просто маркетинговые термины, используемые для различения производственных технологий.

Теперь давайте углубимся в компоновку каждого графического процессора и посмотрим, что находится у них под капотами.

Внутри кристаллов

Общая структура Ampere GA102 и RDNA 2 Navi 21

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

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

Такие схемы полезны, но для нашего анализа интереснее посмотреть, где находятся различные компоненты внутри самих кристаллов. При проектировании крупномасштабного процессора обычно требуется, чтобы общие ресурсы, такие как контроллеры и кэш, находились в центре, чтобы гарантировать, что все компоненты имеют одинаковый путь к ним.

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

Ниже приведены изображения кристаллов AMD Navi 21 и NVIDIA GA102 в искусственных цветах. Оба изображения были подчищены и показывают только один слой внутри чипа, однако при этом дают хорошее представление о внутренностях современного графического процессора

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

Например, Pascal GP106 (используемый в GeForce GTX 1060) был буквально вдвое меньше GP104 (из GeForce GTX 1070). В более ранней версии размер кристалла был больше, а кэш-память и контроллер располагались посередине. У младшего брата они переместились в сторону.

Pascal GP104 и GP106Pascal GP104 и GP106

Для всех предыдущих топовых ГП NVIDIA использовала классическую централизованную компоновку. Зачем же было менять подход? Интерфейсы здесь ни при чем, ведь контроллеры памяти и PCI Express работают на краю кристалла. С тепловыми проблемами это тоже не связано, ведь даже если кэш-часть или контроллер кристалла будут нагреваться сильнее, чем логические секции, вам наверняка захочется, чтобы посередине схемы было больше теплопоглощающего кремния. Хотя причина этого изменения не вполне понятна, есть подозрение, что она связана с реализацией блоков вывода рендеринга (ROP).

Позже мы рассмотрим их более подробно, а пока просто скажем, что, хотя изменение макета выглядит странно, оно не оказывает существенного влияния на производительность. Это связано с тем, что 3D-рендеринг сопровождается большим количеством длительных задержек как правило, из-за необходимости ожидания данных. Таким образом, дополнительные наносекунды, добавленные за счет того, что некоторые логические блоки находятся дальше от кэша, скрываются в общей схеме чипа.

Прежде чем мы продолжим, стоит отметить инженерные изменения, реализованные AMD в компоновке Navi 21 по сравнению с Navi 10, установленном в Radeon RX 5700 XT. Несмотря на то, что новый чип в два раза больше предыдущего как по площади, так и по количеству транзисторов, разработчикам удалось улучшить тактовые частоты без значительного увеличения энергопотребления. Например, Radeon RX 6800 XT имеет базовую частоту и частоту разгона 1825 и 2250 МГц, соответственно, при TDP, равном 300 Вт. Те же показатели для Radeon RX 5700 XT: 1605 МГц, 1905 МГц и 225 Вт.

Исследование производительности на ватт карт Ampere и RDNA 2 показало, что оба производителя добились значительных улучшений в этой области, но AMD и TSMC достигли чего-то весьма примечательного сравните разницу между Radeon RX 6800 и Radeon VII на графике выше.

Radeon VII первая коллаборация AMD и TSMC с использованием 7-нм технологии, и менее чем за два года они увеличили производительность на ватт на 64%. Отсюда возникает вопрос: насколько лучше мог бы быть Ampere GA102, если бы NVIDIA осталась с TSMC.

Управление ГП

Как все устроено внутри чипов

Драйверы, которые AMD и NVIDIA создают для своих чипов, по сути работают как трансляторы: они преобразуют процедуры, выданные через API, в последовательность операций, понятную графическим процессорам. Затем все зависит от аппаратного обеспечения: какие инструкции выполняются в первую очередь, какая часть микросхемы их выполняет и так далее.

Этот начальный этап управления инструкциями обрабатывается набором модулей в микросхеме. В RDNA 2 графические и вычислительные шейдеры маршрутизируются через отдельные конвейеры, которые планируют и отправляют инструкции остальной части микросхемы: первый называется Graphics Command Processor, второй асинхронными вычислительными блоками (ACE).

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

AMD называет это Shader Engine (SE), тогда как в NVIDIA они имеют название графических кластеров (GPC): названия разные, но суть одна.

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

В случае RDNA 2 каждый SE содержит собственный набор фиксированных функциональных блоков схем, предназначенных для выполнения одной конкретной задачи:

  • Блок Primitive Setup подготавливает вершины к обработке, а также генерирует больше вершин (тесселяция) и отбраковывает их;

  • Растеризатор преобразует трехмерный мир треугольников в двухмерную сетку пикселей;

  • Блоки вывода рендеринга (ROP) считывают, записывают и смешивают пиксели.

Блок Primitive Setup работает с частотой 1 треугольник за такт. Параметр может показаться не очень большим, но не забывайте, что эти чипы работают на частотах между 1,8 и 2,2 ГГц, и эта настройка не должна оказываться узким местом ГП. Для Ampere этот блок находится на следующем уровне организации, и об этом мы еще поговорим позже.

Ни AMD, ни NVIDIA не особенно распространяются о своих растеризаторах. NVIDIA называют их Raster Engines. Мы знаем, что они обрабатывают 1 треугольник за такт, но больше никакой информации о них нет например, о субпиксельной точности.

Каждый SE в чипе Navi 21 содержит 128 ROP; GA102 от NVIDIA включает в себя 112 ROP. Может показаться, что у AMD здесь есть преимущество, ведь большее количество ROP означает, что за такт может обрабатываться больше пикселей. Но такие устройства нуждаются в хорошем доступе к кэш-памяти и локальной памяти, и мы поговорим об этом позже в этой статье. А пока давайте дальше рассмотрим на разделение SE/GPC.

Shader Engines AMD разделены на то, что они сами называют двойными вычислительными блоками (DCU), при этом чип Navi 21 использует десять DCU для каждого SE обратите внимание, что в некоторых документах они также классифицируются как Workgroup Processors (WGP). В случае Ampere и GA102 они называются кластерами обработки текстур (TPC), причем каждый графический процессор содержит 6 TPC. Они также работают со скоростью 1 треугольник за такт, и хотя графические процессоры NVIDIA работают на меньшей частоте, чем AMD, и у них намного больше TPC, чем у Navi 21 SE. Таким образом, при той же тактовой частоте GA102 имеет здесь заметное преимущество, поскольку весь чип содержит 42 блока Primitive Setup, тогда как новый RDNA 2 от AMD только 4. Но поскольку на один Raster Engine приходится шесть TPC, GA102 фактически имеет 7 систем примитивов, в то время как Navi 21 четыре. Кажется, что NVIDIA имеет здесь явное лидерство.

Последний уровень организации чипов вычислительные блоки (CU) в RDNA 2 и потоковые мультипроцессоры (SM) в Ampere производственные линии в наших ГП-заводах.

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

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

Но в случае с CU и SM AMD и NVIDIA используют разные подходы к обработке шейдеров. И пусть в некоторых областях у них много общего, но много и различий.

Подсчет ядер по методу NVIDIA

Если Turing имела множество существенных отличий от Pascal, то Ampere кажется довольно мягким обновлением предыдущей архитектуры по крайней мере, на первый взгляд. Впрочем, мы точно знаем, что по сравнению с Turing новая архитектура имеет более чем в два раза большее количество ядер CUDA в каждом SM.

В Turing потоковые мультипроцессоры содержат четыре раздела (иногда называемых блоками обработки), каждый из которых содержит логические блоки 16x INT32 и 16x FP32. Эти схемы предназначены для выполнения очень специфических математических операций с 32-битными значениями данных: блоки INT обрабатывают целые числа, а FP числа с плавающей запятой.

NVIDIA заявляет, что SM Ampere имеет в общей сложности 128 ядер CUDA, но, строго говоря, это неправда или с таким же успехом можно считать, что у Turing их было столько же. Блоки INT32 действительно могли обрабатывать значения с плавающей запятой, но только в очень небольшом количестве простых операций. Для Ampere NVIDIA увеличила поддерживаемый диапазон математических операций с плавающей запятой, чтобы соответствовать другим модулям FP32. Это означает, что общее количество ядер CUDA на SM действительно не изменилось, просто половина из них теперь имеет больше возможностей.

Поскольку блоки INT/FP могут работать независимо, SM Ampere может обрабатывать до 128 вычислений FP32 за цикл или 64 операций FP32 и 64 операций INT32 одновременно. Turing же умела делать только последнее.

Таким образом, новый графический процессор может потенциально вдвое увеличить производительность FP32 по сравнению с предшественником. Для вычислительных рабочих нагрузок это большой шаг вперед, но для игр польза окажется гораздо меньшей. Это стало очевидно после тестирования GeForce RTX 3080, в которой используется чип GA102 с 68 включенными SM.

Несмотря на то, что пиковая пропускная способность FP32 составляет 121% по сравнению с GeForce 2080 Ti, в среднем она увеличивает частоту кадров только на 31%. Так почему же вся эта вычислительная мощность тратится зря?

Простой ответ: зря она не тратится, просто игры не всегда запускают инструкции FP32.

Когда NVIDIA выпустила Turing в 2018 году, компания отметила, что в среднем около 36% инструкций, обрабатываемых графическим процессором, связаны с процедурами INT32. Эти вычисления обычно выполняются для определения адресов памяти, сравнения двух значений и логического управления.

Таким образом, для этих операций функция двойной скорости FP32 не используется, поскольку блоки с двумя путями данных могут работать только с целыми числами или с плавающей запятой. SM переключится в этот режим только в том случае, если все выстроенные в очередь 32 потока, обрабатываемые им в данный момент, выполняют одну и ту же операцию FP32. Во всех остальных случаях SM в Ampere работают так же, как и в Turing.

Это означает, что GeForce RTX 3080 имеет только 11-процентное преимущество FP32 над 2080 Ti при работе в режиме INT+FP. Вот почему реальный прирост производительности в играх не так высок, как предполагают исходные данные.

Какие тут еще улучшения? На каждый SM приходится меньше тензорных ядер, но каждое из них оказывается намного более мощным, чем в Turing. Эти схемы выполняют очень специфические вычисления (например, умножают два значения FP16 и складывают ответ с другим FP16), и теперь каждое ядро выполняет 32 таких операции за цикл.

Также есть поддержка новой функции Fine-Grained Structured Sparsity. Если кратко, то с ее помощью математическая скорость может быть удвоена путем удаления данных, которые не влияют на ответ. Опять же, это хорошая новость для профессионалов, работающих с нейронными сетями и искусственным интеллектом, но на данный момент в этом нет никаких значительных преимуществ для игровых разработчиков.

Ядра трассировки лучей также претерпели доработки: теперь они могут работать независимо от ядер CUDA, поэтому, пока они выполняют обход BVH или математику пересечения примитивов лучей, остальная часть SM все еще может обрабатывать шейдеры. Часть ядер трассировки лучей, отвечающая за проверку пересечений, также имеет вдвое большую производительность.

Ядра трассировки лучей также оснащены дополнительным оборудованием, которое помогает применять трассировку лучей к размытию движения, но эта функция в настоящее время доступна только через собственный Optix API от NVIDIA.

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

Что же насчет AMD что они сделали с вычислительными модулями в RDNA 2?

Трассировка лучей по-особенному

На первый взгляд, AMD не сильно изменила вычислительные блоки: они по-прежнему содержат два набора векторных блоков SIMD32, скалярный блок SISD, блоки наложения текстур и стек различных кэшей. Произошли некоторые изменения в отношении того, какие типы данных и связанные с ними математические операции они могут выполнять. Но наиболее заметным изменением для обычного потребителя является то, что AMD теперь предлагает аппаратное ускорение для определенных процедур трассировки лучей.

Эта часть вычислительных блоков выполняет проверки пересечения лучевого бокса или лучевого треугольника то же самое, что и ядра трассировки лучей в Ampere. Однако последние также ускоряют алгоритмы обхода BVH, тогда как в RDNA 2 это делается с помощью вычислительных шейдеров с использованием модулей SIMD 32.

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

Блоки Ray Accelerator находятся рядом с текстурными процессорами, поскольку они фактически являются частью одной и той же структуры. Хотя эта система действительно предлагает большую гибкость и устраняет необходимость в том, чтобы части кристалла занимались только трассировкой лучей и ничем другим одновременно с ней, первая реализация ее имеет некоторые недостатки. Наиболее примечательным из них является то, что текстурные процессоры могут обрабатывать только операции, связанные с текстурами или пересечениями примитивов лучей. Учитывая, что ядра трассировки лучей NVIDIA теперь работают полностью независимо от остальной части SM, это дает Ampere явное преимущество по сравнению с RDNA 2 в проработке структур ускорения и тестах пересечений, необходимых для трассировки лучей.

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

Например, в Gears 5 видеокарта Radeon RX 6800 (в которой используется вариант графического процессора Navi 21 с 60 CU) при включении трассировки лучей снизила частоту кадров только на 17%, тогда как в Shadow of the Tomb Raider аж на 52%. Для сравнения, у NVIDIA RTX 3080 (с использованием 68 SM GA102) средняя потеря частоты кадров в этих двух играх составила 23% и 40% соответственно.

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

Как упоминалось ранее, вычислительные блоки в RDNA 2 теперь поддерживают больше типов данных: наиболее заметными из них являются типы данных с низкой точностью, такие как INT4 и INT8. Они используются для тензорных операций в алгоритмах машинного обучения, и хотя AMD имеет отдельную архитектуру (CDNA) для ИИ и центров обработки данных, это обновление предназначено для использования с DirectML.

Этот API является недавним дополнением к семейству Microsoft DirectX 12. Комбинация аппаратного и программного обеспечения обеспечивает лучшее ускорение шумоподавления в алгоритмах трассировки лучей и временного масштабирования. В случае с последним у NVIDIA, конечно же, есть своя технология под названием DLSS. Она использует тензорные ядра в SM для выполнения части вычислений но учитывая, что аналогичный процесс может быть построен и через DirectML, может показаться, что эти компоненты в некоторой степени избыточны. Однако и в Turing, и в Ampere тензорные ядра также обрабатывают все математические операции, связанные с форматами данных FP16.

В RDNA 2 такие вычисления выполняются с использованием шейдерных блоков и упакованных форматов то есть, каждый 32-битный векторный регистр содержит два 16-битных.

Какой же подход лучше?

AMD преподносит свои блоки SIMD32 как векторные процессоры, поскольку они выдают одну инструкцию для нескольких значений данных. Один векторный блок содержит 32 потоковых процессора, и поскольку каждый из них работает только с одним фрагментом данных, по факту операции носят скалярный характер. По сути, это то же самое, что и SM в Ampere, где каждый блок обработки также применяет одну инструкцию для 32 значений данных.

Но если у NVIDIA весь SM может обрабатывать до 128 вычислений FMA FP32 за цикл , один вычислительный блок RDNA 2 производит только 64 таких вычисления. Использование FP16 увеличивает это значение до 128 FMA за цикл, что совпадает с тем, что делают тензорные ядра в Ampere при стандартных вычислениях FP16.

SM NVIDIA могут выполнять инструкции для одновременной обработки целочисленных значений и значений с плавающей запятой (например, 64 FP32 и 64 INT32) и имеют независимые блоки для операций FP16, тензорной математики и процедур трассировки лучей. Блоки управления AMD выполняют большую часть рабочей нагрузки блоков SIMD32, хотя у них есть отдельные скалярные блоки, которые поддерживают простую целочисленную математику.

Таким образом, может показаться, что у Ampere здесь преимущество: у GA102 больше SM, чем у Navi 21, и у них больше возможностей, когда дело доходит до пиковой пропускной способности, гибкости и предлагаемых функций. Но у AMD есть свой джокер в рукаве.

Система памяти и многоуровневые кэши

Давайте сначала взглянем на Ampere. В целом, внутри произошли некоторые заметные изменения: объем кэша 2-го уровня увеличился на 50% (Turing TU102 имел 4096 КБ, соответственно), а кэши 1-го уровня в каждом SM увеличились вдвое.

Как и раньше, кэш-память L1 здесь настраивается с точки зрения того, сколько места в кэше можно выделить для данных, текстур или общих вычислений. Для графических шейдеров (например, вершинных или пиксельных) и асинхронных вычислений кэш фактически установлен на:

  • 64 КБ для данных и текстур;

  • 48 КБ для общей памяти;

  • 16 КБ для конкретных операций.

Остальная часть внутренней памяти осталась прежней, но за пределами графического процессора ждет приятный сюрприз. NVIDIA стала работать с Micron и теперь использует модифицированную версию GDDR6 для своих потребностей в локальной памяти. По сути, это тот же GDDR6, но шина данных полностью заменена. Вместо того, чтобы использовать обычную настройку 1 бит на вывод, при которой сигнал очень быстро колеблется между двумя значениями напряжения (PAM), GDDR6X использует четыре значения напряжения:

PAM2 в GDDR6 (сверху) и PAM4 в GDDR6X (снизу)PAM2 в GDDR6 (сверху) и PAM4 в GDDR6X (снизу)

Благодаря этому GDDR6X эффективно передает 2 бита данных на вывод за цикл, поэтому при той же тактовой частоте и количестве выводов полоса пропускания удваивается. GeForce RTX 3090 поддерживает 24 модуля GDDR6X, работающих в одноканальном режиме и рассчитанных на 19 Гбит/с, что дает пиковую пропускную способность 936 ГБ/с. Это на 52% больше, чем у GeForce RTX 2080 Ti. Таких показателей пропускной способности в прошлом можно было достигнуть только при помощи HBM2, реализация которого может быть куда более дорогостоящей, чем GDDR6.

Однако такую память производит только Micron, а использование PAM4 добавляет дополнительной сложности производственному процессу, требуя гораздо более жестких допусков при передаче сигналов. AMD пошла по другому пути: вместо того, чтобы обращаться за помощью к стороннему поставщику, они использовали свое подразделение ЦП, чтобы изобрести что-то новое. Общая система памяти в RDNA 2 не сильно преобразилась по сравнению с предшественницей но есть два существенных изменения.

Каждый шейдерный движок теперь имеет два набора кэшей первого уровня. Но как можно втиснуть в графический процессор 128 МБ кэш-памяти третьего уровня? Используя конструкцию SRAM для кэша L3, AMD встроила в чип два набора кэш-памяти высокой плотности объемом 64 МБ. Транзакции данных обрабатываются 16 наборами интерфейсов, каждый из них сдвигает 64 байта за такт.

Так называемый Infinity Cache имеет свой собственный тактовый домен и может работать на частоте 1,94 ГГц, что дает пиковую внутреннюю пропускную способность 1986,6 ГБ/с. И поскольку это не внешняя DRAM, задержки здесь исключительно низкие. Такой кэш идеально подходит для хранения структур ускорения трассировки лучей, и поскольку обход BVH включает в себя множество проверок данных, Infinity Cache должен в этом особенно помочь.

На данный момент не ясно, работает ли кеш третьего уровня в RDNA 2 так же, как в ЦП Zen 2: то есть, как кэш жертвы (victim cache) второго уровня. Обычно, когда необходимо очистить последний уровень кэша, чтобы освободить место для новых данных, любые новые запросы этой информации должны поступать в DRAM.

В кэше жертвы хранятся данные, помеченные для удаления из следующего уровня памяти, и имея под рукой 128 МБ, Infinity Cache потенциально может хранить 32 полных набора кэша L2. Эта система снижает нагрузку на контроллеры GDDR6 и DRAM.

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

Так что же лучше?

Использование GDDR6X дает GA102 огромную полосу пропускания для локальной памяти, а большие кэши помогают уменьшить влияние промахов кэша. Массивная кэш-память 3-го уровня Navi 21 позволяет реже использовать DRAM, при этом графический процессор может работать на более высоких тактовых частотах без дефицита данных.

Решение AMD придерживаться GDDR6 означает, что сторонним поставщикам доступно больше источников памяти, в то время как любая компания, производящая GeForce RTX 3080 или 3090, будет вынуждена использовать Micron. И хотя GDDR6 поставляется с модулями различной плотности, GDDR6X в настоящее время ограничен 8 Гб.

Система кэширования в RDNA 2, возможно, является лучшим подходом, чем та, что используется в Ampere, поскольку использование нескольких уровней встроенной SRAM всегда обеспечивает более низкие задержки и лучшую производительность для заданного диапазона мощности, чем внешняя DRAM, независимо от пропускной способности последней.

Пайплайны рендеринга

Обе архитектуры содержат множество обновлений для фронтэнда и бэкэнда пайплайнов рендеринга. Ampere и RDNA 2 полностью поддерживают mesh-шейдеры и variable rate-шейдеры в DirectX12 Ultimate, хотя чип NVIDIA обладает большей геометрической производительностью благодаря большему количеству процессоров для этих задач.

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

Именно здесь вступает в игру использование variable rate-шейдеров. В основном этот процесс включает применение шейдеров для освещения и цвета на блоке пикселей, а не на отдельных пикселях. Это похоже на уменьшение разрешения игры для повышения производительности, но, поскольку его можно применить только к выбранным областям, потеря визуального качества не всегда очевидна.

Обе архитектуры также получили обновление для блоков вывода рендеринга (ROP), поскольку это улучшит производительность при высоких разрешениях независимо от того, используются ли variable rate-шейдеры. Во всех предыдущих поколениях своих графических процессоров NVIDIA привязывала ROP к контроллерам памяти и кэшу 2-го уровня.

В Turing восемь блоков ROP были напрямую связаны с одним контроллером и фрагментом кэша размером 512 КБ. Добавление большего количества ROP представляется проблематичным, поскольку для этого требуется больше контроллеров и кэша, поэтому для Ampere ROP теперь полностью выделены для GPC. GA102 поддерживает 12 ROP на один GPC (каждый обрабатывает 1 пиксель за такт), что дает в общей сложности 112 блоков для всего чипа.

AMD следует системе, аналогичной старому подходу NVIDIA (т. е. привязке к контроллеру памяти и кэш-памяти L2), хотя их ROP в основном используют кэш первого уровня для чтения/записи и смешивания пикселей. В чипе Navi 21 ROP теперь обрабатывает 8 пикселей за цикл в 32-битном цвете и 4 пикселя в 64-битном.

RTX IO в NVIDIA система обработки данных, которая позволяет графическому процессору напрямую обращаться к накопителю, копировать необходимые данные, а затем распаковывать их с помощью ядер CUDA.

Современные методы предполагают, что всем этим управляет центральный процессор: он получает запрос данных от драйверов графического процессора, копирует данные с накопителя в системную память, распаковывает их, а затем копирует в DRAM графической карты.

Этот механизм по своей природе является последовательным: ЦП обрабатывает один запрос за раз. NVIDIA заявляет о таких цифрах, как 100-кратная пропускная способность и 20-кратное снижение нагрузки на ЦП, но до тех пор, пока система не будет протестирована в реальных условиях, их никак нельзя будет исследовать дальше.

Когда AMD представила RDNA 2 и новые видеокарты Radeon RX 6000, вместе с ними была представлена и так называемая Smart Access Memory. Это не ответ на RTX IO на самом деле, это даже не новая функция. По умолчанию контроллер PCI Express в ЦП может адресовать до 256 МБ памяти видеокарты для каждого отдельного запроса доступа. Это значение устанавливается размером регистра базового адреса (BAR), и еще в 2008 году в спецификации PCI Express 2.0 была дополнительная функция, позволяющая изменять его размер. Преимущество его состоит в том, что нет нужды обрабатывать большое количество запросов на доступ, чтобы адресовать всю DRAM карты.

Функция требует поддержки операционной системой, центральным процессором, материнской платой, графическим процессором и его драйверами. В настоящее время на ПК с Windows система ограничена определенной комбинацией процессоров Ryzen 5000, материнских плат серии 500 и видеокарт Radeon RX 6000.

Эта простая функция дала поразительные результаты на тестах: повышение производительности на 15% при разрешении 4K. Неудивительно, что вскоре NVIDIA заявила, что реализует эту функцию для RTX 3000 в ближайшем будущем.

Мультимедиа-движок и видеовыход

Обе архитектуры обеспечивают вывод изображения через HDMI 2.1 и DisplayPort 1.4a. Первый предлагает более широкую полосу пропускания сигнала, но оба они рассчитаны на 4K при 240 Гц с HDR и 8K при 60 Гц. Это достигается при помощи либо цветовой субдискретизации 4:2:0, либо DSC 1.2a. Это алгоритмы сжатия видеосигнала, обеспечивающие значительное снижение требований к полосе пропускания без большой потери визуального качества. Без них даже пиковой пропускной способности HDMI 2.1 в 6 ГБ/с было бы недостаточно для передачи изображений 4K с частотой 6 Гц.

48-дюймовый OLED-монитор LG CK: 4K при 120 Гц требует HDMI 2.148-дюймовый OLED-монитор LG CK: 4K при 120 Гц требует HDMI 2.1

Ampere и RDNA 2 также поддерживают системы с переменной частотой обновления (FreeSync для AMD, G-Sync для NVIDIA), в кодировании и декодировании видеосигналов между ними также нет заметной разницы.

Независимо от того, какой процессор рассматривать, в обоих есть поддержка декодирования 8K AV1, 4K H.264 и 8K H.265, хотя и еще не было тщательно изучено, насколько хорошо они оба работают в таких ситуациях. Ни одна из компаний не раскрывает подробностей о внутреннем устройстве в этих областях. Какими бы важными они ни были в наши дни, все внимание по-прежнему привлекают другие аспекты графических процессоров.

Созданы для вычислений, созданы для игр

Раньше AMD и NVIDIA использовали разные подходы к выбору архитектуры и конфигурации. Но по мере того, как 3D-графика набирала все большую популярность, они становились все более похожими.

На данный момент у NVIDIA есть три чипа, использующих технологию Ampere: GA100, GA102 и GA104.

GA104 используется в GeForce RTX 3060 TiGA104 используется в GeForce RTX 3060 Ti

Последний урезанная версия GA102. GA100 совсем другое дело.

В нем нет ядер трассировки лучей и CUDA с поддержкой INT32+FP32 вместо этого он содержит множество дополнительных модулей FP64, еще больше load/store систем и огромный объем кэш-памяти L1/L2. Все это объясняется тем, что он разработан для вычислений ИИ и анализа данных.

GA102/104, в свою очередь, должны охватывать все остальные рынки, на которые нацелена NVIDIA: геймеров, профессиональных графических художников и инженеров, а также маломасштабный ИИ и вычислительные системы. Ampere должен быть мастером на все руки а это задача не из легких.

Arcturus CDNA площадью 750 мм2Arcturus CDNA площадью 750 мм2

RDNA 2 была разработана только для игр на ПК и консолях, хотя могла с таким же успехом работать в тех же областях, что и Ampere. Однако AMD решила сохранить свою архитектуру GCN и обновить ее в соответствии с требованиями сегодняшних клиентов.

Там, где RDNA 2 породила Big Navi, можно сказать, что CDNA породила Big Vega: в Instinct MI100 находится их чип Arcturus 50-миллиардный транзисторный графический процессор с 128 вычислительными блоками.

Хотя NVIDIA в значительной степени доминирует на профессиональном рынке с моделями Quadro и Tesla, Navi 21 просто не нацелена на конкуренцию с ними. Ограничивает ли это каким-либо образом требование, чтобы Ampere вписалась на несколько рынков?

Правильный ответ: нет.

Скоро AMD выпустит Radeon RX 6900 XT, в котором используется полная версия Navi 21 (без отключенных CU), которая сможет работать так же хорошо, как GeForce RTX 3090 или даже лучше. Но GA102 на этой карте также не полностью включен, поэтому у NVIDIA всегда есть возможность обновить эту модель до супер-версии, как они это сделали с Turing в прошлом году.

Можно утверждать, что, поскольку RDNA 2 используется в Xbox Series X/S и PlayStation 5, разработчики игр будут отдавать предпочтение этой архитектуре для своих игровых движков. Но стоит просто вспомнить времена, когда GCN использовался в Xbox One и PlayStation 4, чтобы получить представление, как это, вероятно, будет происходить.

Первая версия, выпущенная в 2013 году, использовала графический процессор, построенный на архитектуре GCN 1.0, не появлявшийся в видеокартах для настольных ПК вплоть до следующего года. Xbox One X, выпущенный в 2017 году, использовал GCN 2.0, которому к тому времени было уже более 3 лет.

Так что же все игры, созданные для Xbox One или PS4, а затем портированные на ПК, по умолчанию лучше работали на видеокартах AMD? А вот и нет. Поэтому мы не можем предположить, что на этот раз с RDNA 2 все будет иначе, несмотря на впечатляющий набор функций.

Но все это в конечном итоге не имеет значения, поскольку оба графических процессора обладают исключительными возможностями и представляют собой чудо того, что может быть достигнуто в производстве полупроводников. NVIDIA и AMD предлагают разные инструменты, поскольку пытаются решать разные проблемы: Ampere стремится быть всем для всех, RDNA 2 только для игр.

На этот раз битва зашла в тупик, хотя каждый может претендовать на победу в определенной области. Войны ГП еще продолжатся в течение следующего года, когда в бой вступит новый участник: Intel со своей серией Xe. По крайней мере, нам не придется ждать еще два года, чтобы увидеть, как протекает эта борьба.

Подробнее..

IPhone 11 Pro Max против 12ProMax стоитли того новая камера

13.01.2021 12:17:24 | Автор: admin
iPhone 11 Pro Max слева, 12 Pro Max справаiPhone 11 Pro Max слева, 12 Pro Max справа

У нас были айфоны 11 и 12 Pro Max, шесть объективов, один лидар для оценки расстояния до предметов, две разных системы стабилизации, нейросети для постобработки фото и целая куча разнообразных условий съёмки. Не то, чтобы все это было категорически необходимо в тесте камер, но если уж начал сравнивать фотки, кделу надо подходить серьезно.


Ладно, шутки в сторону. Обычно айфоны покупают с прицелом на несколько лет. По производительности уних всегда здоровенный запас. Новое ПО исправно выходит и для старых моделей. Например, последнюю iOS14 можно поставить аж на iPhone6s, а ему уже пять лет. А по-настоящему большие прорывы в функциональности и внешнем виде смартфонов у Apple случаются только раз вчетыре года. Вот и получается, что единственная объективная причина сменить айфон предыдущего поколения на совсем новый это камера. Субъективных причин, конечно, может быть куча: начиная с размера дисплея, заканчивая дизайном.

Для справки: разница между производительностью iPhone 11 Pro Max и12 Pro Max вот наскриншоте. На цифрах заметная, но не кардинальная, и тем более совсем не критичная в реальных задачах. Афото я делаю каждый день и вижу разницу постоянно. При условии, что она есть, конечно. И вот в этом сейчас разберемся.

Разница на бумаге

Модули камер на обеих прошках похожи внешне там по три объектива и расположены они одинаково. Нона 12Pro Max они стали прямо здоровенными, а еще в уголке появилась крупная темная точка это лидар, который смартфон использует для фокусировки и создания боке в портретном режиме. И еще у двенашки на основной матрице пиксели крупнее, хотя разрешение тоже. Получается, сенсор в целом получает больше света, а это всегда хорошо.

Кроме того, изменили способ стабилизации изображения на основной камере. Теперь дрожание рук компенсируется не за счет смещения линз в объективе, а за счет движения матрицы относительно объектива.

iPhone 11 Pro Max

iPhone 12 Pro Max

Сверхширокоугольная

12Мпикс., f/2.4, 120, 13мм, 1/3,6"

12Мпикс., f/2.4, 120, 13мм, 1/3,6"

Широкоугольная

12Мпикс., f/1.8, 26мм, 1,4нм, оптическая стабилизация

12Мпикс., f/1.6, 26мм, 1,7нм, стабилизация матрицы

Телефото

12Мпикс., f/2.0, 52мм, 1/3,4", 1нм, оптическая стабилизация, оптический зум 2x

12 Мпикс., f/2.2, 65мм, 1/3,4", 1нм, оптическая стабилизация, оптический зум 2,5x

Плюс в12ProMax сильнее, чем раньше, используют нейросети для обработки данных, полученных с матриц всех камер. Это очень заметно на максимальном цифровом зуме секунду после получения таких снимков изображение шумит как январская вьюга, а потом бац! применяются фильтры,и артефактов как не бывало. Ну почти.

Кстати, в новых прошках после обновления доiOS14.3 появилась возможность снимать в режиме Apple Pro Raw. Это 12-битные файлы в формате Linear DNG (цифрового негатива). Но это все же не сырые данные в чистом виде, а как раз после применения алгоритмов Apple. Файлы DNG можно открыть вфоторедакторе, который поддерживает этот формат: Lightroom, Affinity Photo идругих. (Вот файл, если хотите поиграться.)

Разница в жизни

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

А вот кроп тех же фотографий.

При ярком свете разница уже совсем не такая драматическая. Конкретно этот снимок с красной тумбой получился лучше скорее даже у 11 Pro Max.

Или вот тоже искусственное освещение, но поярче. Фокус я везде выставлял на одних и тех же объектах.

А вот потемнее.

А еще закатные сумерки, пожалуйста.

И очень грозную кошку Биби.

И новогодние украшения в Братеевской пойме.

А вот как работает широкоугольный объектив. Аббераций по краям кадра стало меньше вертикальные линии теперь прямые.

На крупных планах заметно, как в 12 Pro Max подключается нейросеть и вытягивает текстуры, делая их резкими. Вообще айфоны теперь умеют распознавать не только котиков, человеческие лица, но еще и небо и, например, ткани.

Кстати, вот как нейросеть iPhone 12 Pro Max улучшает изображение на максимальном цифровом зуме.

А вот нейросеть подключается при съемке таймлапса вечером: распознает освещение и не подстраивает экспозицию так, как это происходило на предыдущих моделях. Закаты стало снимать проще.

И раз уж мы начали говорить о видео, то давайте сравним стабилизацию на обеих моделях. Напомню, что у 12ProMax картинка стабилизируется микродвижениями не оптики, а матрицы. На мой вкус чуть плавнее все же оптическая стабилизация.


Но вот область, где двенадцатая Прошка точно побьет одиннадцатую это режим портрета с размытием заднего фона, потому что с помощью лидара определять границы объектов проще, чем без него.

Причем 12 Pro Max научили размывать задний фон не весь целиком одинаково, а с градациями: чем дальше предметы от камеры, тем сильнее размытие.

И с объектами сложной формы теперь стало куда попроще. Конечно, все еще не без огрехов, но, во всяком случае, целые куски заднего плана не остаются не размытыми.

Так есть разница или нет?

На мой взгляд есть, но не такая, чтобы срочно бежать менять 11 Pro Max на 12 Pro Max. Да, вновом смартфоне есть лидар и нейросетка помощнее, да вечером и в темноте он снимает лучше, да вроде бы в целом меньше шума на однородных фонах. Но напомню, что разница в цене за модели с256ГБ памяти в российской рознице сейчас около 20 тыс. . Поэтому я бы поступал так: есть лишняя двадцатка берите новый. Решаете какой брать айфон, если переходите со старой модели берите сразу последний, он дольше будет актуален со всех точек зрения. А если у вас уже есть 11 Pro Max, просто расслабьтесь это по-прежнему очень крутая трубка с хорошей камерой.

Подробнее..

Перевод Что означает RISC и CISC?

14.02.2021 10:08:56 | Автор: admin

Многие говорят, что разница между RISC и CISC стала несущественной. Так ли это? И если нет, то в чем разница между современными RISC и CISC процессорами?

Компания Apple выпустила процессор Apple Silicon M1, который произвел фурор. Теперь вы можете задаться вопросом, чем он отличается от процессоров Intel и AMD? Вероятно, вы слышали, что M1 процессор с архитектурой ARM, а ARM это RISC, в отличие от Intel и AMD.

Если вы читали про разницу между микропроцессорами RISC и CISC, то вы знаете, что множество людей утверждают об отсутствии практической разницы между ними в современном мире. Но так ли это на самом деле?

Хорошо, сейчас вы немного запутались и хотите исчерпывающих ответов. Эта статья отличное начало.

Я разобрал сотни комментариев по этой теме и столько же написал в ответ. Некоторые из них были от инженеров, которые причастны к созданию этих микропроцессоров.

Я начну с базовых вещей, которые необходимо понять, прежде чем начать отвечать на интересующие вопросы о разнице RISC и CISC.

Вот темы, которые будут рассмотрены в данной статье:

  • Что такое микропроцессор?
  • Что такое архитектура набора команд (ISA)?
  • Зачем выбирать ISA?
  • В чем разница между наборами команд RISC и CISC?
  • Философия CISC.
  • Философия RISC.
  • Конвейеризация.
  • Архитектура Load / Store.
  • Сжатый набор инструкций.
  • Микрокод и микрокоманды.
  • Чем отличаются микрокоманды от инструкции RISC?
  • Гипертрединг (аппаратные потоки).
  • Действительно ли стоит различать RISC и CISC?

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

Что такое микропроцессор?


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

В общем случае процессор это мозг компьютера. Он читает инструкции из памяти, которые указывают, что делать компьютеру. Инструкции это просто числа, которые интерпретируются специальным образом.

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

Микропроцессоры (CPU) выполняют очень простые операции. Вот пример нескольких инструкций, которые выполняет процессор:

load r1, 150load r2, 200add r1, r2store r1, 310

Это человекочитаемая форма того, что должно быть просто списком чисел для компьютера. Например, load r1, 150 в обычном RISC микропроцессоре представляется в виде 32-битного числа. Это значит, что число представлено 32 символами, каждый из которых 0 или 1.

load в первой строчке перемещает содержимое ячейки памяти 150 в регистр r1. Оперативная память компьютера (RAM) это хранилище миллиардов чисел. Каждое число хранится по своему адресу, и так микропроцессор получает доступ к правильному числу.

Упрощенная диаграмма операций в микропроцессоре. Инструкции помещаются в регистр инструкций, где происходит декодирование. Декодер активирует нужные части процессора и операция выполняется.

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

Арифметический калькулятор Феликс. Русский механический калькулятор. Внизу виден аккумуляторный регистр, сохранявший до тринадцати десятичных знаков. Наверху входной регистр, вмещающий пять знаков. Слева внизу счетный регистр.

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

Аналогичное справедливо для микропроцессора. В нем есть множество регистров, которым даны имена например, A, B, C или r1, r2, r3, r4 и так далее. Инструкции микропроцессора обычно производят операции над этими регистрами.

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

В конце мы сохраняем полученный результат в оперативной памяти в ячейке с адресом 310 с помощью команды store r1, 310.

Что такое архитектура набора команд (ISA)?


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

Существует фиксированное количество команд, которые понимает процессор. И вы как программист не можете его расширить.

В мире представлено множество различных микропроцессоров, и они не используют одинаковый набор команд. Иными словами, они интерпретируют числа в инструкции по-разному.

Одна архитектура микропроцессора трактует число 501012 как add r10, r12, а другая архитектура как load r10, 12. Комбинация инструкций, которые понимает процессор, и регистров, которые ему доступны, называется архитектурой набора команды (Instruction Set Architecture, ISA).

Микропроцессоры, например, Intel и AMD, используют архитектуру набора команд x86. А микропроцессоры, например, A12, A13, A14 от Apple, понимают набор команд ARM. Теперь в список ARM-процессоров можно включить M1.

Это те микропроцессоры, которые мы называем Apple Silicon. Они используют архитектуру набора команд ARM, как и множество других микропроцессоров телефонов и планшетов. Даже игровые приставки, такие как Nintendo и самый быстрый суперкомпьютер, используют набор команд ARM.

Набор команд x86 и ARM не является взаимозаменяемым. Программа компилируется под определенный набор команд, если, конечно, это не JavaScript, Java, C# или что-то подобное. В этом случае программа компилируется в байт-код, который похож на набор команд для несуществующего процессора. Для запуска такого кода требуется Just-In-Time компилятор или интерпретатор, который транслирует байт-код в инструкции, понятные для микропроцессора в вашем компьютере.

Это значит, что большинство программ, доступных на Mac, не будут запускаться на Mac с M1. Программы рассчитаны на набор инструкций x86. Чтобы решить эту проблему, программы перекомпилируются с использованием нового набора инструкций. У Apple есть козырь в рукаве, который называется Rosetta 2. Это решение позволяет транслировать инструкции x86 в инструкции ARM.

Почему произошел переход на совершенно другой набор команд?


Закономерный вопрос. Зачем использовать новый набор команд для Mac? Почему Apple не могла использовать набор команд x86 в микропроцессорах Apple Silicon? Так бы отпала необходимость в перекомпиляции или трансляции с помощью Rosetta 2.

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

Второй важный момент заключается в лицензировании. Apple не может свободно создавать свои процессоры с набором команд x86. Это часть интеллектуальной собственности Intel, а Intel не хочет конкурентов. Для сравнения, компания ARM не производит собственных микропроцессоров. Они занимаются проектированием архитектуры набора команд и предоставляют эталонные образцы микропроцессоров, которые ее реализуют.

Таким образом, ARM делает то, что вы хотите. Этого хочет и Apple. Они хотят создавать собственные решения для компьютеров со специализированным оборудованием для машинного обучения, криптографии и распознавания лиц. Если вы используете x86, то вам придется делать это на внешних чипах. Из соображений эффективности Apple хочет сделать все на одной большой интегральной схеме, то есть на том, что мы называем системой на кристалле (System-On-a-Chip, SoC).

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

Материнская плата ПК, где графический ускоритель, сетевая карта и модули памяти подключаются через разъемы. Она слишком большая для планшетов и смартфонов, которые используют систему на кристалле.

Сейчас этот тренд наблюдается в ноутбуках, а чуть позже придет и к настольным ПК. Тесная интеграция оборудования дает повышенную производительность. Также негибкая система лицензирования x86 еще один минус.

Но давайте не будем отходить в сторону от главной темы. Архитектуры набора команд обычно следуют разным основополагающим философиям. Набор команд x86 это то, что мы называем архитектурой CISC, в то время как архитектура ARM следует принципам RISC. В этом заключается большая разница.

Инструкции CISC могут быть любой длины. Максимальная теоретическая длина инструкции x86 может быть бесконечной, но на практике не превышает 15 байт. Инструкции RISC имеют ограниченную длину.

В чем разница между набором команд RISC и CISC?


Аббревиатура CISC обозначает Complex Instruction Set Computer, а RISC Reduced Instruction Set Computer.

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

Минуем маркетинговую дезинформацию


Пол ДеМоне (Paul DeMone) написал статью в 2000 году, которая дает некоторое представление о существовавшем тогда маркетинговом давлении.

В 1987 году лучшим среди x86 был процессор Intel 386DX, а среди RISC MIPS R2000.

Несмотря на то, что процессор Intel имеет вдвое больше транзисторов (275 000 против 115 000 у MIPS) и вдвое больше кэш-памяти, процессор x86 проигрывает во всех тестах производительности.

Оба процессора работают на частоте 16 МГц, но RISC-процессор показывал результаты в 2-4 раза лучше.

Поэтому неудивительно, что в начале 90-х распространилась идея, что процессоры RISC значительно производительнее.

У Intel возникли проблемы с восприятием на рынке. Им было сложно убедить инвесторов и покупателей в том, что процессоры на устаревшей архитектуре CISC могут быть лучше процессоров RISC.

Так Intel стала позиционировать свои процессоры как RISC с простым декодером, который превращал команды CISC в команды RISC.

Таким образом, Intel выставила себя в очень привлекательном виде. Компания заявляла, что покупатель получает технологически совершенные процессоры RISC, которые понимают знакомый многим набор команд x86.

Давайте проясним один момент. Внутри процессора x86 нет RISC-составляющей. Это просто маркетинговый ход. Боб Колвеллс (Bob Colwells), один из создателей Intel Pentium Pro с RISC-составляющей, сам говорил об этом.

Теперь вы знаете, как эта ложь распространилась по интернету, да, Intel сделала удачный маркетинговый ход. Он сработал, потому что в нем есть доля правды. Но чтобы действительно понять разницу между RISC и CISC, вам нужно избавиться от этого мифа.

Мысль о том, что внутри CISC-процессора может быть RISC, только запутает вас.

Философия CISC


Давайте поговорим о том, что из себя представляют RISC и CISC. И то, и другое философия того, как нужно проектировать процессоры.

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

В конце 1970, когда началась разработка CISC-процессоров, память была очень дорогой. Компиляторы тоже были плохие, а люди писали на ассемблере.

Так как память была дорогой, люди искали способ минимизировать использование памяти. Одно из таких решений использовать сложные инструкции процессора, которые делают много действий.

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

Через некоторое время это стало сложным. Проектирование декодеров для таких команд стало существенной проблемой. Изначально ее решили с помощью микрокода.

В программировании повторяющийся код выносится в отдельные подпрограммы (функции), которые можно вызывать множество раз.

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

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

Микрокод хранится в ROM-памяти (Read-Only Memory, только для чтения), которая значительно дешевле оперативной памяти. Следовательно, уменьшение использования оперативной памяти через увеличение использования постоянной памяти выгодный компромисс.

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

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

Философия RISC


Оперативная память стала дешеветь, компиляторы стали лучше, а большинство разработчиков перестало писать на ассемблере.

Эти технологические изменения спровоцировали появление философии RISC.

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

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

Вы можете сказать, что здесь применимо правило 80/20: примерно 80% времени тратится на выполнение 20% инструкций.

Идея RISC заключается в замене сложных инструкций на комбинацию простых. Так не придется заниматься сложной отладкой микрокода. Вместо этого разработчики компилятора будут решать возникающие проблемы.

Есть разногласия в том, как понимать слово сокращенный (reduced) в аббревиатуре RISC. Люди думают, что сокращено количество инструкций. Но более правильная интерпретация это уменьшение сложности команд.

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

Одним из аргументов RISC было то, что люди перестали писать ассемблерный код, поэтому необходимо создать набор инструкций, удобный для компиляторов. Архитектура RISC оптимизирована для компиляторов, но не для людей.

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

Конвейеризация: инновация RISC


Еще одна основная идея RISC это конвейеризация. Для объяснения я проведу небольшую аналогию.

Представьте процесс покупки в продуктовом магазине. Хотя этот процесс отличается от страны к стране, я расскажу на примере родной Норвегии. Действия на кассе можно разделить на несколько шагов.

  1. Переместить покупки на конвейерную ленту и отсканировать штрих-коды на них.
  2. Использовать платежный терминал для оплаты.
  3. Положить оплаченное в сумку.

Хорошее векторное изображение, созданное на pch.vector (источник: www.freepik.com)

Если такое происходит без конвейеризации, то следующий покупать сможет переместить вещи на ленту только после того, как текущий покупатель заберет свои покупки. Аналогичное поведение изначально встречалось в CISC-процессорах, в которых по умолчанию нет конвейеризации.

Это неэффективно, так как следующий покупатель может начать использовать ленту, пока предыдущий кладет товар в сумку. Более того, даже платежный терминал можно использовать, пока человек собирает покупки. Получается, что ресурсы используются неэффективно.

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

Подключим конвейеризацию к данному процессу. Как только я начну работать с платежным терминалом, следующий за мной покупатель начнет выкладывать продукты на лету.

Как только я начну складывать продукты в сумку, следующий покупатель начнет работу с платежным терминалом. При этом третий покупатель начнет выкладывать покупки из корзины.

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

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

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

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

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

Проектировщики RISC прекрасно это понимали, поэтому попытались стандартизировать время выполнения каждой инструкции. Они разделены на этапы, каждый из которых выполняется примерно одинаковое количество времени. Таким образом, ресурсы внутри микропроцессора используются по максимуму.

Если рассмотреть ARM RISC-процессор, то мы обнаружим пятиступенчатый конвейер инструкций.

  • (Fetch) Извлечение инструкции из памяти и увеличение счетчика команд, чтобы извлечь следующую инструкцию в следующем такте.
  • (Decode) Декодирование инструкции определение, что эта инструкция делает. То есть активация необходимых для выполнения этой инструкции частей микропроцессора.
  • (Execute) Выполнение включает использование арифметико-логического устройства (АЛУ) или совершение сдвиговых операций.
  • (Memory) Доступ к памяти, если необходимо. Это то, что делает инструкция load.
  • (Write Back) Запись результатов в соответствующий регистр.

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

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

С инструкциями CISC все не так просто. Они могут быть разной длины. То есть без декодирования фрагмента инструкции нельзя узнать ее размер и где располагается следующая инструкция.

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

Конвейеризация это особенность, которая позволила первым RISC-процессорам на голову обогнать своих конкурентов в тестах производительности.

Складской робот как аналогия для конвейеризации. Использовалась в одной из моих новых статей.

В качестве альтернативного объяснения конвейеризации я написал историю, построенную на аналогии со складским роботом: Why Pipeline a Microprocessor?

Архитектура Load / Store


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

Например, в CISC может существовать инструкция, которая загружает данные из памяти, производит сложение, умножение, что-нибудь еще и записывает результат обратно в память.

В мире RISC такого быть не может. Операции типа сложения, сдвига и умножения выполняются только с регистрами. Они не имеют доступа к памяти.

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

Большое количество регистров


Большая проблема для RISC это упрощение инструкций, что ведет к увеличению их количества. Больше инструкций требуют больше памяти недорогой, но медленной. Если программа RISC потребляет больше памяти, чем программа CISC, то она будет медленнее, так как процессор будет постоянно ждать медленного чтения из памяти.

Проектировщики RISC сделали несколько замечаний, которые позволили решить эту проблему. Они заметили, что множество инструкций перемещают данные между памятью и регистрами, чтобы подготовиться к выполнению. Имея большое количество регистров, они смогли сократить количество обращений к памяти.

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

Инструкции в RISC проще. В них нет большого количества разных режимов адресации, поэтому, например, среди 32-битных команд есть больше бит, чтобы указать номер регистра.

Это очень важно. В процессоре с легкостью могут разместиться сотни регистров. Это не так сложно и не требует большого количества транзисторов. Проблема заключается в недостатке бит, указывающих адрес регистра. Так, например, в x86 есть только 3 бита для указания регистра. Это дает нам всего 23 = 8 регистров. Процессоры RISC экономят биты из-за меньшего количества способов адресации. Таким образом, для адресации используется 5 бит, что дает 25 = 32 регистра. Очевидно, что это пример и значения могут отличаться, но тенденция сохраняется.

Сжатый набор инструкций


Сжатый набор инструкций это относительно новая идея для мира RISC, созданная для решения проблемы большого потребления памяти, с которой не сталкиваются CISC-процессоры.

Поскольку эта идея нова, то ARM пришлось модернизировать ее под существующую архитектуру. А вот современный RISC-V специально проектировался под сжатый набор инструкций и потому поддерживает их с самого начала.

Это несколько переработанная идея CISC, так как CISC инструкции могут быть как очень короткими, так и очень длинными.

Процессоры RISC не могут добавить короткие инструкции, так как это усложняет работу конвейеров. Вместо этого проектировщики решили использовать сжатые инструкции.

Это означает, что подмножество наиболее часто используемых 32-битных инструкций помещается в 16-битные инструкции. Таким образом, когда процессор выбирает инструкцию, он может выбрать две инструкции.

Так, например, в RISC-V есть специальный флаг, который обозначает, сжатая это инструкция или нет. Если инструкция сжатая, то она будет разобрана в две отдельные 32-битные инструкции.

Это интересный момент, так как вся остальная часть микропроцессора работает как обычно. На вход подаются привычные однородные 32-битные инструкции, и все остальное работает предсказуемо.

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

Более того, сжатая инструкция имеет доступ только к 8 наиболее используемым регистрам, а не ко всем 32. Также я не смогу загрузить константы с большим числом или с большим адресом в памяти.

Таким образом, компилятор или сборщик должен решить, стоит ли упаковывать конкретную пару инструкций вместе или нет. Сборщик должен искать возможности для выполнения сжатия.

Хотя это все выглядит как CISC, это не он. Большая часть микропроцессора, конвейер команд и прочее используют 32-битные инструкции.

В ARM вам даже нужно переключать режим для выполнения сжатых инструкций. Сжатый набор инструкций на ARM называется Thumb. Это тоже сильно отличается от CISC. Вы не будете инициировать изменение режима для выполнения одной короткой инструкции.

Сжатые наборы инструкций изменили положение дел. Некоторые варианты RISC используют меньше байт, чем те же программы на x86.

Большие кэши


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

Идея кэширования заключается в том, что большинство программ запускают небольшую часть себя гораздо чаще, чем остальную часть. Часто небольшие части программы повторяются бесчисленное количество раз, например, в случае циклов.

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

Это была ранняя стратегия RISC, когда программы для RISC занимали больше места, чем программы для CISC. Поскольку процессоры RISC были проще, для их реализации требовалось меньше транзисторов. Это оставляло больше кремниевой площади, которую можно было потратить на другие вещи, например, для кэшей.

Таким образом, имея большие кэши, процессоры RISC компенсировали то, что их программы больше, чем программы RISC.

Однако со сжатием инструкций это уже не так.

CISC наносит ответный удар микрооперации


Конечно, CISC не сидел сложа руки и не ждал, когда RISC его повергнет. Intel и AMD разработали собственные стратегии по эмуляции хороших решений RISC.

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

Было принято решение сделать внутренности CISC-процессора более RISC-похожими. Способ, которым это было достигнуто, разбиение CISC-инструкции на более простые, названные микрооперациями.

Микрооперации, как инструкции RISC, легко конвейеризировать, потому что у них меньше зависимостей между друг другом и они выполняются за предсказуемое количество тактов.

Мое иллюстрированное руководство по микрооперациям: What the Heck is a Micro-Operation?

В чем различие микроопераций и микрокода?


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

На самом деле микрокод и микрооперации существуют бок о бок. В процессоре, который использует микрооперации, программы микрокода будут использоваться для генерации серии микроопераций, которые помещаются в конвейер для последующего выполнения.

Имейте в виду, что микрокод в традиционном CISC-процессоре должен производить декодирование и выполнение. По мере выполнения микрокод берет под свой контроль различные ресурсы процессора, такие как АЛУ, регистры и так далее.

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

Как микрооперации отличаются от RISC-инструкций


Это самое распространенное заблуждение. Люди думают, что микрооперации это то же самое, что и RISC-инструкции. Но это не так.

Инструкции RISC существуют на уровне набора команд. Это то, с чем работают компиляторы. Они думают о том, что вы хотите сделать, а мы пытаемся оптимизировать это.

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

Микрооперация это нечто совершенно иное. Микрооперации, как правило, большие. Они могут быть больше 100 бит. Неважно, насколько они большие, потому что они существуют временно. Это различает их от инструкций RISC, которые составляют программы и могут занимать гигабайты памяти. Инструкции не могут быть сколь угодно большими.

Микрооперации специфичны для каждой модели процессора. Каждый бит указывает часть процессора, которую необходимо включить или выключить при исполнении.

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

Таким образом, разные процессоры с одинаковым набором команд будут иметь разные микрокоды.

Фактически многие высокопроизводительные RISC-процессоры превращают инструкции в микрооперации. Это потому что микрооперации даже проще, чем инструкции RISC. Но использование микроопераций не является обязательным. Процессор ARM с меньшей производительностью может не использовать микрооперации, а процесс с более высокой производительностью и теми же инструкциями может использовать.

Преимущество RISC существует до сих пор. Набор инструкций CISC не проектировался для конвейеризации. Следовательно, разбиение этих инструкций на микрооперации сложная задача, которая не всегда решается эффективно. Перевод инструкций RISC в микрооперации обычно бывает более простым.

Фактически некоторые RISC-процессоры используют микрокод для некоторых инструкций, как CISC-процессоры. Одним из таких примеров является сохранение и восстановление состояния регистров при вызове подпрограмм. Когда одна программа переходит к другой подпрограмме для выполнения задачи, эта подпрограмма будет использовать некоторые регистры для локальных вычислений. Код, вызывающий подпрограмму, не хочет, чтобы его данные в регистрах изменялись случайным образом, поэтому он должен их сохранить в памяти.

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

Однако не все RISC процессоры делают это. Например, RISC-V пытается быть более чистым и не имеет специальной инструкции для этого. Команды RISC-V оптимизированы для конвейеризации. Более строгое следование философии RISC делает конвейеризацию более эффективной.

Гипертрединг (аппаратные потоки)


Еще один трюк, которая используется CISC, это гипертрединг.

Напомню, что микрооперации непростые. Конвейер команд не будет заполнен полностью на постоянной основе, как у RISC.

Поэтому используется трюк под названием гипертрединг. Процессор CISC берет несколько потоков инструкций. Каждый поток инструкций разбивается на части и конвертируется в микрооперации.

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

Эта стратегия актуальна и для RISC-процессоров, потому что не каждая инструкция может исполняться каждый такт. Доступ к памяти, например, занимает больше времени. Аналогично для сохранения и восстановления регистров с помощью сложной инструкции, которую предоставляют некоторые RISC-процессоры. В коде также есть переходы, которые вызывают пробелы в конвейере.

Следовательно, более продвинутые и производительные процессоры RISC, такие как IBM POWER, тоже будут использовать аппаратные потоки.

В моем понимании трюк с гипертредингом более выгоден для процессоров CISC. Создание микроопераций менее идеальный процесс, и он создает больше пробелов в конвейере, следовательно, гипертрединг дает больший прирост производительности.

Если ваш конвейер всегда заполнен, то от гипертрединга/аппаратных потоков нет никакой пользы.

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

Как правило, аппаратные потоки дают примерно 20% прирост производительности. То есть процессор с 5 ядрами и гипертредингом будет приблизительно похож на процессор с 6 ядрами без него. Но данное значение зависит во многом от архитектуры процессора.

В любом случае, это одна из причин, почему ряд производителей высокопроизводительных чипов ARM, таких как Ampere, выпускают 80-ядерный процессор без гипертрединга. Более того, я не уверен, что хоть какой-то процессор ARM использует аппаратные потоки.

Процессор Ampere используется в дата-центрах, где важна безопасность.

Действительно ли стоит различать RISC и CISC?


Да, в основе лежат принципиально разные философии. Это не так важно для высокопроизводительных чипов, поскольку у них такое же большое количество транзисторов и сложность разделения инструкций x86 затмевается всем остальным.

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

Некоторые характеристики RISC больше не имеют особого смысла. Наборы инструкций RISC не обязательно малы. Хотя это во многом зависит от того, как вы считаете.

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

Тем не менее, все еще существует минимальный набор основных инструкций, и это очень похоже на RISC:

  • фиксированный размер инструкции;
  • инструкции разработаны для использования определенных частей процессора и оптимизированы для конвейерной обработки;
  • архитектура Load/Store. Большинство инструкций работают с регистрами. Работа с памятью производится в основном с помощью специальных инструкций, созданных исключительно для этого;
  • множество регистров, чтобы избежать частого доступа к памяти.

Для сравнения, инструкции CISC могут быть переменной длины. Люди могут спорить, что микрооперации это стиль RISC, но микрокод это деталь реализации, близкая к аппаратной.

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

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

Хотя процессоры RISC с годами получили более специализированные инструкции, например, для векторной обратки, у них по-прежнему нет сложности с множеством режимов доступа к памяти как у CISC.

Источники и дополнительное чтение


Источники для этой статья я указывал в предыдущей статье.

Также отмечу следующие источники:



Подробнее..

Американский хип-хоп vs. Уильям Шекспир у кого словарный запас больше?

30.03.2021 20:09:12 | Автор: admin

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

Люди, далекие от хип-хопа, считают его низким жанром музыки. Но лингвисты провели исследование словарного запаса популярных американских исполнителей и оказалось, что английский язык в их текстах довольно разнообразен, а некоторые из них и вовсе оперируют словарным запасом, который сравним с Шекспировским.

Интересно? Тогда поехали!

Как это вообще: сравнивать лексикон рэперов с Шекспиром?

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

По исследованиям лингвистов из университета Стэнфорда, Уильям Шекспир использовал в своих произведениях 31 534 уникальных слов. А реальный словарный запас писателя по оценкам ученых составляет свыше 70 000 слов.

Для сравнения, средний словарный запас носителя английского с высшим образованием составляет около 25 0000-30 000 слов.

А средний словарный запас людей, которые изучают английский язык как иностранный, составляет примерно 8000 лексем.

Но сравнивать абсолютные величины текстов писателя и американских хип-хоперов нецелесообразно.

Понятно, что если сравнивать абсолютные цифры, то любой писатель победит. Объемы художественных произведений нельзя сравнивать с текстами хип-хоп треков. Их размеры отличаются на несколько порядков.

Но что если уравнять шансы и проанализировать одинаковое количество слов?

Сказано сделано.

Автор исследования взял суммарно 35 000 слов из разных произведений: Ромео и Джульетта, Отелло, Макбет, Как вам это понравится, Зимняя сказка, Троил и Крессида.

А потом взял 85 самых популярных хип-хоп исполнителей США и у каждого также выделил по 35 000 слов из их текстов. Как утверждает исследователь, этот объем покрывает примерно 3-5 студийных альбомов.

В качестве рабочего инструмента был использован токен-анализ, по которому отдельные словоформы считаются разными словами. То есть, pimps, pimp, pimping, and pimpin это четыре отдельных лексемы для анализа, а не одно прокачать.

Чтобы избежать дупликации смыслов со словоформами с апострофами (, к примеру, pimpin), они не засчитываются.

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

Результаты анализа получились очень интересными.

Хип-хоп и Шекспир: кто победит

Относительный объем лексики английского наше все из среза в 35 000 слов составил 5170 уникальных лексем.

И как оказалось, это далеко не лидирующая позиция. Почти каждый пятый из хип-хоперов в списке (18,8%) по итогам анализа текстов показал более высокие результаты.

Рэпер Xzibit, который знаком широкой публике больше по проекту Тачка на прокачку (Pimp my ride), к примеру, использовал 4 982 уникальных слова - почти на уровне с Шекспиром.

Уверенное первое место занял рэпер Эзоп Рок (Aesop Rock), который по мнению ресурса Betterpropaganda занимает 19 строку рейтинга топ-100 исполнителей десятилетия. В срезе он использовал 7392 уникальных слова.

Давайте посмотрим на один из самых популярных треков рэпера None shall pass.

Текст трека под спойлером

Flash that buttery gold

Jittery zeitgeist, wither by the watering hole, what a patrol

What are we to Heart Huckabee, art fuckery suddenly

Not enough young in his lung for the water wings

Colorfully vulgar poacher, out of mulch

Like, "I'mma pull the pulse out a soldier and bolt"

Fine, sign of the time we elapse

When a primate climb up a spine and attach

Eye for an eye, but the bog life swamps and vines

They get a rise out of frogs and flies

So when a dogfight's hog-tied prize sort of costs a life

The mouths water on a fork and knife

And the allure isn't right

No score on a war-torn beach

Where the cash cow's actually beef

Blood turns wine when it leak for police

Like, "That's not a riot; it's a feast, let's eat!"

And I will remember your name and face

On the day you are judged by the funhouse cast

And I will rejoice in your fall from grace

With a cane to the sky, like, "None shall pass"

None shall pass

None shall pass

Now, if you never had a day a snow cone couldn't fix

You wouldn't relate to the rogue vocoder blitz

How he spoke through a NoDoz motor on the fritz

'Cause he wouldn't play rollover fetch like a bitch

And express no regrets, though he isn't worth a homeowner's piss

To the jokers who pose by the glitz

Fine, sign of the swine in the swarm

When a king is a whore who comply and conform

Miles outside of the eye of the storm

With a siphon to lure out a prize and award

While avoiding the vile and bizarre that is violence and war

True blue triumph is more

Like, "Wait, let him snake up out of the centerfold

Let it break the walls of Jericho, ready, go"

Sat where the old, cardboard city folk

Swap tales with heads, like every other penny throw

And I will remember your name and face

On the day you are judged by the funhouse cast

And I will rejoice in your fall from grace

With a cane to the sky, like, "None shall pass"

None shall pass

None shall pass

You tried, you tried, you tried to trick me

You've got a, you've, you've got a, a lot of nerve

I'm, I'm not, I'm not, trying to trick you

I'm try, I'm try, I'm trying to help

Okay, woke to a grocery list, goes like this

Duty and death; anyone object, come stand in the way

You could be my little Snake River Canyon today

And I ran with a chain of commands

And a jetpack strapped where the backstab lands if it can

Fine, sign of the vibe in the crowd

When I cut a belly open to find what climb out

That's quite a bit of gusto he muster up

To make a dark horse rush, like, "Enough's enough!"

It must've struck a nerve so they huff and puff

'Til all the king's men fluster and clusterfuck

And it's a beautiful thing

To my people who keep an impressive wingspan

Even when the cubicle shrink

You got to pull up the intruder by the root of the weed

N.y. Chew through the machine

And I will remember your name and face

On the day you are judged by the funhouse cast

And I will rejoice in your fall from grace

With a cane to the sky, like, "None shall pass"

None shall pass

None shall pass

I'm try, I'm try, I'm trying to help

I'm try, I'm try, I'm trying to help

I'm try, I'm try, I'm trying to help

I'm try, I'm try, I'm trying to help

Help, help, help, help, help, help, help

Мы не будем касаться литературной ценности текстов и самой музыки, но вот лексика трека действительно широкая. Да, ее обширность во многом обеспечивается использованием сленговых слов, но при этом образы и метафоры не повторяются.

What are we, to heart Huckabee

Кто мы такие, чтобы любить Хакаби

Huckabee на сленге имеет довольно много значений. Одно из них к примеру, курительная смесь из марихуаны и табака. Также оно обозначает общее уничижительное название политиков из-за довольно неоднозначной политической передачи Huckabee, которую ведет политик Майк Хакаби. И при всем этом фраза отсылается на фильм I Heart Huckabees (Взломщики сердец).

Where the cash cows actually beef

Когда дойные коровы на самом деле говядина.

Интересный каламбур, который прямо переводится как: Когда дойные коровы на самом деле говядина. Но имеет еще второй смысл, ведь cash cow это еще и богатый человек, денежный мешок. Поэтому получается что-то вроде Когда богатые люди это расходный материал.

Плотность текста очень высокая и концентрация уникальных лексем тоже.

Интересно, что многие исполнители, которых считают легендами хип-хопа, в своих треках показывали довольно словарный запас значительно ниже медианы.

Lil Wayne, 2pac, Kanye West, Snoop Dogg все они находятся в 20% исполнителей со самым скудным словарным запасом.

Это никак не убирает их мощнейшее влияние на музыкальную сферу США и мира целиком, но по сравнению с тем же Эзопом Роком, лексически их тексты действительно более слабые.

И вполне возможно, это одна из причин их популярности.

Тупак, Канье или Снуп Дог передают многие метафоры через предельно простые языковые формы и словосочетания. А на заре развитие хип-хоп стиля слушателями такой музыки были преимущественно низшие слои населения с ограниченным словарным запасом, поэтому такая подача гарантировала, что тексты поймут и примут.

А вот тексты рэпера 50 Cent можно даже считать примитивными с лингвистической точки зрения. В срезе из 35 000 слов он использовал только 3591 уникальных лексем.

Давайте посмотрим на один из наиболее известных треков рэпера, который в свое время просто порвал мировые чарты Candy shop. Он создан в стиле грязного рэпа, в котором недвусмысленно поется о сексе. Метафоры и словарный запас здесь предельно простые, понятные даже самой непритязательной целевой аудитории.

Текст трека под спойлером:

[Olivia]

Welcome to the candy shop

[Intro: 50 Cent]

Yeah...

Uh huh

So seductive

[50 Cent]

I'll take you to the candy shop

I'll let you lick the lollipop

Go ahead, girl, don't you stop

Keep goin' 'til you hit the spot (whoa)

[Olivia]

I'll take you to the candy shop

Boy, one taste of what I got

I'll have you spending all you got

Keep goin' 'til you hit the spot (whoa)

[50 Cent]

You can have it your way, how do you want it?

You gon' back that thing up or should I push up on it?

Temperature rising, OK, let's go to the next level

Dance floor jam-packed, hot as a teakettle

I'll break it down for you now; baby, it's simple

If you be a nympho, I'll be a nympho

In the hotel or in the back of a rental

On the beach or in the park, it's whatever you into

Got the magic stick, I'm the love doctor

Have your friends teasin' you 'bout how sprung I gotcha

Wanna show me you can work it, baby?

No problem, get on top then get to bouncing round like a low rider

I'm a seasoned vet when it come to this shit

After you work up a sweat, you can play with the stick

I'm tryin' to explain, baby, the best way I can

I melt in your mouth, girl, not in your hands (ha ha)

[50 Cent]

I'll take you to the candy shop

I'll let you lick the lollipop

Go ahead, girl, don't you stop

Keep goin' 'til you hit the spot (whoa)

[Olivia]

I'll take you to the candy shop

Boy, one taste of what I got

I'll have you spending all you got

Keep goin' 'til you hit the spot (whoa)

[Bridge: 50 Cent & Olivia]

Girl, what we do (what we do)

And where we do (and where we do)

The things we do (things we do)

Are just between me and you (oh, yeah)

[Verse 2: 50 Cent]

Give it to me, baby, nice and slow

Climb on top, ride like you in the rodeo

You ain't never heard a sound like this before

'Cause I ain't never put it down like this

As soon as I come through the door, she get to pullin' on my zipper

It's like it's a race who can get undressed quicker

Isn't it ironic how erotic it is to watch them thongs?

Have me thinking 'bout that ass after I'm gone

I touch the right spot at the right time

Lights on or lights off, she like it from behind

So seductive, you should see the way she winds

Her hips in slow-mo on the floor when we grind

As long as she ain't stoppin', homie, I ain't stoppin'

Drippin' wet with sweat, man; it's on and poppin'

All my champagne campaign

Bottle after bottle, it's on

And we gon' sip 'til every bubble in the bottle is gone

[50 Cent]

I'll take you to the candy shop

I'll let you lick the lollipop

Go ahead, girl, don't you stop

Keep goin' 'til you hit the spot (whoa)

[Olivia]

I'll take you to the candy shop

Boy, one taste of what I got

I'll have you spending all you got

Keep goin' 'til you hit the spot (whoa)

[50 Cent]

I'll take you to the candy shop

I'll let you lick the lollipop

Go ahead, girl, don't you stop

Keep goin' 'til you hit the spot (whoa)

[Olivia]

I'll take you to the candy shop

Boy, one taste of what I got

I'll have you spending all you got

Keep goin' 'til you hit the spot (whoa)

Candy shop это кондитерская. Но на американском низком сленге оно еще и означает секс-шоп. По сути вся дальнейшая метафоризация построена вокруг этой двусмысленности.

Lick the lollipop облизать леденец, но в контексте абсолютно точно ясно, что имеется в виду под этим.

Но дальше и таких метафор нет, а все поется максимально примитивным разговорным языком:

Soon as I come through the door

she get to pullin on my zipper

Как только я переступаю порог,

Она расстегивает мне ширинку.

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

Да и вообще завуалированные и не очень треки про секс одна из топовых тематик американской музыкальной культуры. И очень многие исполнители попробовали в ней свои силы.

Интересно? Тогда смотрите видео Секс-подтекст в известных песнях.

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

East coast vc. West coast

Даже если вы далеки от рэпа и хип-хопа, то все равно слышали про Вест кост и Ист кост.

Исследователь сделал также анализ исполнителей по географии, чтобы оценить, хип-хоп исполнители в каких регионах обладают большим словарным запасом.

Исполнители из East Coast показали себя лучше остальных среднее количество использованных уникальных слов в их треках равно 4804. У West Coast 4411.

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

Но вот, к примеру, южане занимают в этом рейтинге низшие позиции: в среднем словарный запас Southern-рэперов 4268.

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

Это стиль музыки, в котором фразы солиста дублируются хором. При подсчете общего количество слов эти дубли идут в общее число анализируемых лексем, поэтому число уникальных слов снижается. Тем не менее еще одной причиной также является особая популярность в южных штатах гангста и грязного рэпа, которые тоже не отличаются богатством словарного запаса.

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

Для человека, который изучает английский как иностранный, читать Шекспира или слушать американский рэп это одинаково сложные занятия. Причудливые лексические конструкции или куча сленга в быстром речитативе та еще тренировка.

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

Онлайн-школа EnglishDom.com вдохновляем выучить английский через технологии и человеческую заботу

Только для читателей Хабра первый урок с преподавателем в интерактивном цифровом учебнике бесплатно! А при покупке занятий получите до 3 уроков в подарок!

Получи целый месяц премиум-подписки на приложение ED Words в подарок. Введи промокод march2021 на этой странице или прямо в приложении ED Words. Промокод действителен до 01.05.2021.

Наши продукты:

Подробнее..

Аккумуляторы против батареек

04.08.2020 22:11:12 | Автор: admin
Номинальное напряжение щелочных батареек 1.5 вольта, а номинальное напряжение NiMh-аккумуляторов 1.2 вольта, из-за этого многие думают, что аккумуляторы могут не работать в устройствах, предназначенных для работы от батареек. Я изучил, как меняется напряжение на батарейках и аккумуляторах при разрядке в разных режимах.

Для теста были использованы хорошие батарейки Lexman и аккумуляторы, использующие технологию Eneloop Fujitsu AA 2500 mah и IKEA LADDA AAA 900 mAh.




Для тестирования ёмкости и нагрузочной способности батарейки и аккумуляторы разряжались в трёх режимах:

Разряд постоянным током 200 мА. Такая нагрузка свойственна для электронных игрушек;
Разряд импульсами (10 секунд нагрузка, 20 секунд пауза) 2500 мА для батареек AA и 1000 мА для AAA. Такая нагрузка свойственна для мощных устройств;
Разряд в режиме постоянное сопротивление с начальным током 1000 мА. Этот режим эмулирует работу фонаря или устройств с электромоторами.

Измерение делались при разряде до напряжения 0.7 В.

Разряд постоянным током 200 мА



Отданная энергия:
AA: аккумулятор 2.97 Втч, батарейка 2.52 Втч;
AAA: аккумулятор 1.08 Втч, батарейка 1.00 Втч;

Аккумуляторы AA дают больше энергии на 15%, аккумуляторы AAA на 7%.

Хоть начальное напряжение на аккумуляторах ниже, уже после разряда на треть оно становится равно напряжению на батарейках. При разряде батареек на 10% напряжение падает до 1.4 В и дальше при разряде до 90% оно плавно падает до 1 В. Аккумуляторы ведут себя по-другому. При первых 30% разряда напряжение плавно падает с 1.4 до 1.2В, а дальше остаётся почти неизменным до тех пор, пока аккумулятор не разрядится на 90%, в последние 10% работы аккумулятора напряжение начинает падать до 1 В и ниже.

Разряд в режиме постоянное сопротивление с начальным током 1000 мА



Отданная энергия:
AA: аккумулятор 3.02 Втч, батарейка 1.55 Втч;
AAA: аккумулятор 1.08 Втч, батарейка 0.59 Втч;

При большой нагрузке аккумуляторы AA дают больше энергии на 49%, аккумуляторы AAA на 45%.

При такой нагрузке напряжение на батарейках уже после 1% разряда падает ниже напряжения на аккумуляторах!

Разряд импульсами 2500 мА (10 секунд нагрузка, 20 секунд пауза)



Отданная энергия: аккумулятор 2.61 Втч, батарейка 0.82 Втч;

При сверхвысокой нагрузке разница между батарейками и аккумуляторами становится ещё больше: аккумулятор даёт более, чем втрое больше энергии.

На графике хорошо видно, что напряжение под нагрузкой у аккумулятора выше с первой секунды разрядки.

Аккумулятор выдерживает гораздо большую нагрузку, поэтому разница напряжения при подаче и снятии нагрузки у него не велика (около 0.1 В), а у батарейки она достигает 0.5 В.

Разряд импульсами 1000 мА (10 секунд нагрузка, 20 секунд пауза)



Отданная энергия: аккумулятор 0.94 Втч, батарейка 0.50 Втч;

Точно такая же картина при разряде сверхбольшим током батареек и аккумуляторов ААА.
аккумулятор даёт почти вдвое больше энергии и напряжение на нём выше в течение всего разряда.


Из моих экспериментов можно сделать следующие выводы:

Аккумуляторы дают преимущества в любых режимах, но особенно большая разница наблюдается при питании мощной и сверхмощной нагрузки аккумулятор может давать в три и более раз больше энергии.
Несмотря на то, что номинальное напряжение у аккумуляторов меньше (1.2 В, а у батареек 1.5 В), фактически в процессе разряда оно становится больше, чем у батареек (с самого начала при большой нагрузке и приблизительно после трети разряда при маленькой).
Аккумуляторы не очень целесообразно использовать в устройствах с очень маленьким потреблением (часы, пульты), где батарейки меняются реже, чем раз в год.
В устройствах, батарейки в которых садятся чаще, чем раз в год, применение аккумуляторов даёт не только экономию, позволяет заботиться об экологии, но и обеспечивают более долгую работу без подзарядки (смены батареек).

2020, Алексей Надёжин
Подробнее..

Категории

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

  • Имя: Макс
    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