ALU на CPU и GPU: типы, особенности и принцип работы

ALU на CPU и GPU

ALU или известный на испанском языке как логикоарифметическая единица - это единицы внутри ЦП или GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР которые буквально отвечают за обработку чисел и, следовательно, отвечают за все математические вычисления, которые выполняются несколько миллиардов раз в секунду на наших ПК. Но как они работают, какие типы существуют и каковы секреты блоков ALU? Читай дальше что бы узнать.

Первый ALU, который был выпущен, был не частью процессора, а скорее микросхемой серии 7400 с интерфейсом TTL от Texas Instruments, 74181 был первым ALU, интегрированным в один кристалл. Он был только 4-битным и использовался в различных мини-компьютерах в 1960-х годах, что ознаменовало собой первый большой переходный период в вычислениях.

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

Типы ALU

SIMD Эскалар

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

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

Вторая категоризация относится к тому, сколько данных и инструкций ALU выполняет одновременно. Простейшей формой является скалярный ALU, в котором операция или инструкция выполняется операндом. У нас также есть SIMD или векторные блоки, которые одновременно выполняют одну и ту же инструкцию с разными операндами.

Типы операций с АЛУ

ALU сумма бинарных

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

ALU, который позволяет любому типу процессора, будь то CPU или GPU, выполнять математические операции с двоичными числами. Таким образом, это не что иное, как двоичный калькулятор, являющийся простейшим типом ALU, который позволяет складывать два числа по 1 бит каждое, что представляет собой следующую операцию:

Эксплуатация Результат буксировка
0 + 0 0 0
0 + 1 1 0
1 + 0 1 0
1 + 1 1 1

Если вы посмотрите на них, это спецификации логического элемента типа ИЛИ, но мы обнаружим проблему, которая должна переноситься при добавлении 1 + 1, поскольку результат сложения двоичного 1 + 1 равен 10, а не 1. Итак мы должны принять во внимание, что 1 в переносе, который мы переносим, ​​и поэтому простого логического элемента ИЛИ недостаточно, особенно если мы хотим работать с гораздо более высокой точностью в битах и, следовательно, иметь гораздо более сложный ALU по количеству бит.

Двоичное вычитание в ALU

ALU восстановление бинарного кода

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

А - В = А + НЕ (В) +1

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

Двоичное умножение и деление в степени 2

Демонтаж размножения ALU

Самая простая форма умножения в двоичной системе - это умножение на числа, кратные 2, поскольку это двоичная система, нам нужно только реализовать механизм, при котором входные данные сдвигаются на несколько позиций влево, если мы умножаем, или влево. . правильно, если мы разделяем. Количество позиций? Это зависит от индекса мощности 2 множителя, поэтому, если мы умножаем на 8, что составляет 2 ^ 3, тогда нам придется сдвинуть позиции числа 3 влево, а если он делит 3 позиции вправо. По этой причине ALU также интегрируют операции сдвига битов, которые являются основой для умножения или деления на кратные 2.

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

Умножение на две цифры без степени

Двоичное умножение ALU

В течение многих лет ALU были очень простыми и могли только складывать, поскольку в них не было ALU, предназначенных для умножения. Как они тогда выступали? Ну, выполнение нескольких сцепленных сумм, на что у них ушло много циклов. Исторически интересно, что одним из первых отечественных процессоров, оснащенных умножителем, был процессор Intel 8086.

Предположим, мы хотим умножить 25 на 25, когда мы были маленькими, мы сделали следующее:

  • Сначала мы умножаем 25 х 5 и записываем результат, который равен 125.
  • Во-вторых, мы умножаем 25 x 2, что дает нам 50, и мы записываем результат, но сдвигая на одну позицию влево.
  • Мы складываем оба числа, так как второе число сдвинуто влево, результат суммы будет не 175, а 625, что является результатом умножения 25 x 25 в десятичном виде.

Что ж, в двоичном формате процесс тот же, но число 25 в этом случае равно 11001 и, следовательно, 5-битное число. Итак, в двоичном формате мы собираемся умножить 11001 x 11001, и для этого нам придется использовать логические элементы AND.

  • Сначала умножаем 11001 x 1 = 11001
  • Во-вторых, умножаем 11001 x 0 = 0000, записываем результат на одну позицию слева.
  • В-третьих, умножаем 11001 x 0 = 0000, записываем результат двумя местами слева.
  • В-четвертых, умножаем 11001 х 1 = 11001, записываем результат на три знака слева
  • В-пятых, умножаем 11001 х 1 = 11001, записываем результат на четыре знака слева
  • С учетом позиции каждой операции добавляем результат, который в итоге не должен давать 01001110001

Более сложные математические операции

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

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

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

Откуда ALU получает данные для работы?

Учет

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

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

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

При этом объясняется, как работает ALU, по крайней мере, в общих чертах.