Project

General

Profile

Реконфигурация » History » Version 21

Version 20 (krufter_multiclet, 07/11/2014 05:37 PM) → Version 21/23 (krufter_multiclet, 07/14/2014 09:37 AM)

h1. Реконфигурация

h2. +*Введение*+

*Мультиклеточное ядро* — это группа идентичных процессорных блоков(2 и более), объединенных полносвязной однонаправленной коммутационной средой.
Процессорный блок в мультиклеточной архитектуре называется клеткой. Набор команд, который она может выполнять определяется конкретной реализацией и не зависит от архитектуры.

Т.к. код не зависит от количества клеток, которым он будет исполняться, появляется способность мультиклеточного ядра к распределению своих вычислительных ресурсов во время работы, при этом управление происходит программно.
Способность мультиклеточной архитектуры перераспределять свои ресурсы мы называем — *реконфигурацией*. Например, клетки мультиклеточного ядра могут быть, как угодно распределены для выполнения какого-либо алгоритма или его части. Группа (лучше названия пока не придумали) — это часть клеток мультиклеточного ядра, которые связаны между собой для выполнения какого-либо алгоритма или части алгоритма. В группе может находиться 1 и более клеток. Когда мультиклеточное ядро разделяет группу на части — это называется декомпозиция. Процесс объединения в группу — композиция.
!rcfg.jpg!
На рисунке С0 - С3 это клетки. Картинка не совсем корректна, т.к. показаны трансформации не за один процесс реконфигурации.
В ближайшее время поправлю.
Больше теории по архитектуре можно почитать тут http://habrahabr.ru/post/226773/

h2. +*Теория*+

*Реконфигурация* — способность клеток процессора к композиции (сбор) и декомпозиции (разбор) по группам, т.е. возможность клеток объединяться в группы от одной клетки и до N(для N клеточного процессора) и выполнять свой участок кода. По умолчанию при старте любой программы все клетки находятся в одной группе. Стоит отметить, что у каждой группы появляется свой набор РОНов, индексных, управляющих регистров, можно назначить свой обработчик прерываний.

Для совершения операций по реконфигурации клеток используются два системных регистра: NEWADDR, ICR.
Рассмотрим регистр *NEWADDR*:
Регистр предназначен для формирования адреса перехода на следующий параграф для группы клеток.
|номер бита|63...36|35|34|33|32|31...0|
|описание|резерв|C0|C1|C2|C3|NEWADDR|

В битах C0-C3 необходимо отметить клетки группы для которых назначается адрес перехода.
NEWADDR - адрес параграфа на который будет переход выбранной группы.

Рассмотрим регистр *ICR*:
Регистр предназначен для формирования групп клеток.
|номер бита|63...36|35|34|33|32|31...4|3|2|1|0|
|описание|резерв|C0_Г|C1_Г|C2_Г|C3_Г|резерв|C0|C1|C2|C3|

В битах C0_Г - C3_Г необходимо отметить клетки формируемой группы.
В битах С0 - С3 необходимо выставить соответствующим клеткам группы разрешение работы.

+Примечание:+ важно заметить, что если будет выставлена "1", например в поле C0_Г, а в поле С0 будет
установлено значение "0", то клетка будет полностью отключена до следующей перезагрузки процессора.
Поэтому в большинстве случаев значение С0_Г - С3_Г совпадает со значение битов C0 - C3

+Реконфигурация в принципе состоит из двух при декомпозиции и трёх параграфов при композиции:+

1) В первом параграфе необходимо выставить в PSW биты 7,8 для группы клеток с которыми необходимо провести операции
композиции и декомпозиции.
- Бит 7 системного регистра PSW позволяет группе клеток заявить о готовности к реконфигурации.
- Бит 8 системного регистра PSW запрещает выборку следующего параграфа, пока не выполняться команды текущего параграфа.

1+) При композиции необходимо сделать для группы которую мы присоединяем ещё один параграф без адреса перехода.

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

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

+Декомпозиция+

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

+Композиция+

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

h2. *Особенности реконфигурации*

В первых двух ревизиях процессора R1 присутствуют некоторые особенности процесса реконфигурации:
Запрещено за один процесс реконфигурации отделить часть клеток от одной группы и присоединить к другой.
Т.е. сначала мы должны выделить из группы часть клеток в отдельную группу, а потом присоединить к другой.
Но при этом разделить мы можем за одну реконфигурацию до 4 групп клеток, собрать также можем в одну группу до
4-х отдельных групп(процессор R1 состоит из 4-х клеток).

