Project

General

Profile

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

krufter_multiclet, 07/14/2014 09:55 AM

1 1 krufter_multiclet
h1. Реконфигурация
2 1 krufter_multiclet
3 16 krufter_multiclet
h2. +*Введение*+
4 2 krufter_multiclet
5 2 krufter_multiclet
*Мультиклеточное ядро* — это группа идентичных процессорных блоков(2 и более), объединенных полносвязной однонаправленной коммутационной средой.
6 2 krufter_multiclet
Процессорный блок в мультиклеточной архитектуре называется клеткой. Набор команд, который она может выполнять определяется конкретной реализацией и не зависит от архитектуры.
7 2 krufter_multiclet
8 2 krufter_multiclet
Т.к. код не зависит от количества клеток, которым он будет исполняться, появляется способность мультиклеточного ядра к распределению своих вычислительных ресурсов во время работы, при этом управление происходит программно.
9 2 krufter_multiclet
Способность мультиклеточной архитектуры перераспределять свои ресурсы мы называем — *реконфигурацией*. Например, клетки мультиклеточного ядра могут быть, как угодно распределены для выполнения какого-либо алгоритма или его части. Группа (лучше названия пока не придумали) — это часть клеток мультиклеточного ядра, которые связаны между собой для выполнения какого-либо алгоритма или части алгоритма. В группе может находиться 1 и более клеток. Когда мультиклеточное ядро разделяет группу на части — это называется декомпозиция. Процесс объединения в группу — композиция.
10 8 krufter_multiclet
!rcfg.jpg!
11 15 krufter_multiclet
На рисунке С0 - С3 это клетки. Картинка не совсем корректна, т.к. показаны трансформации не за один процесс реконфигурации.
12 15 krufter_multiclet
В ближайшее время поправлю.
13 5 krufter_multiclet
Больше теории по архитектуре можно почитать тут http://habrahabr.ru/post/226773/
14 2 krufter_multiclet
15 16 krufter_multiclet
h2. +*Теория*+
16 2 krufter_multiclet
17 3 krufter_multiclet
*Реконфигурация* — способность клеток процессора к композиции (сбор) и декомпозиции (разбор) по группам, т.е. возможность клеток объединяться в группы от одной клетки и до N(для N клеточного процессора) и выполнять свой участок кода. По умолчанию при старте любой программы все клетки находятся в одной группе. Стоит отметить, что у каждой группы появляется свой набор РОНов, индексных, управляющих регистров, можно назначить свой обработчик прерываний.
18 10 krufter_multiclet
19 10 krufter_multiclet
Для совершения операций по реконфигурации клеток используются два системных регистра: NEWADDR, ICR.
20 11 krufter_multiclet
Рассмотрим регистр *NEWADDR*:
21 10 krufter_multiclet
Регистр предназначен для формирования адреса перехода на следующий параграф для группы клеток.
22 10 krufter_multiclet
|номер бита|63...36|35|34|33|32|31...0|
23 10 krufter_multiclet
|описание|резерв|C0|C1|C2|C3|NEWADDR|
24 10 krufter_multiclet
25 10 krufter_multiclet
В битах C0-C3 необходимо отметить клетки группы для которых назначается адрес перехода.
26 10 krufter_multiclet
NEWADDR - адрес параграфа на который будет переход выбранной группы.
27 10 krufter_multiclet
28 11 krufter_multiclet
Рассмотрим регистр *ICR*:
29 1 krufter_multiclet
Регистр предназначен для формирования групп клеток.
30 1 krufter_multiclet
|номер бита|63...36|35|34|33|32|31...4|3|2|1|0|
31 11 krufter_multiclet
|описание|резерв|C0_Г|C1_Г|C2_Г|C3_Г|резерв|C0|C1|C2|C3|
32 11 krufter_multiclet
33 11 krufter_multiclet
В битах C0_Г - C3_Г необходимо отметить клетки формируемой группы.
34 11 krufter_multiclet
В битах С0 - С3 необходимо выставить соответствующим клеткам группы разрешение работы.
35 11 krufter_multiclet
36 11 krufter_multiclet
+Примечание:+ важно заметить, что если будет выставлена "1", например в поле C0_Г, а в поле С0 будет 
37 11 krufter_multiclet
установлено значение "0", то клетка будет полностью отключена до следующей перезагрузки процессора.
38 11 krufter_multiclet
Поэтому в большинстве случаев значение С0_Г - С3_Г совпадает со значение битов C0 - C3
39 11 krufter_multiclet
40 14 krufter_multiclet
+Реконфигурация в принципе состоит из двух при декомпозиции и трёх параграфов при композиции:+
41 13 krufter_multiclet
42 11 krufter_multiclet
1) В первом параграфе необходимо выставить в PSW биты 7,8 для группы клеток с которыми необходимо провести операции
43 11 krufter_multiclet
композиции и декомпозиции.
44 11 krufter_multiclet
- Бит 7 системного регистра PSW позволяет группе клеток заявить о готовности к реконфигурации.
45 11 krufter_multiclet
- Бит 8 системного регистра PSW запрещает выборку следующего параграфа, пока не выполняться команды текущего параграфа.
46 1 krufter_multiclet
47 14 krufter_multiclet
1+) При композиции необходимо сделать для группы которую мы присоединяем ещё один параграф без адреса перехода.
48 14 krufter_multiclet
49 14 krufter_multiclet
2)Во втором параграфе необходимо сформировать группы клеток и назначить адреса перехода для каждой новой группы. 
50 14 krufter_multiclet
51 14 krufter_multiclet
52 14 krufter_multiclet
Т.е. выбрали группу для реконфигурации, сформировали новые группы и задали адреса. Затем новые группы независимо друг от друга пойдут
53 14 krufter_multiclet
по своим параграфам. При это у каждой группы появится своя набор РОНов, управляющих регистров, обработчиков прерываний и т.д.
54 14 krufter_multiclet
Но при этом любая группа клеток может беспрепятственно обращаться к памяти или периферии.
55 1 krufter_multiclet
56 15 krufter_multiclet
+Декомпозиция+
57 15 krufter_multiclet
58 23 krufter_multiclet
Группы клеток могут быть разделены на новые группы. При этом у новых групп клеток будет свой набор РОНов, управляющих регистров, обработчиков прерываний и т.д, но значения РОНов, управляющих регистров сохранится от группы клеток от которой они отделились.
59 15 krufter_multiclet
60 14 krufter_multiclet
+Композиция+
61 14 krufter_multiclet
62 23 krufter_multiclet
Группы клеток могут быть объединены в новую группу. При этом у новой группы клеток будет полный набор РОНов, управляющих регистров, обработчиков прерываний и т.д. Но при этом значения РОНов, управляющих регистров, обработчиков прерываний и т.д. при сборке для разных клеток могут иметь разные значения. Поэтому после сборки в группу необходимо провести синхронизацию(проинициализировать новыми значениями, хотя данная процедура и не является обязательной) РОНов, управляющих регистров, обработчиков прерываний для того, чтобы не получать разные значения при считывании.
63 14 krufter_multiclet
64 16 krufter_multiclet
h2. *Особенности реконфигурации*
65 1 krufter_multiclet
66 1 krufter_multiclet
В первых двух ревизиях процессора R1 присутствуют некоторые особенности процесса реконфигурации:
67 1 krufter_multiclet
Запрещено за один процесс реконфигурации отделить часть клеток от одной группы и присоединить к другой.
68 1 krufter_multiclet
Т.е. сначала мы должны выделить из группы часть клеток в отдельную группу, а потом присоединить к другой.
69 16 krufter_multiclet
Но при этом разделить мы можем за одну реконфигурацию до 4 групп клеток, собрать также можем в одну группу до
70 16 krufter_multiclet
4-х отдельных групп(процессор R1 состоит из 4-х клеток).
71 23 krufter_multiclet
72 1 krufter_multiclet
73 20 krufter_multiclet
h2. +*Примеры*+ 
74 16 krufter_multiclet
75 16 krufter_multiclet
+Декомпозиция+
76 16 krufter_multiclet
77 16 krufter_multiclet
а)Для группы клеток, которую необходимо разделить мы выставляем биты 7,8 в PSW в состояние «1».
78 16 krufter_multiclet
79 16 krufter_multiclet
<pre><code class="xml">
80 16 krufter_multiclet
test:
81 16 krufter_multiclet
    getl #PSW
