· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HEAP —› Про то как машина складывает!

Посл.отвђт Сообщенiе


Дата: Ноя 3, 2004 08:24:18

Известно, что машина складывает за 1 такт.
add eax,ebx, к примеру. Но ведь операция сложения это ведь и сдвиги!
Как же можно сложить, и при этом не сдвигая?


Дата: Ноя 3, 2004 10:00:29

Те бы про триггеры всякие почитать..
Сдвиг-то это в твоём понимании, что куда-то что-то двигается.
На самом деле ничего никуда не двигается.
Арифметические операции раскладывается на логические.
Cложение выполняется примерно так:
An     = S1n XOR S2n
Carryn = S1n AND S2n - перенос в старший разряд

Как учитывать перенос?
Складывать его параллельно с последующими разрядами изменив схему сумматора:

An     = S1n XOR S2n XOR Carryn-1
Carryn = ( S1n AND S2n ) OR ( S1n AND Carryn-1 ) OR ( S2n AND Carryn-1 )

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


Дата: Ноя 3, 2004 10:08:12

В свое время мне попалась книжка "Простейшая микроЭВМ",
авторов не помню, за 1986г?
Почитай, очень полезно.


Дата: Ноя 3, 2004 10:52:43

EvilsInterrupt
Если не очень понятно, то поищи в своих топиках ссылку на книгу C O D E, там Петцольд расписывает сложение на 15 страниц, и не менее подробно расписывает вычитание


Дата: Ноя 3, 2004 11:45:34

в том то и дело что триггеры я знаю! Само стоятельно собирал на К155 серии! Но все таки не понятно как это за 1 такт! Даже не просто не понятно, а я бы сказал поражает


Дата: Ноя 3, 2004 11:46:55

>An = S1n XOR S2n
вот его то я вчера и заметил. Но подумал что глючит


Дата: Ноя 3, 2004 13:30:18

EvilsInterrupt
> "Но все таки не понятно как это за 1 такт! Даже не просто не понятно, а я бы сказал поражает"

А что конкретно поражает, то что за 1 такт или то, что 1 такт на 3ГГц это 0.33нс ? Если первое, так это длительность такта выбирается исходя из задержки основных вычислительных и управляющих блоков, а не наоборот. Если второе, то основная причина задержки это перезаряд паразитных емкостей транзисторов и соединительных проводников. Не удивительно, что в процессорах за счет субмикронной ПП технологии и пониженного напряжениния питания удается на порядок уменьшить задержки по сравнению с дискретными элементами. Так что поражает скорее сама технология, нежели ее следствия.

Кстати, если заговорили о К155, то и у обычных ТТЛ-элементов есть скрытые возможности, которые использовались в экспериментальной физике для субнаносекундных измерений. К примеру, известно использование RS триггеров на ТТЛШ-элементах в приоритетных дискриминаторах задержки с временем разрешения очередности подачи сигналов менее 100 пс, т.е. входные цепи триггера реагируют на изменения сигналов за десятки пикосекунд, а вот выходные сигналы устанавливаются сравнительно долго - за единицы наносекунд.


Дата: Ноя 3, 2004 19:41:56

„А что конкретно поражает, то что за 1 такт или то, что 1 такт на 3ГГц это 0.33нс ?“

..а еще не стоит забывать что на P-4 АЛУ работает на удвоенной частоте процесоора...


Дата: Ноя 4, 2004 01:36:21

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

на самом деле машина не всегда прибавляет перенос от младшего разряда к старшему. числа делят на порции по 3-8 бит и суммирубт их как простые числа
получается n бит+1 перенос с каждой порции.
потом n бит складываются с битом переноса из младшей пары - тут сумматор вдвое быстрее так как надо сложить не бит А Б и перенос из младшего разряда, а только А и перенос.

плюс перенос в следующую часть числа производится (операцией И над всеми битами с предварительного сумматора и переносом из младшей группы бит) ИЛИ бит переноса из предварительного сумматора.


