Project

General

Profile

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

« Previous - Version 18/23 (diff) - Next » - Current version
krufter_multiclet, 07/11/2014 05:36 PM


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

Введение

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

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

Теория

Реконфигурация — способность клеток процессора к композиции (сбор) и декомпозиции (разбор) по группам, т.е. возможность клеток объединяться в группы от одной клетки и до 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)Во втором параграфе необходимо сформировать группы клеток и назначить адреса перехода для каждой новой группы.

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

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

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

Композиция

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

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

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

Примеры

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

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

test:
    getl #PSW
    getl 0x180 ; 7,8 bits
    or @1, @2
    setl #PSW, @1
    jmp reconf
complete

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

Например разбиение на две группы (для наглядности не будем оптимизировать параграф):

reconf:
    getq 0x800000008  ; формируем 64-х разрядное значение 0x800000008
    setq #ICR, @1     ; 1000 установка в регистр группы
    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

Композиция

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

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

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

 stop_1:
    getl 0x123
complete

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

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

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

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

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

Примеры:

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

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