82 16 krufter_multiclet
    getl 0x180 ; 7,8 bits
83 16 krufter_multiclet
    or @1, @2
84 16 krufter_multiclet
    setl #PSW, @1
85 16 krufter_multiclet
    jmp reconf
86 16 krufter_multiclet
complete
87 16 krufter_multiclet
</code></pre>
88 16 krufter_multiclet
89 16 krufter_multiclet
б)Следующим параграфом после установки битов 7,8 в PSW должен быть параграф, формирующий новые значения регистра ICR(номер 63) и адреса перехода для новых групп клеток, который должен находиться в регистре NEWADDR(номер 60). Запись этих новых значений выполняется только при «1» в битах 7,8 PSW.
90 16 krufter_multiclet
В битах 35-32 значением «1» позиционно задается физический номер клетки, для которой предназначено новое значение регистра.
91 16 krufter_multiclet
92 16 krufter_multiclet
Например разбиение на две группы (для наглядности не будем оптимизировать параграф):
93 16 krufter_multiclet
<pre><code class="xml">
94 16 krufter_multiclet
reconf:
95 21 krufter_multiclet
    getl 0x8
96 21 krufter_multiclet
    patch @1, @1      ; формируем 64-х разрядное значение 0x800000008
97 1 krufter_multiclet
    setq #ICR, @1     ; 1000 установка в регистр группы
98 21 krufter_multiclet
    getl 0x7 
99 21 krufter_multiclet
    patch @1, @1      ; формируем 64-х разрядное значение 0x700000007
100 16 krufter_multiclet
    setq #ICR, @1     ; 0111 установка в регистр группы
101 16 krufter_multiclet
    getl 0x8
102 16 krufter_multiclet
    getl test_1000    ;имя параграфа с которого начнёт работу группа из одной клетки