h2. +*Примеры*+

+Декомпозиция+

а)Для группы клеток, которую необходимо разделить мы выставляем биты 7,8 в PSW в состояние «1».

<pre><code class="xml">
test:
getl #PSW
getl 0x180 ; 7,8 bits
or @1, @2
setl #PSW, @1
jmp reconf
complete
</code></pre>

б)Следующим параграфом после установки битов 7,8 в PSW должен быть параграф, формирующий новые значения регистра ICR(номер 63) и адреса перехода для новых групп клеток, который должен находиться в регистре NEWADDR(номер 60). Запись этих новых значений выполняется только при «1» в битах 7,8 PSW.
В битах 35-32 значением «1» позиционно задается физический номер клетки, для которой предназначено новое значение регистра.

Например разбиение на две группы (для наглядности не будем оптимизировать параграф):
<pre><code class="xml">
reconf:
getl 0x8
patch @1, @1
getq 0x800000008 ; формируем 64-х разрядное значение 0x800000008
setq #ICR, @1 ; 1000 установка в регистр группы
getl 0x7
patch @1, @1
getq 0x700000007 ; формируем 64-х разрядное значение 0x700000007
setq #ICR, @1 ; 0111 установка в регистр группы
getl 0x8
getl test_1000 ;имя параграфа с которого начнёт работу группа из одной клетки
patch @2, @1
setq #NEWADDR, @1 ; 1000+addr установка в регистр адреса следующего параграфа для группы
getl 0x7
getl test_0111 ;имя параграфа с которого начнёт работу группа из трёх клеток
patch @2, @1
setq #NEWADDR, @1 ; 0111+addr установка в регистр адреса следующего параграфа для группы
complete
</code></pre>

+Композиция+

а)В группах клеток, которые необходимо собрать мы выставляем в «1» биты 7,8 в PSW

<pre><code class="xml">
pre_reconf_23: ; в группе которую подключаем метка может быть например pre_reconf_1
getl #PSW
getl 0x180 ; 7,8 bits
or @1, @2
setl #PSW, @1
jmp reconf ; в группе которую подключаем будет jmp stop_1
complete
</code></pre>

б)Следующим параграфом, после установки битов 7,8 в PSW, в группе, которая подключается должен быть параграф без команды перехода, например:

<pre><code class="xml">
stop_1:
getl 0x123
complete
</code></pre>

в) В группе, к которой происходит подключение, должен быть параграф с установкой новых групп, например к группе из двух клеток 2,3 подключается клетка 1:

<pre><code class="xml">
reconf:
getq 0x700000007 ; формируем 64-х разрядное значение 0x700000007
setq #63, @1 ; 0111 установка в регистр группы
getl 0x7
getl test_0111
patch @2, @1
setq #60, @1 ; 0111+addr установка в регистр адреса следующего параграфа для группы
complete
</code></pre>

После выполнения этого параграфа, клетки 1,2,3 образуют одну группу клеток, которая начнёт свою работу с параграфа test_0111.

h2. *Зачем нужна реконфигурация*

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

Примеры:

1)Работа диктофона. Пусть 1)Пусть одна клетка занимается предварительной обработкой преобработкой сигналов (для примера) там фильтрация определенного вида. какая-нибудь. Две другие обрабатывают предыдущий сэмпл и сэмпл, ну там распознавание речи, а ещё одна всё записывает во внешнюю внешнею память или периферией занимается. Получается диктофон с записью в MP3.

2)Система 2)Делаем, скажем, систему управления скважинным водяным насосом частного дома. Одна клетка периодически опрашивает кнопки, кнопочки, обновляет индикацию и считывает показания датчика давления в магистрали. Три клетки стоят. Когда давление падает ниже критического уровня, основной поток запускает оставшиеся три клетки. Они начинают считать синусы для управления инвертором питания насоса. Это пример частотного управления Вот вам частотное управление в зависимости от давления. Если потребление воды упало, насос отключается, и три "счётных" клетки останавливаются.
Т.е. программист сам решает, мы сами решаем, сколько задач (в пределах числа клеток) запустить, и с какой производительностью: нужно ли много задач, либо быстро считать, либо экономить электричество.