Реконфигурация » History » Version 18
krufter_multiclet, 07/11/2014 05:36 PM
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 | 15 | krufter_multiclet | Группы клеток могут быть разделены на новые группы. При это у новых групп клеток будет свой набор РОНов, управляющих регистров, обработчиков прерываний и т.д, но значения РОНов, управляющих регистров сохранится от группы клеток от которой они отделились. |
59 | 15 | krufter_multiclet | |
60 | 14 | krufter_multiclet | +Композиция+ |
61 | 14 | krufter_multiclet | |
62 | 14 | krufter_multiclet | Группы клеток могут быть объединены в новую группу. При это те клетки, которые были присоединены к текущей группе из которой и проходил процесс |
63 | 14 | krufter_multiclet | композиции приобретут полный набор РОНов, управляющих регистров, обработчиков прерываний и т.д от группы клеток к которой они присоединились. |
64 | 14 | krufter_multiclet | |
65 | 16 | krufter_multiclet | h2. *Особенности реконфигурации* |
66 | 1 | krufter_multiclet | |
67 | 1 | krufter_multiclet | В первых двух ревизиях процессора R1 присутствуют некоторые особенности процесса реконфигурации: |
68 | 1 | krufter_multiclet | Запрещено за один процесс реконфигурации отделить часть клеток от одной группы и присоединить к другой. |
69 | 16 | krufter_multiclet | Т.е. сначала мы должны выделить из группы часть клеток в отдельную группу, а потом присоединить к другой. |
70 | 16 | krufter_multiclet | Но при этом разделить мы можем за одну реконфигурацию до 4 групп клеток, собрать также можем в одну группу до |
71 | 16 | krufter_multiclet | 4-х отдельных групп(процессор R1 состоит из 4-х клеток). |
72 | 1 | krufter_multiclet | |
73 | 16 | 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 | 16 | krufter_multiclet | getq 0x800000008 ; формируем 64-х разрядное значение 0x800000008 |
96 | 16 | krufter_multiclet | setq #ICR, @1 ; 1000 установка в регистр группы |
97 | 16 | krufter_multiclet | getq 0x700000007 ; формируем 64-х разрядное значение 0x700000007 |
98 | 16 | krufter_multiclet | setq #ICR, @1 ; 0111 установка в регистр группы |
99 | 16 | krufter_multiclet | getl 0x8 |
100 | 16 | krufter_multiclet | getl test_1000 ;имя параграфа с которого начнёт работу группа из одной клетки |
101 | 16 | krufter_multiclet | patch @2, @1 |
102 | 16 | krufter_multiclet | setq #NEWADDR, @1 ; 1000+addr установка в регистр адреса следующего параграфа для группы |
103 | 16 | krufter_multiclet | getl 0x7 |
104 | 16 | krufter_multiclet | getl test_0111 ;имя параграфа с которого начнёт работу группа из трёх клеток |
105 | 16 | krufter_multiclet | patch @2, @1 |
106 | 16 | krufter_multiclet | setq #NEWADDR, @1 ; 0111+addr установка в регистр адреса следующего параграфа для группы |
107 | 16 | krufter_multiclet | complete |
108 | 16 | krufter_multiclet | </code></pre> |
109 | 16 | krufter_multiclet | |
110 | 16 | krufter_multiclet | +Композиция+ |
111 | 16 | krufter_multiclet | |
112 | 16 | krufter_multiclet | а)В группах клеток, которые необходимо собрать мы выставляем в «1» биты 7,8 в PSW |
113 | 16 | krufter_multiclet | |
114 | 16 | krufter_multiclet | <pre><code class="xml"> |
115 | 16 | krufter_multiclet | pre_reconf_23: ; в группе которую подключаем метка может быть например pre_reconf_1 |
116 | 16 | krufter_multiclet | getl #PSW |
117 | 16 | krufter_multiclet | getl 0x180 ; 7,8 bits |
118 | 16 | krufter_multiclet | or @1, @2 |
119 | 16 | krufter_multiclet | setl #PSW, @1 |
120 | 16 | krufter_multiclet | jmp reconf ; в группе которую подключаем будет jmp stop_1 |
121 | 16 | krufter_multiclet | complete |
122 | 16 | krufter_multiclet | </code></pre> |
123 | 16 | krufter_multiclet | |
124 | 16 | krufter_multiclet | б)Следующим параграфом, после установки битов 7,8 в PSW, в группе, которая подключается должен быть параграф без команды перехода, например: |
125 | 16 | krufter_multiclet | |
126 | 16 | krufter_multiclet | <pre><code class="xml"> |
127 | 16 | krufter_multiclet | stop_1: |
128 | 16 | krufter_multiclet | getl 0x123 |
129 | 16 | krufter_multiclet | complete |
130 | 16 | krufter_multiclet | </code></pre> |
131 | 16 | krufter_multiclet | |
132 | 16 | krufter_multiclet | в) В группе, к которой происходит подключение, должен быть параграф с установкой новых групп, например к группе из двух клеток 2,3 подключается клетка 1: |
133 | 16 | krufter_multiclet | |
134 | 16 | krufter_multiclet | <pre><code class="xml"> |
135 | 16 | krufter_multiclet | reconf: |
136 | 16 | krufter_multiclet | getq 0x700000007 ; формируем 64-х разрядное значение 0x700000007 |
137 | 16 | krufter_multiclet | setq #63, @1 ; 0111 установка в регистр группы |
138 | 16 | krufter_multiclet | getl 0x7 |
139 | 16 | krufter_multiclet | getl test_0111 |
140 | 16 | krufter_multiclet | patch @2, @1 |
141 | 16 | krufter_multiclet | setq #60, @1 ; 0111+addr установка в регистр адреса следующего параграфа для группы |
142 | 16 | krufter_multiclet | complete |
143 | 16 | krufter_multiclet | </code></pre> |
144 | 16 | krufter_multiclet | |
145 | 16 | krufter_multiclet | После выполнения этого параграфа, клетки 1,2,3 образуют одну группу клеток, которая начнёт свою работу с параграфа test_0111. |
146 | 14 | krufter_multiclet | |
147 | 18 | krufter_multiclet | h2. *Зачем нужна реконфигурация* |
148 | 17 | krufter_multiclet | |
149 | 17 | krufter_multiclet | Иногда программа идет последовательно по шагам с зависимостями и в этом случае нет необходимости в 64-х клетках. Т.е. мы и сделали реконфигурацию для того, чтобы распределять вычислительные ресурсы. Десяток клеток на одну задачу, 15 на другую и так далее. В случае 64-х клеточного может быть до 64-х групп. |
150 | 17 | krufter_multiclet | |
151 | 17 | krufter_multiclet | Примеры: |
152 | 17 | krufter_multiclet | |
153 | 17 | krufter_multiclet | 1)Пусть одна клетка занимается преобработкой сигналов (для примера) там фильтрация какая-нибудь. Две другие обрабатывают предыдущий сэмпл, ну там распознавание речи, а ещё одна всё записывает во внешнею память или периферией занимается. Получается диктофон с записью в MP3. |
154 | 17 | krufter_multiclet | |
155 | 17 | krufter_multiclet | 2)Делаем, скажем, систему управления скважинным водяным насосом частного дома. Одна клетка периодически опрашивает кнопочки, обновляет индикацию и считывает показания датчика давления в магистрали. Три клетки стоят. Когда давление падает ниже критического уровня, основной поток запускает оставшиеся три клетки. Они начинают считать синусы для управления инвертором питания насоса. Вот вам частотное управление в зависимости от давления. Если потребление воды упало, насос отключается, и три "счётных" клетки останавливаются. |
156 | 17 | krufter_multiclet | Т.е. мы сами решаем, сколько задач (в пределах числа клеток) запустить, и с какой производительностью: нужно ли много задач, либо быстро считать, либо экономить электричество. |
157 | 14 | krufter_multiclet | |
158 | 14 | krufter_multiclet | |
159 | 14 | krufter_multiclet | |
160 | 14 | krufter_multiclet | |
161 | 14 | krufter_multiclet | |
162 | 14 | krufter_multiclet | |
163 | 14 | krufter_multiclet |