103 16 krufter_multiclet
    patch @2, @1
104 16 krufter_multiclet
    setq #NEWADDR, @1 ; 1000+addr установка в регистр адреса следующего параграфа для группы
105 16 krufter_multiclet
    getl 0x7
106 16 krufter_multiclet
    getl test_0111    ;имя параграфа с которого начнёт работу группа из трёх клеток
107 16 krufter_multiclet
    patch @2, @1
108 16 krufter_multiclet
    setq #NEWADDR, @1 ; 0111+addr установка в регистр адреса следующего параграфа для группы
109 16 krufter_multiclet
complete
110 16 krufter_multiclet
</code></pre>
111 16 krufter_multiclet
112 16 krufter_multiclet
+Композиция+
113 16 krufter_multiclet
114 16 krufter_multiclet
а)В группах клеток, которые необходимо собрать мы выставляем в «1» биты 7,8 в PSW
115 16 krufter_multiclet
116 16 krufter_multiclet
<pre><code class="xml">
117 16 krufter_multiclet
pre_reconf_23: ; в группе которую подключаем метка может быть например pre_reconf_1     
118 16 krufter_multiclet
    getl #PSW
119 16 krufter_multiclet
    getl 0x180 ; 7,8 bits
120 16 krufter_multiclet
    or @1, @2
121 16 krufter_multiclet
    setl #PSW, @1
122 16 krufter_multiclet
    jmp reconf ; в группе которую подключаем будет jmp stop_1
123 16 krufter_multiclet
complete
124 16 krufter_multiclet
</code></pre>
125 16 krufter_multiclet
126 16 krufter_multiclet
б)Следующим параграфом, после установки битов 7,8 в PSW, в группе, которая подключается должен быть параграф без команды перехода, например:
127 16 krufter_multiclet
128 16 krufter_multiclet
<pre><code class="xml">
129 16 krufter_multiclet
 stop_1:
130 16 krufter_multiclet
    getl 0x123
131 16 krufter_multiclet
complete
132 16 krufter_multiclet
</code></pre>
133 16 krufter_multiclet
134 16 krufter_multiclet
в) В группе, к которой происходит подключение, должен быть  параграф с установкой новых групп, например к группе из двух клеток 2,3 подключается клетка 1:
135 16 krufter_multiclet
136 16 krufter_multiclet
<pre><code class="xml">
137 16 krufter_multiclet
reconf: 
138 22 krufter_multiclet
    getl 0x7
139 22 krufter_multiclet
    patch @1, @1 ; формируем 64-х разрядное значение 0x700000007
140 16 krufter_multiclet
    setq #63, @1 ; 0111 установка в регистр группы
141 16 krufter_multiclet
    getl 0x7
142 16 krufter_multiclet
    getl test_0111
143 16 krufter_multiclet
    patch @2, @1
144 16 krufter_multiclet
    setq #60, @1 ; 0111+addr установка в регистр адреса следующего параграфа для группы
145 16 krufter_multiclet
complete
146 16 krufter_multiclet
</code></pre>
147 16 krufter_multiclet
148 16 krufter_multiclet
После выполнения этого параграфа, клетки 1,2,3 образуют одну группу клеток, которая начнёт свою работу с параграфа test_0111.
149 14 krufter_multiclet
150 18 krufter_multiclet
h2. *Зачем нужна реконфигурация*
151 17 krufter_multiclet
152 17 krufter_multiclet
Иногда программа идет последовательно по шагам с зависимостями и в этом случае нет необходимости в 64-х клетках. Т.е. мы и сделали реконфигурацию для того, чтобы распределять вычислительные ресурсы. Десяток клеток на одну задачу, 15 на другую и так далее. В случае 64-х клеточного может быть до 64-х групп.
153 1 krufter_multiclet
154 1 krufter_multiclet
Примеры:
155 17 krufter_multiclet
 
156 21 krufter_multiclet
1)Работа диктофона. Пусть одна клетка занимается предварительной обработкой сигналов (для примера) фильтрация определенного вида. Две другие обрабатывают предыдущий сэмпл и распознавание речи, а ещё одна всё записывает во внешнюю память или периферией занимается.
157 17 krufter_multiclet
158 21 krufter_multiclet
2)Система управления скважинным водяным насосом частного дома. Одна клетка периодически опрашивает кнопки, обновляет индикацию и считывает показания датчика давления в магистрали. Три клетки стоят. Когда давление падает ниже критического уровня, основной поток запускает оставшиеся три клетки. Они начинают считать синусы для управления инвертором питания насоса. Это пример частотного управления в зависимости от давления. Если потребление воды упало, насос отключается, и три "счётных" клетки останавливаются.
159 21 krufter_multiclet
Т.е. программист сам решает, сколько задач (в пределах числа клеток) запустить, и с какой производительностью: нужно ли много задач, либо быстро считать, либо экономить электричество.
160 14 krufter_multiclet
161 14 krufter_multiclet
162 14 krufter_multiclet
163 14 krufter_multiclet
164 14 krufter_multiclet
165 14 krufter_multiclet
166 1 krufter_multiclet