Несколько идей на будущее
Сколько надо стеков?
Много стеков - признак плохого тона :-) Почему не сделать два стека
как в Форте? Потому, что стек - локальное последовательное устройство
(а) и в основном он, сдерживает парараллелизм процессора. Можно назвать
два ограничения стека:
- доступность только вершины стека
- полоса пропускания памяти стека
Распространённый подход к распараллеливанию стека - предоставление доступа
к нескольким верхним ячейкам стека (б). Решение заимствовано из теории RISC
процессоров и явлется грубым отходом от стековой архитектуры. Команды
перестают быть нульоперандными и
начинают расти с ростом регистрового файла вершины. Кроме того
данный подход не снимает второго ограничения и узким местом становится
полоса пропускания памяти стека. Сколько бы ни было параллельно
работающих устройств сохранение и востановление вершины занимает
много тактов.
Предложен другой подход (в). Тот же объём намяти стека разбит на четыре
банка. К ним локально примыкает по два регистра как в простой схеме
стека и по одному устройству. Получается четыре локализованных
кластера (группы). Основна задача программиста равномерно распределить
работу и данные между кластерами. Пиковая пропускная способность
такой схемы в четыре раза больше, она проще аппаратно, из за отсуствия
многопортовых регистровых файлов.
Данные в поле кода
Так как формат команды предполагает строгое деление на ортогональные
части для отдельных устройств встаёт вопрос: "где взть непосредственные
данные" (адреса вызова или перехода, длинные литералы). Действительно
в набор команд некоторых кластеров входт короткие литералы, но есть
необходимость в длинных 32-разрдных данных. Предложен следующий вариант:
На вершине стека D хранится базовое значение фрейма данных в памяти
данных, а в поле команды присуствует короткий литерал - смещение.
Если подпрограмма содержит непосредственные данные: литералы и адреса
ветвлени, то следует хранить в этом локальном фрейме данных. Тем самым,
достигается эффект однозначного восстановлениЯ текста из кода. Кроме
того, контекст выполения подпрограммы задаётся перед её вызовом передачей
одного из возможных указателей на фреймы данных.
Стеки и параллельные вычисления
Для полноценной работы параллельного процессора требуется некая среда
оперативного взаимодействия (например регистровый файл). Может ли стек
являться такой средой? Увы, стек последовательной устройство. Несколько
стеков - другое дело! Вопрос: как соединить несколько исполнительных
устройств и несколько стеков?
1. VLIW и стеки
Отталкиваясь от класической Фишеровской архитектуры VLIW, процессор
строится из кластеров, каждый из которых содержит память (в нашем случае
стек) и исполнительного устройства. Каждый кластер получает своё поле
из общей, сверх длинной команды и взаимодействует с другими кластерами
через сеть.
2. TTA и стеки
В TTA команда управляет не устройствами, а самой коммутационной средой.
Сколько шин, столько и полей в командном слове. Подкоманда говорит "что с чем"
соединить. В данном случае все устройства равноправны и на коммутационном
поле набирается в каком порядке соединить какие устройства. В качестве
устройства выступают регистры, регистровые файлы, а следовательно могут
выступать и стеки. Коммутационная среда проще в такой архитектуре, команда
уже не сверх-длинная а просто длинная.
3. sTTAck - гибрид TTA и Stack
Достоинство стековой машины в простоте системы команд. Действительно
0-операндные вычисления компактны в записи и элементарны по сути.
Введение дополнительной коммутационной среды, рушит эту простоту.
Стек - это не просто метод хранения данных, это определённая иерархия.
Объект только что попавший в стек имеет наивысший приоритет (он на вершине).
Обычно доступен ещё один, редко несколько элекентов на равне, а дальше?
Дальше элементысохраняются в отдельном блоке памяти, дальше в основной
памяти (или вобще теряются). Чтобы не нарушить этой стройной иерархии
построим над вершиной стека ещё один уровень!!!!!! Да! это коммутационная
среда, где данные ещё более оперативны, они не задерживаются вообще. Стек
в любой момент может являться источником или потребителем своего участка
сети. Получается решётка Стеки / Устройства. На пересечении находится
коммутационная среда. Число полей в команде сответствует числу пар
стек/шина.