Готово
ядрышко (corelet).
Это совсем небольшой вычислительный узел, который самостоятельно может только выполнить программу до 64-х байт длиной и завершиться - по флагу условия или безусловно. Он умеет посылать сообщения и блокировать выполнение, если сообщение не может быть послано.
К нему есть
тест, позволяющий посмотреть на выполнение одной программы.
Теперь надо собрать большой ЦПУ из нескольких (начну с одного) ядрышек, к нему сортирующую ассоциативную память и подсистему обычной памяти, в которой будут храниться данные. Для подсистемы потребуется контроллер оной и сопроцессор, который умеет выполнять load/store, это сопроцессор 1 (loadstore). Для ассоциативной памяти с программами потребуется кэш программ. А для кэша потребуется сопроцессор 0 (proccontrol).
Вот оно и вырисовывается. ;)
Ну, и я повторю идею.
Я делаю машину динамического потока данных, с "улучшениями" в виде "сортировки по времени выполнения".
"Динамический поток данных" означает, что каждое вычисление программы имеет свой "тэг". Вычисления могут быть одновходовыми - смена знака, отрицание, - и двухвходовыми - сложение, вычитание, умножение. Одновходовое вычисление запускается при первой возможности. А вот двухвходовое вычисление запускается только тогда, когда в ассоциативной памяти присутствуют оба входа вычисления, левый и правый, с совпадающими тэгами.
Такой подход гарантирует, что мы можем выявить максимальный параллелизм программы.
"Сортировка по времени выполнения" означает, что ассоциативная память может принимать решение о сравнительной необходимости данных по их тэгам. Приоритет имеет "меньший" тэг, а тэги сравниваются по специальному значению Front (постоянно увеличивающийся счётчик), затем по маскированному побайтно значению Ключа и в последнюю очередь по PC. Для одного значения Front структура маски ключа должна быть одинакова.
"Сортировка" позволяет сделать уменьшение параллелизма до приемлемых для реализации размеров. Это так называемый
throttling. С его помощью предотвращают взрывное нарастание количества доступных одновременно вычислений.
"Сортировку" я назвал "улучшением" в кавычках потому, что я не знаю, насколько всё хорошо получится. В моём прототипе получалось неплохо, посмотрим, как и что будет на реальных задачах.
PS
Надо-таки сделать трансформацию в HDL-код. Попробую на неделе добраться.