Основы мультиклеточной архитектуры - Примеры работы программ

Added by Alex_S about 5 years ago

Здравствуйте!
Интересная архитектура у процессора Мультиклет: интересное, многообещающее решение.

В различных документах можно встретить фразу вида «Мультиклеточное ядро аппаратно обеспечивает реализацию параллелизма на операторном уровне «естественным» образом, без решения задачи распараллеливания.».
Я прочел несколько статей, посмотрел документацию. Но у меня не получается до конца разобраться в вопросе почему не нужно решать задачу распараллеливания, как обходится этот момент (мне кажется, документации не хватает более детальных описаний и большего количества примеров).

Поясните, пожалуйста, как будут распараллелены операции гнезда циклов, например, такого:
for ( i = 1; i <= N; i++)
for ( j = 1; j <= N; j++)
a[ i ][ j ] = a[ i-1 ] [j ] + a[ i ][ j-1 ]

Хотелось бы какое-то высокоуровневое, концептуальное описание вычисления элементов массива «а»:
1. Как будут раздаваться операции клеткам, какие операции и в какой последовательности (как будет организован цикл)
2. Когда начнется исполнение
3. В каком порядке операции будут исполняться клетками
4. Как клетки будут взаимодействовать при исполнении этих операций (через память)
5. Как соблюдается порядок вычисления элементов массива «а», например, за счет чего вычисление и запись элемента a[ 1 ][ 2 ] не будет выполнено раньше, чем запись a[ 1 ][ 1 ].

Подобное описание значительно обогатило бы документацию. Иначе, многие ключевые моменты не понятны.

Спасибо.

PS Сейчас вспомнил, что от других тоже встречалbcm просьбы продемонстрировать работу системы на простом, рабочем примере. Кажется, это было и здесь: http://habrahabr.ru/post/163057/ - описан сложный пример, но не «жизненный»


Replies (11)

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by krufter_multiclet about 5 years ago

Добрый день!
На сайте в настоящий момент по первому процессору есть Вики страницы, в которых есть подробный разбор примеров программ http://multiclet.com/community/projects/examples/wiki. В ближайшее время этот раздел преобразую и появятся аналогичные пояснения и разбор примеров для второго мультиклеточного процессора R1 первой версии.
Кроме того уже сейчас написана подробная статья по мультиклеточной архитектуре для хабра, но пока нет разрешения на её публикацию. В статье подробно расписан весь механизм функционирования архитектуры и приведены примеры(найдутся ответы на большинство ваших вопросов). Следом за статьёй по архитектуре будет и статья по R1.
Как только статья будет опубликована напишу в этой теме ссылку.

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by Zveruga about 5 years ago

Alex_S в вашем примере, именно в том алгоритме каким его вы показали, параллелить особо нечего. Если хотите пример кода аналогичный вашему то смотрите описание команды exa в руководстве пользователя программного обеспечения процессоров P1 или R1. Там приведён код перемножения двух массивов. В вашем случае это код сложения двух массивов.

В приведённом вами коде можно параллелить только команды на организацию цикла. И они будут выполнены также параллельно как это делает процессор с архитектурой х86 используя конвейер. Отличие будет лишь в том, что архитектура х86 применяет интеллектуальный конвейер, а Мультиклет "самоорганизующийся". В результате затраты в Ваттах на исполнение приведённого кода на архитектуре Мультиклет должны быть меньше.

Если бы в вашем коде внутри цикла было несколько независимых вычислений, то они были бы исполнены настолько параллельно, сколько имеется клеток в процессоре. В настоящий момент это 4 клетки.

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

При этом ваш код подразумевает возможность параллельного исполнения, но в другом виде, который должен организовать сам программист.

Все вычисления в приведённом вами коде будут выполнены один за другим, так как алгоритм содержит вложенные циклы, итерации которых исполняются в Мультиклете друг за другом. Соответственно между итерациями будет гарантированное сохранение вычисленных значений в память.

На каждую итерацию в приведённом вами алгоритме при максимальной оптимизации теоретически должно уходить 3 такта. Непонятно только какие значения брать в строках и колонках матрицы выходящих за пределы матрицы, т. е. строки с номером 0 (i-1=0) и столбцы с номером 0 (j-1=0). Так как ваш алгоритм не подразумевает контроля над этим исключением, то результат может быть неожиданным.

Сколько тактов тратит Мультиклет между итерациями в приведённом вами алгоритме неизвестно.

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by krufter_multiclet almost 5 years ago

Подробная статья по архитектуре опубликована на хабре (восстановлена) http://habrahabr.ru/post/226773/

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by Zveruga almost 5 years ago

krufter, а почему вы про принтер новость не анонсировали?

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by krufter_multiclet almost 5 years ago

Как будет фото внутренностей принтера анонсируем. Просто не мы разрабатывали принтеры, а плат для принтера у разработчиков не осталось, чтобы фото сделать. Как новые принтеры соберут, так и сделают фото.

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by sprin almost 5 years ago

Здравствуйте.

По поводу статьи на хабре есть пара замечаний.

  1. в коде используется мнемоника: "mpy" и "mv". Может заменить на стандартные?
  2. Рис 2.: "add @3, @2" разве не должна быть растянута?

Drawing1_1_1.png (36.9 KB)

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by krufter_multiclet almost 5 years ago

1)Подскажите какие команды написать по стандартной мнемонике и заменим
2)Да, спасибо, поправим

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by sprin almost 5 years ago

Здравствуйте.

  1. Думаю лучше использовать более знакомые сокращения: "mul" и "mov". С другой стороны, если статья про multiclet, то может написать код на его ассемблере? (через "rd" и "wr"?)
  2. Вы как-то странно поправили рисунок, там ведь не учитывается время выполнения? только зависимости? Тогда, как у вас описано в статье, команды должны поступать по порядку от 0 до 3 устройства. (см мой рисунок)

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by krufter_multiclet almost 5 years ago

1. Да можно переделать под наш ассемблер.
2. Пока не понимаю, что не так. Команды распределяются по клеткам 0 - 3 по порядку.
У нас в примере параграф:

getl a
getl b
getl c
addl @3, @2
get e
sub @5, @3
get f
mull @4, @3
mull @3, @2
add @2, @1
setl #g, @1

По вашей картинке:

getl a
getl b
getl c
addl @3, @2
get e
sub @5, @3
get f

setl #g, @1

mull @4, @3
mull @3, @2
add @2, @1

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

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by sprin almost 5 years ago

krufter_multiclet wrote:

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

Здравствуйте.

Не знал про такую особенность. Т.е. есть буфер на 1 команду у каждой клетки? Что-то не видел таких сведений в руководстве пользователя.

Тогда один вопросик: почему у вас в текущем варианте на рисунке "mpy @4, @3" растянут на 2 клетки (ведь к началу времени t2 уже все данные есть)? (И получается растянулись и оставшиеся 2 команды.)

RE: Основы мультиклеточной архитектуры - Примеры работы программ - Added by krufter_multiclet almost 5 years ago

sprin wrote:

Не знал про такую особенность. Т.е. есть буфер на 1 команду у каждой клетки? Что-то не видел таких сведений в руководстве пользователя.

Буфер у каждой клетки на 64 команды.

Тогда один вопросик: почему у вас в текущем варианте на рисунке "mpy @4, @3" растянут на 2 клетки (ведь к началу времени t2 уже все данные есть)? (И получается растянулись и оставшиеся 2 команды.)

Это вы правильно заметили, сейчас поправим.

(1-11/11)