Дата: Ноя 4, 2004 01:57:30 · Поправил: Narkomanius

это я к чему? сложение малых чисел занимает ясен пень меньше времени, а переносы после них генерятся очень быстро не для каждого бита, а для групп битов.
2n*s против (2*b*s)+(f*n/b)+b*s
где s - задержка однобитного сумматора
b-колво бит в блоке
n-колво бит в слове
f-задержка быстрого переноса

для s=4 f=6 (примерно прикинул по колву пар МОП транзистров в цепочках) b=5

2*32*4=256
2*5*4+6*32/5+5*4=40+37+20=97
выигрыш в 2.5 раза.

для каждых s,n свое b оптимально, а f- функция от b так как приходится делать операцию И от b+1 сигналов


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


Дата: Ноя 4, 2004 09:13:44

flankerx > "..а еще не стоит забывать что на P-4 АЛУ работает на удвоенной частоте процесоора..."
Это верно, но только для моделей 0,1,2, которые не дотягивают до 3ГГц. А вот для 3 модели (F3n) согласно IA-32 Optimization задержки ADD\SUB\AND\OR\XOR составляют 1 такт, а не 0.5 как для модели 2 (F2n). Так что на сегодняшний день минимальная задержка сложения на P4 все-таки где-то в районе 0.20-0.25 нс.

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


Дата: Ноя 4, 2004 09:40:06

Может я не правильно понял вас, но кажется вы забыли. Что такт это 1 действие. Допустим 2+2. Если 5+5 то вам понадобиться два действия обнулить разряд единиц и учесть перенос. ТО есть 2 такта.
В справочнике я вижу что операция add reg,reg выполнится за 1 такт!
Каким макаром? Если там не мерено переносов может возникнуть!
ЗЫ:
Помнится мы проходили токой предмет, как Электронно Вычеслительные Машины. Так вот мы в ручную вычисляли и я точно помню, что в 4х разрядных числах к примеру 1010 и 1111, могло возникнуть хотя бы 1 перенос. Получается первым действием ты складываешь, вторым ты переносишь, перенос на кладывается. на возможную единицу в этом разряде, опять таки перенос.

И как тут за 1 такт? (может я не правильно считаю, что 1 такт это 1 действие?)


Дата: Ноя 4, 2004 09:59:58 · Поправил: leo

EvilsInterrupt
> "может я не правильно считаю, что 1 такт это 1 действие?"
Конечно не правильно. Один такт - это шаг синхронизации последовательных действий. А разные действия могут выполняться и за 0.5 такта и за несколько тактов. Суть в том, что многие простые действия выполняются аппаратно за одну микрооперацию. В случае с суммированием на АЛУ просто подаются два складываемых числа и код операции. И все - дальше электроны сами бегут куда им следует, за какое-то время все добегают и успокаиваются - значит результат готов и его можно забирать. А вот чтобы его забрать в нужное время и существует тактовая синхронизация, поэтому все задержки в мануалах приводятся в целых тактах (для P4 - 0.5 такта).

PS: Собственно сумматор - это чисто логическая схема без всяких триггеров. Каждый разряд результата это XOR соответствующих разрядов операндов и переноса - как расписал S_T_A_S_. Никаких шагов тут нет. В первое "мгновение" результат на выходе равен просто XOR двух операндов и какого-то мусора со схемы переноса и только младший разряд соответствует истинному результату. Но по мере того как "правильный" перенос "бежит" по своей схеме-цепочке биты результата корректируются и в итоге за время меньшее одного такта все выходные биты соответствуют истинному значению суммы.


Дата: Ноя 4, 2004 11:51:29

leo

ты прав, это я что-то привык. к синнхронизации!

Спасибо всем за изложенный материал! Но это не значит, что нужно прекратить его выкладывание, быть может у кого-то не возникнут вопросы или возникнут, но исчезнут согласно топу


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.094