2010-09-26 3 views
8

Регистры - это самые быстрые воспоминания на компьютере. Так что, если мы хотим создать компьютер с только регистрами, и даже кэши это возможно? Я думаю, что даже замена магнитных дисков на регистры, хотя они, естественно, изменчивые воспоминания. У нас есть некоторые энергонезависимые регистры для этого использования? Это стало бы так быстро! Мне просто интересно, может ли это случиться или нет?Можем ли мы иметь компьютер с регистрами как память?

+0

Многие UC такие, без ОЗУ, просто регистрируются. – leppie

+0

Можете ли вы привести пример? – Kamran

+0

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

ответ

-1

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

+0

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

+0

Nevermind ..../facepalm – raicuandi

0

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

+0

Я думаю, что нам нужны воспоминания, машина Тьюринга даже нуждается в памяти для поддержания состояния машины, хотя я не знаю, как эта машина может быть реализована в реальном мире! – Kamran

0

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

Кроме того, что бы вы сделали с этим, что проблема с оперативной памятью (и даже с кешем процессора)? Либо запустите систему из ОЗУ (достаточно быстро), либо создайте специальный процессор.

+0

2 миллиарда регистров требует одно или более 31-битных регистров регистра в каждой инструкции. Я предлагаю, чтобы поле регистра представляло собой отдельное 32-битное слово вне базового кода операции. Я физически помещал регистры на отдельный чип или чипы.Очевидно, что это приведет к штрафу за производительность, поэтому у меня будет небольшой набор «ультра-регистров» на чипе процессора. – JeremyP

3

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

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

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

Были архитектуры с дополнительными банками регистров. (SPARC!)

1

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

1

для каждого регистра 32 бит вам нужно как минимум 9x32 ворот xor. это много ворот.

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

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

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

1024 бит = 1024 * 9 * 32 затвора и 1024 басовых линий в процессоре.

Мы знаем, что Intel работает с 30 нм для одного затвора. thats 30 миллионов ворот, проблемы с воротами более редкими, но как вы собираетесь решить проблему баса?

+0

* «Какой будет держать бас?» * Пол Маккартни? – JeremyP

+0

, не глядя в google или wiki, как называется барабанщик? – none

11

Очень короткий ответ Да, вы могли бы в теории, но на самом деле это не работает в реальной жизни. Позволь мне объяснить ...

Причины иерархия памяти существует потому, что эти маленьких и быстрая память хранит очень дорого за НЕМНОГО (регистров), в то время как больших и медленная память хранит очень дешевы в немного (жесткие диски).

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

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

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

Вы также можете быть заинтересованы в my answer to Assembly: Why are we bothering with registers?

+0

Отличный ответ - очень хорошо объяснил! –

1

Большинство из этих ответов адрес будет ли это практично. Дэвид Джонстон также упоминает тот факт, что имя регистра должно упоминаться в каждой инструкции, которая затрагивает его. В дополнение к этому, в большинстве современных наборов инструкций инструкция всегда имеет свои регистры операндов, закодированные в ней. Например. есть инструкция mov %eax, %ebx, и есть инструкция mov %eax, %ecx. Может случиться так, что их двоичное представление, как представляется, выглядит следующим образом:

| mov | source reg | dest reg | 
| 2 |  3  |  3 | 

и отличается только тем, что dest reg равно 3, а не 2 - но это также не может! (Я не проверял, как эти конкретные инструкции представлены в 386, но я помню, что в этом наборе инструкций есть инструкции, которые легко разбиваются на такие поля, а также примеры, где они отсутствуют.)

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

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

  • инструкции, которые касаются регистров на основе значения в некоторых другом регистра, например «Переместить из регистра X в регистр Y, где X и Y обозначены значениями в регистрах 1 и 2.», или
  • самомодифицирующийся код.

В школе у ​​нас был теоретический компьютер со 100 регистрами (плюс аккумулятор) и 10 инструкций, каждый из которых был трехзначным десятичным числом. Первая цифра указывала на операцию (загрузка, сохранение, арифметика, прыжок, условный переход, остановка) и два последних регистра для работы. На это можно было бы написать много примеров программ, таких как факториальная функция. Но вскоре стало очевидно, что статическая программа может работать только с фиксированным набором данных. Если вы хотите написать цикл для суммирования значений в списке, вам понадобится инструкция LOAD, указывающая на другой входной регистр на каждой итерации. Это означало, что вы каждый раз арифметически вычисляли новый код для инструкции нагрузки и исправляли код непосредственно перед запуском этой команды.

1

Современные графические процессоры имеют около 5 МБ регистров и очень мало кешей (по сравнению с процессорами). Так что да, возможно, есть процессор с большим количеством регистров.

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

Каждый поток GPU поглощает некоторые регистры - вся программа GPU распределяется по регистру - в результате тысячи потоков, которые могут выполнять/приостанавливать/возобновлять параллельно. Режимы используются для скрытия латентности памяти на графических процессорах, тогда как на процессорах для этой цели используются огромные кеши. Подумайте об этом, так как Hyper-Threading доведен до предела.

0

Горячий от теории rouncer оборудования пластинчатой>

Если вам удастся связать каждую перестановку битов адреса, чтобы отдельные слова - тогда вы могли бы иметь систему баран регистра. представьте, если вы используете nand для создания групп адресов. (другими словами, свяжите противоположность адреса с флопом). Один нет, и вы сделали адресацию только с проводами + небольшим переключателем, который может быть катушкой соленоида, которая не будет иметь значение. то каждый регистр или на один и тот же вывод - контакты содержания. И только адрес, который был прошлым, получит доступ к выводам вывода контента.

простые.