СПОСОБ КОДИРОВАНИЯ И ИСПОЛНЕНИЯ КОНТЕКСТНО-ЗАВИСИМОЙ ПРОГРАММЫ МУЛЬТИКЛЕТОЧНЫМ ПРОЦЕССОРОМ, МУЛЬТИКЛЕТОЧНЫЙ ПРОЦЕССОР, КЛЕТКА И КОММУТАЦИОННОЕ УСТРОЙСТВО МУЛЬТИКЛЕТОЧНОГО ПРОЦЕССОРА ДЛЯ ОСУЩЕСТВЛЕНИЯ СПОСОБА
METHOD OF ENCODING AND USING CONTEXT-SENSITIVE PROGRAM USING MULTICELLULAR PROCESSOR, MULTICELLULAR PROCESSOR, CELL AND MULTICELLULAR PROCESSOR SWITCHING DEVICE FOR IMPLEMENTING SAID METHOD

Заявляемая группа изобретений относится к вычислительной технике и может быть использована при построении высокопроизводительных и энергоэффективных параллельных вычислительных систем.
Функционирование любой вычислительной системы определяется программой или совокупностью программ, каждая из которых задает последовательность операций, выполняемых соответствующим процессором (процессорным устройством), входящим в состав данной системы. Программа состоит из организованного множества информационно связанных команд, размещенных в определенном порядке в памяти системы и содержащих закодированные указания процессору (машинный код) о выполнении требуемых операций.
Являясь частью содержимого памяти, команда представлена в ней в виде командного слова - непрерывной последовательности одноразрядных элементов памяти, занимающей часть ячейки (минимального адресуемого участка памяти), либо целую ячейку, либо несколько ячеек памяти. Состояние элементов памяти командного слова определяет выполняемую операцию и используемые при этом операнды.
Каждая команда форматирована, т.е. имеет определенную структуру, в соответствии с которой ее командное слово логически разделено на несколько частей (полей). В этих полях кодируются: выполняемая операция; операнды (номера регистров, адреса ячеек памяти, номера каналов ввода/вывода и т.п.), используемые данной операцией, а также служебная информация.
Определение содержательной составляющей команд, а именно операции и операндов, с использованием которых она должна быть выполнена, а также кодирование программы, включающее организацию множества команд в единое целое, размещение их в памяти и кодирование в соответствии с существующим форматированием, осуществляются в процессе программирования. Как правило, для этой цели используют разнообразные средства программирования, реализованные на вычислительных системах общего назначения (компьютерах), которые обеспечивают либо запись алгоритма решаемой задачи на языке высокого уровня, например, С, C++, Фортран и т.п., с последующей компиляцией на машинно-ориентированный язык ассемблера, либо непосредственное программирование на языке ассемблера.
Как известно, язык ассемблера - это система обозначений, используемая для представления в удобочитаемой форме программ, записанных в машинном коде. Программа на языке ассемблера транслируется ассемблером, также реализованном на компьютере, непосредственно в машинный код, который затем записывается в память вычислительной системы каким-либо известным способом с помощью устройства.
В зависимости от выбранных средств программирования кодирование программы выполняется в процессе компиляции (в случае использования языков высокого уровня) либо непосредственно программистом при написании программы на языке ассемблера.
Результат выполнения процессором любой команды выражается в изменении состояния ряда устройств процессора и/или системы (регистров, шин, ячеек памяти, каналов ввода/вывода и т.д.). Использование этого нового состояния последующими исполняемыми командами образует информационную связь между командами-источниками результата и командами-приемниками этого результата. Эта информационная связь может быть как непосредственной (прямой), так и опосредованной (косвенной).
В случае прямой информационной связи команды именуются, при этом имена должны идентифицировать собственно команду, а не ее местоположение или другие особенности реализации. Доступ к результатам может быть осуществлен по именам как команд-источников, так и команд-приемников. В первом случае используют широковещательную рассылку с последующим поименным отбором, при которой в поле операнда команды-приемника задают имя команды-источника. Во втором случае выполняется поименная рассылка, при которой в команде-источнике задают имя команды-приемника результата.
При косвенной информационной связи между командами результат доступен только после его отчуждения, а именно после записи его командой-источником в общедоступные регистры и/или память, имя которых при использовании задают в поле операнда команды-приемника, или в какие-то другие устройства процессора и/или вычислительной системы, доступ к которым имеют только конкретные команды-приемники. Например, при адресной рассылке результат записывается по указанным в команде-источнике адресам памяти, в которых находятся команды-приемники, и в указанное поле этих команд.
Используемые виды информационной связи между командами и характер доступа к результатам являются ключевыми факторами, определяющими архитектурную модель процессора. Именно они определяют не только способы кодирования программ, но также способы и устройства их исполнения.
Из уровня техники известен целый ряд процессорных устройств, использующих косвенную информационную связь, но отличающихся друг от друга характером доступа к результатам и, соответственно, архитектурной моделью (см. Цилькер Б.Я., Орлов С.А. Организация ЭВМ и систем: Учебник для ВУЗов (изд: 2) - СПб.: Питер, 2011). К данным устройствам можно отнести фон-неймановские, потоковые и редукционные процессоры.
На базе фон-неймановской модели построены все коммерчески успешные процессоры. В ее основе лежит общедоступность результатов и, как следствие, решение процессором определенной задачи достигается пошаговым целенаправленным изменением состояния вычислительной системы. Этот процесс изменения состояний является результатом исполнения последовательности команд строго в заданном порядке, который определяют в процессе программирования.
Функционально фон-неймановский процессор включает устройство управления, исполнительные устройства, устройство ввода/вывода. Устройство управления осуществляет выборку команды из памяти, ее декодирование и передачу соответствующему исполнительному устройству или устройству ввода/вывода, которые исполняют полученную команду. При этом возможны два способа выборки: принудительный и естественный.
Принудительный способ выборки не предусматривает каких-либо ограничений на размещение команд в памяти, но требует, чтобы в каждом командном слове было выделено поле, в которое должен быть записан адрес следующей исполняемой команды.
При наиболее распространенном естественном способе выборки команды размещаются в памяти последовательно, одна за другой, в том порядке, в котором предполагается их исполнение. Поле с адресом последующей исполняемой команды используется только в командах передачи управления, когда необходимо перейти после завершения исполнения одной выполняемой последовательности команд к другой.
Для осуществления естественного способа выборки устройство управления содержит специальный регистр, так называемый «счетчик команд». После записи программы в память в счетчик команд записывается адрес первой исполняемой команды программы. Устройство управления считывает из памяти команду, адрес которой находится в счетчике команд, и помещает ее в регистр команд. Команда декодируется, т.е. определяется выполняемая операция и подготавливаются операнды, после чего она передается на исполнение. Если выбранная команда не является командой перехода, то значение счетчика команд увеличивается на длину выбранной команды, выраженную в единицах адресации, и процесс повторяется. Если была выбрана команда перехода, то вычисляется адрес перехода и его значение записывается в счетчик команд, после чего выборка и исполнение команд начинаются с данного адреса.
Как правило, все варианты фон-неймановской модели направлены на решение одной и той же задачи, а именно на повышение производительности процессора, но решают они ее разными способами.
Например, в конвейерных процессорах совмещают выполнение команд во времени при использовании одного исполнительного устройства. В RISC процессорах  сокращают количество функций, реализуемых командой, и, следовательно, время выполнения одной команды. В CISC процессорах увеличивают объем функций выполняемых одной командой и, соответственно, время, но при этом уменьшают общее количество выполняемых команд.
За счет совмещения выполнения команд в пространстве, т.е. на нескольких исполнительных устройствах, обеспечивается повышение производительности суперскалярных процессоров и процессоров со сверхдлинным командным словом (VLIW процессоры). При этом в суперскалярных процессорах задача распределения потока команд по нескольким исполнительным устройствам решается, преимущественно, аппаратным способом, а в VLIW процессорах - программным, во время компиляции.
В конкретных реализациях эти и другие способы могут сочетаться. В частности, RISC и CISC процессоры обычно имеют конвейерную организацию, но отличаются друг от друга длиной конвейера. Конвейер также широко используют для сокращения времени выполнения потока команд, поступающих к исполнительному устройству в суперскалярных процессорах. Наиболее совершенные способы организации конвейера не только реализуют совмещение выполнения потока команд во времени, но и обеспечивают переупорядочивание команд в конвейере для устранения конфликтов по данным между ступенями конвейера. В этом случае команда в конвейере выполняется не по очередности, а по готовности.
Известны две схемы, осуществляющие такое переупорядочивание команд. Это схема централизованного окна команд и распределенная схема Томасуло.
Следует отметить, что ни использование методов распараллеливания в суперскалярных или в VLIW процессорах, ни методов переупорядочивания команд в конвейере, которые меняют очередность исполнения команд, не отменяют ключевого принципа фон-неймановской модели - упорядоченного изменения состояния процессора. Вне зависимости от очередности исполнения команд формируемые ими состояния процессора меняются в той последовательности, в которой эти команды были выбраны из памяти, а не исполнены.
Несмотря на разнообразие реализации, все процессорные устройства, использующие фон-неймановскую модель архитектуры, имеют один общий недостаток.
Этот недостаток обусловлен необходимостью решения сложной задачи распараллеливания для организации параллельной работы как внутри процессора при наличии нескольких однотипных исполнительных устройств, так и при использовании многоядерных процессоров или многопроцессорной вычислительной системы.
В потоковом процессоре используют адресную рассылку результатов, при которой полученный результат рассылается по адресам всех команд-приемников. Типичная команда потокового процессора, например, двухместная арифметическая операция, содержит, как правило, код операции, поля операндов, поле адреса команды, которой передается результат выполненной операции, и поле номера операнда, в котором он будет размещен. Команда выбирается и выполняется «по готовности операндов», т.е. тогда, когда ею будут получены все результаты выполнения других команд, необходимые для ее выполнения. Таким образом, команды в программе могут быть размещены произвольным образом. Принцип исполнения команд потокового процессора «по готовности операндов» позволяет реализовать параллелизм «естественным» образом, т.е. без необходимости решения задачи распараллеливания, но требует для этого использования специальных языков программирования (языков с однократным присваиванием), а также, по сравнению с фон-неймановской моделью, приводит к резкому увеличению затрат на пересылку операндов и выполнению лишних вычислений.
Многочисленные попытки модифицирования архитектуры потоковых процессоров приводили к решению локальных проблем, не изменяя сути данного метода. Например, ввод тегов для обеспечения реентерабельности подпрограмм или для параллельного выполнения различных итераций цикла является виртуальным расширением адреса («адрес» & «тег»), но не сменой парадигмы.
Учитывая большой объем существующего в настоящее время программного обеспечения, написанного на традиционных императивных языках, необходимость использования языков с однократным присваиванием для программирования потоковых процессоров делает их применение экономически нецелесообразным.
Редукционная модель процессора также использует адресную связь между командами, но она задается указанием в поле операнда команды-приемника адреса команды-источника, которую необходимо выполнить для получения требуемого результата. В этом случае команды выбираются из памяти и исполняются «по запросу команды». Такая модель принципиально не имеет лишних вычислений и также позволяет отказаться от упорядоченности команд, которые могут быть размещены в памяти произвольным образом.
Как и потоковая, редукционная модель обеспечивает «естественную» реализацию параллелизма, но также требует применения для программирования специальных языков, а именно языков функционального программирования. Это требование, как и аналогичное требование к потоковой модели, не позволяет использовать существующее программное обеспечение, что делает использование редукционных процессоров экономически невыгодным. Следует также отметить, что выборка команд «по запросу» ограничивает возможности совмещения по времени процессов выборки и исполнения команд и, как следствие, их параллельную реализацию.
Разноплановость преимуществ, присущих разным моделям, привела к созданию процессорных моделей, сочетающих различные способы реализации параллелизма и управления вычислительным процессом. Наиболее известные из них - это макропотоковые, и их развитие - гиперпотоковые процессоры.
В макропотоковых моделях исполнение «по готовности» относится не к одной команде, а к последовательности из нескольких команд, называемых нитью (thread). При этом последовательность команд в пределах нити статична и определена при компиляции, при этом характер ее выполнения фон-неймановский. Как правило, для этого используют конвейерную организацию. Порядок обработки нитей зависит от их готовности и меняется динамически в процессе вычислений.
Известны две формы макропотоковой обработки: без блокирования и с блокированием. В модели без блокирования выполнение нити начинается только после получения всех необходимых данных. При этом выполнение нити не прерывается, она выполняется до конца без остановки. В варианте с блокированием выполнение нити может быть начато до получения всех операндов, при этом, когда требуется отсутствующий операнд, выполнение нити приостанавливается (блокируется). Процессор запоминает всю необходимую информацию о состоянии такой заблокированной нити и начинает выполнение другой готовой нити. После получения отсутствующего операнда и завершения выполнения текущей нити выполнение блокированной нити возобновляется. Модель с блокированием обеспечивает более полную загрузку исполнительных устройств за счет использования механизма блокировки и, как следствие, возможности формирования длинных нитей.
Гиперпотоковые модели эмулируют работу нескольких логических процессоров на одном вычислительном ядре. При этом в процессе компиляции формируются такие последовательности команд, которые процессор мог бы обрабатывать параллельно, занимая исполнительные устройства, не занятые одним из потоков, подходящими командами из другого независимого потока. Это принципиальное отличие гиперпотоковых моделей от макропотоковых. При этом характер выполнения потока логическим процессором - фон-неймановский, а управление исполнением потоков осуществляется с помощью операционной системы.
Сочетанием применяемых методов отличается и известный проект процессора TRIPS (см. "The Distributed Microarchitecture of the TRIPS Prototype Processor," K. Sankaralingam, R. Nagarajan, P. Gratz, R. Desikan, D. Gulati, H. Hanson, C. Kirn, H. Liu, N. Ranganathan, S. Sethumadhavan, S. Sharif, P. Shivakumar, W. Yoder, R. McDonald, S.W. Keckler, and D.C. Burger, 39th International Symposium on Microarchitecture (MICRO), December, 2006), архитектуру которого авторы относят к EDGE-архитектуре - явного исполнения графа потока данных. Процессор TRIPS имеет два функциональных блока, каждый из которых является фактически VLIW процессором, содержащим 16 (4×4) 64-разрядных арифметико-логических устройств (АЛУ) с плавающей точкой и управляемым потоком данных. От традиционного потокового процессора они отличаются тем, что команды загружаются во все АЛУ одновременно, но процесс их выполнения такой же, как в потоковом процессоре - асинхронный, по готовности операндов.
Разные методы используют и в известной синергической вычислительной системе - синпьютере, который, как и процессор TRIPS, имеет асинхронную организацию, но в отличие от него состоит из множества идентичных, функционально полных вычислительных устройств, объединенных коммутационной средой, обеспечивающей обмен результатами между ними (см. патент РФ №2179333 на изобретение «Синергетическая вычислительная система», дата подачи 13.06.2000 г., опубликовано 10.02.2002 г.). Для программирования синпьютера алгоритм рассматривают как совокупность формул, представленных в ярусно-параллельной форме, а именно в виде ациклического ориентированного графа, вершины которого взаимно-однозначно соответствуют используемым в формуле величинам и операциям, а дуги соответствуют и отражают направление информационных связей между ними. При этом вершины распределены по ярусам (подмножествам) так, что вершины одного яруса непосредственно не связаны друг с другом, а ярусы пронумерованы таким образом, что вершины-источники всегда размещены на вышележащем ярусе, имеющем номер меньше.
Местоположение любого узла ярусно-параллельной формы задается парой чисел (i,k), где: i - номер яруса (строки); k - номер узла в ярусе (столбца).
В общем случае, для выполнения операций, расположенных на i-ом ярусе, могут использоваться результаты, полученные на ярусах от 1-го до (i-1)-го. В синергической вычислительной системе эта возможность ограничена следующим образом:
для выполнения операций на i-ом ярусе используются только результаты (i-1)-го яруса;
если для выполнения операции на i-ом ярусе нужен результат с яруса j, где 1≤j<(i-1), то на ярусе j+1 этот результат запоминается в регистровой или оперативной памяти, а на ярусе i-1 читается.
Это ограничение позволяет исключить из указания источника результата номер яруса. Источник однозначно задается номером узла в предшествующем ярусе и, таким образом, для кодирования двухместных операций достаточно двух полей операндов, содержащих номера узлов источников, результаты которых используют в качестве аргументов при выполнении данной операции. Например, в таблице 1 приведена программа синпьютера для вычисления формулы g=e*(a+b)+(a-c)/f.
Таблица 1
Номер яруса
Номер узла
1
2
3
4
1
чт а
чт b
чт с
2
+1,2
чт e
-1,3
чт f
3
*1,2
/3,4
4
+1,2
5
зп 1,g
В синпьютере последовательность описаний операций одного узла является упорядоченной последовательностью команд, выполняемых вычислительным устройством с соответствующим номером. При этом операции одного яруса, в принципе, могут размещаться произвольно - в любом узле. На них не накладывают требование упорядоченности. Возможность неупорядоченного размещения команд в одном ярусе упрощает решение задачи распараллеливания, но не позволяет реализовать параллелизм «естественным» путем.
Каждое вычислительное устройство состоит из памяти программ, памяти данных, блока регистров общего назначения и процессора, включающего устройство управления и несколько попарно связанных буферных и исполнительных устройств.
Устройство управления реализует классическую фон-неймановскую схему выбора команд, т.е. их последовательность определяется счетчиком команд. Буферные устройства обеспечивают хранение выбранных команд до получения всех операндов и передачу готовых команд на исполнение. Исполнительные устройства выполняют готовые команды и передают их результат в коммутационную среду.
В процессе выборки команд устройства управления всех вычислительных устройств согласованно выбирают команды очередного яруса и присваивают им значения тегов, равные последовательному номеру выбранного яруса. Декодируют выбранные команды и, при необходимости, формируют заявку коммутационной среде на необходимые им результаты вычислительных устройств, полученные при выполнении команд предыдущего яруса, указывая коммутационной среде номер тега предыдущего яруса и номера вычислительных устройств, после чего записывают выбранную команду в буферное устройство. Выбор буферного устройства определяется выполняемой операцией. Затем формируют новое значение счетчика команд, и процесс выборки повторяется.
В буферном устройстве команда будет находиться до тех пор, пока не будет сформирована, а именно пока коммутационная среда не получит и не передаст в буфер все запрошенные при выборке данной команды результаты.
Процесс формирования команд инициализируется поступлением в коммутатор очередного результата. При этом коммутационная среда по тегу результата проверяет наличие заявок на данный результат от данного вычислительного устройства. Если заявки есть, то результат передается в буферные устройства соответствующих вычислительных устройств, которые записывают его в поля операндов тех команд, которые его запрашивали.
Процесс исполнения команды и рассылки результатов инициализируется, если в буферном устройстве есть хотя бы одна команда, у которой получены все операнды (исполнение «по готовности») и которая не является последней выбранной командой, кроме команды остановки. При этом если готовых к исполнению команд несколько, то на исполнение передается команда, которая из них была выбрана первой. Исполнительное устройство выполняет команду и выдает в коммутатор ее результат вместе с тегом команды.
Завершается или приостанавливается этот процесс тогда, когда в буферных устройствах нет готовых к исполнению команд.
Использование принципа исполнения команд «по готовности» в синпьютере и в процессоре TRIPS не позволяет отнести их к потоковым процессорам. Характер размещения команд и их выборки на исполнение - фон-неймановский. Принцип «по готовности» ограничен только этапом исполнения команд. Соответственно, указанный недостаток фон-неймановской архитектуры присущ обоим процессорам.
Следует также отметить, что ряд общих недостатков имеют все процессорные устройства, использующие косвенную информационную связь с любым принципом доступа к результатам и, соответственно, с любой архитектурной моделью.
Это, во-первых, полная машинная зависимость программ. При изменении конфигурации процессора или вычислительной системы, например, при изменении количества используемых исполнительных устройств, как правило, требуется перекомпиляция программ, а иногда и полное перепрограммирование.
Во-вторых, непрерывное увеличение семантического разрыва между постоянно развиваемыми языками программирования высокого уровня и машинным кодом. В результате повышается сложность компиляторов и, следовательно, затраты на их разработку.
Указанные недостатки, как и недостаток фон-неймановской архитектуры, связанный с необходимостью решения задачи распараллеливания, возникли из-за использования косвенной информационной связи между командами и, следовательно, они неустранимы в процессорных устройствах, использующих эту связь.
Принципиально иной вид информационной связи между командами - это прямая связь. Известным примером кодирования программы с использованием прямых информационных связей между командами является язык триад, используемый в качестве промежуточного представления исходной программы в процессе компиляции (см. Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технологии и инструменты - М.: Диалектика, 2003).
_
Промежуточное представление в виде триад образуется записями с тремя полями:
<op><arg1><arg2>,
где: ор - поле кода операции; arg1 - поле первого операнда; arg2 - поле второго операнда.
В качестве операндов используют либо указатели на таблицу символов (для имен, определенных программистом, или констант), либо указатели на триады-источники используемых результатов.
Для следующей последовательности операторов, написанной на языке высокого уровня и образующей линейный участок:
LI: a:=b+c;
i:=a*f-g;
a:=i/h;
goto L2;
промежуточное представление на языке триад будет выглядеть так, как показано в таблице 2.
Таблица 2
Номер триады
op
arg1
arg2
0
+
b
c
1
*
(0)
f
2
-
(1)
g
3
/
(2)
h
4
:=
i
(2)
5
:=
a
(3)
6
goto
L2
Имена - это указатели на таблицу символов, а числа в скобках - это указатели (ссылки) на триады, причем допустима только ссылка на триады данного линейного участка. Информационная связь между различными линейными участками - косвенная.
Данная последовательность триад может рассматриваться как фрагмент машинного кода некоторого виртуального процессора, написанного на языке ассемблера. Техническая реализация этого процессора возможна, но малоэффективна. Основным недостатком данного способа кодирования является сквозная нумерация команд в программе, которая требует либо значительных аппаратных затрат на реализацию ссылок, либо ограничений на длину исходной программы. Кроме того, она не позволяет одновременно обрабатывать несколько итераций цикла, так как имеет статический характер, и одна и та же операция в различных итерациях имеет одно и то же значение ссылки.
Указанные недостатки устранены в контекстно-зависимой программе, способы кодирования и исполнения которой мультиклеточным процессором наиболее близки по технической сущности к заявляемому изобретению и выбраны в качестве прототипа (см. Стрельцов Н.В. Архитектура и реализация мультиклеточных процессоров // Труды V Международной научной конференции «Параллельные вычисления и задачи управления». - Москва, 26-28 октября 2010 г., стр.1087-1103).
Контекстно-зависимая программа представляет собой неупорядоченную совокупность параграфов, каждый из которых является линейным участком. Информационная связь между командами внутри параграфа - прямая, с широковещательной рассылкой и последующим поименным отбором результатов, а между параграфами связь косвенная, через память. Команды параграфа образуют частично упорядоченную и информационно замкнутую последовательность, а именно команды-источники предшествуют своим командам-приемникам, а команды-приемники имеют ссылки на команды-источники только своего параграфа.
Ссылки кодируются числом, значение которого равно разнице между номерами команды-приемника и команды-источника, полученными при последовательной нумерации команд параграфа. Так, например, фрагмент программы, приведенный в таблице 2, будет выглядеть следующим образом (см. таблицу 3).
Таблица 3
Номер команды
ор
arg1
arg2
0
rd
b
1
rd
с
2
rd
f
3
rd
g
4
rd
h
5
+
(-5)
(-4)
6
*
(-1)
(-4)
7
-
(-1)
(-4)
8
/
(-1)
(-4)
9
:=
(-2)
i
10
:=
(-2)
a
11
goto
L2
Последнюю команду параграфа отмечают управляющим признаком «конец параграфа». Максимальное значение ссылки (окно видимости результата исполненной команды) определяется размером ее поля в команде и равно 2**р-1, где p - размер поля ссылки в битах.
Контекстно-зависимая программа выполняется мультиклеточным процессором, состоящим из N идентичных клеток с номерами от 0 до n-1, объединенных коммутационной средой (SB), блока памяти данных (DM), блока регистров общего назначения (GPR) и периферийных устройств. Каждая клетка содержит блок памяти программ (РМ), устройство выборки команд (PMS), устройство управления (CU), буферные устройства (BUF), исполнительные устройства (EU), устройство внутренней рассылки (ICU), а также каждой клетке соответствует коммутационное устройство (SU), совокупность которых образует коммутационную среду (SB).
Процесс исполнения контекстно-зависимой программы мультиклеточным процессором аналогичен процессу исполнения программы в синпьютере. Основные отличия заключаются в размещении контекстно-зависимой программы в памяти программ, определении по ссылке индивидуальных номеров для каждого запрошенного результата и использовании общих блока памяти данных и блока регистров общего назначения.
Для исполнения контекстно-зависимой программы команды каждого параграфа последовательно, начиная с одного и того же адреса, являющегося адресом данного параграфа, размещают в РМ клеток. Адрес размещения первого исполняемого параграфа равен адресу, начиная с которого PMS клеток выбирают команды. В результате в РМ i-ой клетки, начиная с адреса параграфа, последовательно размещаются его команды с номерами i, N+i, 2*N+i, …,.
PMS каждой клетки обеспечивает, начиная с указанного ему адреса, последовательную выборку команд и размещение их на регистре команд для последующего декодирования. Команды клетками выбираются синхронно.
Необходимыми условиями декодирования очередной команды являются завершение декодирования предыдущей команды всеми клетками, считывание и размещение на регистре команд всеми клетками очередной команды и готовность буферных устройств всех клеток к размещению микрокоманд (наличие свободных строк для записи микрокоманд). Если эти условия выполняются, команду декодируют и размещают в буферных устройствах.
max
max
max
При декодировании каждой очередной выбранной группе из N команд присваивают очередное значение тега (t), а команде из группы и, соответственно, ее результату - номер. Значение очередного тега формируется клетками синхронно и изменяется циклически от 0 до T-1, где T=2**p. Минимальное значение T, при котором принципиально невозможна взаимоблокировка команд, определяется размером окна видимости результатов и для N=2**k равно W/N, где W=2**q - размер окна видимости, q - размер поля ссылки в команде в битах.
Занятость тега фиксируют в регистре занятых тегов устройства управления. Если j-тое значение тега присвоено группе команд (тег занят), то в j-тый бит данного регистра записывают единицу. Значение тега освобождают, когда результат команды с этим тегом поступает в коммутатор. Тогда в соответствующий бит записывают ноль, и это значение может быть присвоено другой группе команд.
Номер команды равен t&i, где i - номер клетки, выбравшей данную команду. По значению номера команды и значениям ее ссылок формируют номера запрашиваемых результатов, которые сообщают коммутационному устройству. Номер запрашиваемого результата определяется следующим образом:
r
op
max
N=((t&i-P)mod(T)
op
r
где: Nr - номер запрашиваемого результата; P - значение ссылки. Следует отметить, что младшие k бит N содержат номер клетки, от которой должен прийти запрашиваемый результат, а старшие p-k бит содержат значение тега команды, которая формирует данный результат.
Выборка и декодирование команд продолжается до тех пор, пока не будет выбрана команда, отмеченная управляющим признаком «конец параграфа».
Адрес нового параграфа может поступить как в любой момент выборки команд текущего параграфа, так и после завершения выборки команд. Он поступает всем клеткам одновременно. Если к моменту выборки последней команды параграфа адрес следующего параграфа не вычислен, то выборка приостанавливается до получения адреса. Если адрес получен, то выборка продолжается с этого адреса. Выборка также приостанавливается, если нет места в каком-либо буферном устройстве, если занято очередное значение тега, а также, если по окончанию параграфа не закончилось выполнение команд, формирующих новые значения регистров GPR, и не выполнены все записи в память данных.
Буферные устройства формируют команды, передают их соответствующему исполнительному устройству и состоят из буфера хранения операционной части команды и буфера хранения операндов.
Операционная часть, кроме кода команды, включает в себя всю необходимую служебную информацию для рассылки и приема результатов, а именно, номер команды и признаки готовности первого (второго) операнда для выполнения команды.
Буфер хранения операндов имеет ассоциативную адресацию. Ассоциативным адресом является номер запрашиваемого результата.
В качестве операндов при выполнении операций могут использоваться:
запрошенные результаты команд- источников, поступающие из коммутатора;
значения, вычисленные при декодировании командного слова, а также непосредственно присутствующие в командном слове или взятые из регистров общего назначения.
В первом случае признак готовности данного операнда при записи команды устанавливают в состояние «не готов», а во втором - в состояние «готов». После получения запрошенного результата от коммутационного устройства признак в первом случае также устанавливают в состояние «готов».
Команда, получившая все операнды, проходит приоритетный отбор среди других готовых команд в буферном устройстве, после чего выдается на исполнение при условии незанятости исполнительного устройства.
При записи команды в буфере хранения операционной части устанавливают признак занятости соответствующей строки, который снимают, когда команду выдают на исполнение, и, если есть хотя бы одна свободная строка, формируют признак готовности буферного устройства к приему следующей команды.
Доступ к коммутационному устройству осуществляется устройством внутренней рассылки, который обеспечивает выбор наиболее приоритетного результата и выдачу его в коммутатор. Причем до тех пор, пока разница между номером результата и номером декодируемой в этот момент команды не превысит размер окна видимости, результат задерживают в этом устройстве.
Каждый полученный результат вместе с его тегом посылают во все коммутационные устройства, которые отбирают по номерам, запрошенные данной клеткой результаты, и передают их в ее буферные устройства в качестве операндов.
max
Каждое коммутационное устройство состоит из N однотипных устройств выбора, порядковый номер которых указывает на клетку, результаты которой отбираются данным устройством выбора, и двух блоков передачи операндов. Теги запрошенных результатов хранятся в позиционном виде в памяти запросов устройства выбора. Память запросов представляет собой два регистра размером T бит, соответственно, для первого и второго операндов. Так при запросе результата с тегом j для использования в качестве первого операнда, в j-том бите первого регистра записывают единицу («запрос установлен»), а после получения результата с этим тегом в j-тый бит записывают ноль («запрос снят»).
В общем случае, каждое коммутационное устройство может одновременно получить до N результатов и все они могут быть отобраны. Для парирования неравномерности их поступления внутри каждого блока передачи операндов используют буферную память.
В этом случае, при поступлении одновременно нескольких отобранных результатов, один или два результата сразу передают в буферные устройства, а остальные записывают в буферную память блока передачи операндов и передают позже. Время задержки результата в буферной памяти определяется интенсивностью и шириной потока, а также принятой дисциплиной обслуживания результатов, находящихся в буферной памяти.
Для сокращения объема буферной памяти используют блокировку выдачи результатов в коммутационное устройство тем клеткам, в блоках передачи операндов которых переполнена буферная память. Обеспечивается это сигналами занятости, которые формируют все коммутационные устройства.
Способ кодирования и исполнения контекстно-зависимых программ, реализованный в прототипе, имеет ряд недостатков, приводящих к прямым потерям производительности и повышению его энергопотребления.
Прежде всего это приостановка выборки команд параграфа до тех пор, пока в блок регистров общего назначения не будут записаны их новые значения, даже если начальные команды следующего параграфа не используют данные регистры.
Во-вторых, для обеспечения правильной очередности исполнения команд чтения и записи по одному и тому же адресу внутри одного параграфа необходимо, чтобы команда записи была связана последовательностью ссылок с командой чтения. При этом, если новое записываемое значение не зависит от предыдущего, полученного при выполнении команды чтения, то организация последовательности ссылок приводит к появлению в параграфе дополнительных команд и, как следствие, не только к потере производительности, но и увеличению энергопотребления.
В-третьих, результат, полученный при исполнении очередной команды, задерживается в устройстве внутренней рассылки до тех пор, пока не будет выбрана и записана в буферное устройство последняя команда из окна видимости данной команды, либо последняя команда параграфа, что приводит к задержке начала исполнения команд-приемников, если их значение ссылки последней из них меньше, чем размер окна видимости, и она не является последней командой параграфа.
В-четвертых, информация о занятости тега, хранимая в регистре занятых тегов, фактически дублируется информацией, содержащейся в памяти запросов устройств выбора. При этом освобождение занятого значения тега в регистре занятых тегов при выдаче результата в коммутатор допустимо только тогда, когда диапазон изменения индивидуальных номеров превышает размер окна видимости, а емкость буферного устройства позволяет выбрать и разместить не только все команды окна видимости, но и команды, которые теоретически можно выбрать за время максимально возможной задержки прохождения результата в коммутаторе. В результате увеличивается объем аппаратных затрат и, соответственно, энергопотребление.
В-пятых, при одновременном поступлении в коммутационную среду результатов, на которые были получены заявки, происходит быстрое заполнение буферной памяти и, как следствие, временное блокирование приема новых результатов.
Техническим результатом, на достижение которого направлена заявляемая группа изобретений, является повышение производительности и снижение энергопотребления вычислительной системой.
Указанный технический результат достигается тем, что способ кодирования и исполнения контекстно-зависимой программы, заключающийся в том, что в командах контекстно-зависимой программы выделяют поле задержки, в которое при кодировании команд записывают наибольшее значение ссылки на результат данной команды, устанавливают исходное состояние сигнала режима контроля очередности чтения/записи в состояние «контроль», сигнала очередности в состояние «чтение» и исполняют контекстно-зависимую программу, при этом в устройстве управления при декодировании команды формируют и выдают запрос занятости тега коммутационному устройству, в буферном устройстве формируют и выдают устройству управления сигнал готовности буферного устройства к записи декодируемой команды, имеющий два состояния «да» и «нет», указывающие на его готовность, анализируют коды операций команд, находящихся в буферном устройстве, и формируют сигналы наличия команд чтения, записи и формирования регистров, которые имеют два состояния «да» и «нет», указывающие на наличие или отсутствие соответствующих команд в буферном устройстве, и которые выдают в мультиклеточный процессор, в котором одноименные сигналы, полученные от всех клеток объединяют схемами ИЛИ и формируют, соответственно, общие сигналы наличия команд чтения, записи и формирования регистров, а также формируют сигнал очередности, имеющий два состояния «чтение» и «запись», указывающих на возможность выполнения соответствующих команд, и сигнал записи параграфа, имеющий два состояния «да» и «нет», указывающие на завершение записи всех команд текущего параграфа в буферное устройство, которые передают в устройства управления, причем если сигнал режима контроля очередности чтения/записи установлен в состояние «контроль» и сигнал записи параграфа имеет состояние «да» и если сигнал очередности имеет состояние «чтение» и общий сигнал наличия команд чтения имеет состояние «нет», а общий сигнал наличия команд записи имеет состояние «да», то сигнал очередности устанавливают в состояние «запись», если же сигнал очередности имеет состояние «запись», а общий сигнал наличия команд записи имеет состояние «нет», то сигнал очередности устанавливают в состояние «чтение», при этом во всех устройствах выбора коммутационного устройства проверяют выполнение запросов первого и второго операндов, тег которых равен значению тега в запросе занятости тега, а именно биты, соответствующие данному значению тега в памяти запросов первого операнда и памяти запросов второго операнда всех устройств выбора, должны иметь состояние «нет», причем установка бита в это состояние должна выполняться при передаче соответствующего ему запрошенного операнда в буферное устройство, формируют по результатам проверки сигнал занятости тега, который также имеет два состояния «да» и «нет», указывающих на занятость тега, и передают его устройству управления, где формируют сигнал занятости клетки, имеющий два состояния «да» и «нет», указывающие на ее занятость, таким образом, что сигнал занятости i-той клетки, где i>0, имеет состояние «нет» всегда, если среди декодируемых команд в клетках с номерами меньше i есть команда с управляющим признаком «конец параграфа», во всех остальных случаях сигнал занятости клетки имеет состояние «да», если выполняется хотя бы одно из следующих условий, а именно если сигнал готовности команды имеет состояние «нет», или сигнал занятости тега имеет состояние «да», или сигнал готовности буферного устройства имеет состояние «нет», а также, если в буферные устройства записаны все команды предыдущего параграфа, декодируемая команда прямо или косвенно использует какой-либо регистр в качестве операнда, и обобщенный сигнал наличия команд формирования регистров имеет состояние «да», если в буферные устройства записаны все команды предыдущего параграфа, сигнал режима контроля очередности чтения/записи установлен в состояние «контроль», декодируемая команда является командой чтения или записи, сигнал очередности имеет состояние «чтение» и общий сигнал наличия команд записи имеет состояние «да», если в буферные устройства записаны все команды предыдущего параграфа, сигнал режима контроля очередности чтения/записи установлен в состояние «контроль», декодируемая команда является командой записи, сигнал очередности имеет состояние «запись» и общий сигнал наличия команд записи имеет состояние «да», если же ни одно из этих условий не выполняется, сигнал занятости клетки имеет состояние «нет», и при этом поле задержки записывают в одноименном поле строки буферного устройства одновременно с записью в эту строку других полей данной декодированной команды, и если сигнал режима контроля очередности чтения/записи установлен в состояние «контроль» и сигнал очередности имеет состояние «чтение», блокируют выдачу на исполнение команд записи, а если сигнал очередности имеет состояние «запись», то блокируют выдачу на исполнение команд чтения, при этом исполняемые команды вместе с полем задержки выдают в исполнительное устройство и затем полученный результат, включающий поле задержки, номер и значение результата, передают в устройство внутренней рассылки, где, если разница номера текущей декодированной команды и номера результата меньше значения задержки, то полученный результат записывают в блоке задержки результатов, иначе полученный результат передают в блок доступа к коммутационной среде, где среди полученного результата и результата, поступившего от блока задержки результатов, выбирают любым известным способом наиболее приоритетный и передают его в коммутационные устройства, при этом результат, записанный в блоке задержки результатов, передают в блок доступа к коммутационной среде тогда, когда разница номера текущей декодированной команды и номера задержанного результата будет равна или больше значения задержки.
Мультиклеточный процессор, включающий N идентичных клеток с номерами от 0 до n-1, N идентичных коммутационных устройств с номерами от 0 до n-1, образующих коммутационную среду, блок памяти данных, блок регистров общего назначения, подсистему ввода/вывода, блок мультиплексирования и первую схему ИЛИ, и при этом каждая клетка имеет вход первого операнда и вход второго операнда, каждый из которых включает по сигнальной линии готовности, сигнальным линиям номера и сигнальным линиям значения, вход сигнала занятости входа результата, вход общего адреса следующего параграфа, состоящий из сигнальной линии готовности и сигнальных линий адреса, вход общего сигнала занятости клеток, вход сигнала конца параграфа, вход общего сигнала конца параграфа, выходы запроса первого операнда и запроса второго операнда, состоящие из сигнальной линии готовности, сигнальных линий тега и сигнальных линий номера клетки каждый, выход результата, который включает сигнальную линию готовности, сигнальные линии тега и сигнальные линии значения, выход адреса следующего параграфа, состоящий из сигнальной линии готовности и сигнальных линий адреса, выход сигнала занятости клетки, выход сигнала конца параграфа, вход/выход доступа к регистрам и вход/выход доступа к данным, причем у клетки с номером 0 вход сигнала конца параграфа всегда находится в состоянии «нет», коммутационное устройство имеет N входов результатов, вход запроса первого операнда, вход запроса второго операнда, выход первого операнда, выход второго операнда и выход сигнала занятости входа результата, а блок памяти данных, подсистема ввода/вывода и блок регистров общего назначения имеют по N входов/выходов, блок мультиплексирования и первая схема ИЛИ имеют по N входов и одному выходу, причем выход результата i-той клетки соединен с i-тым входом результата коммутационного устройства, выход запроса первого операнда i-той клетки соединен с входом запроса первого операнда i-го коммутационного устройства, выход запроса второго операнда i-той клетки соединен с входом запроса второго операнда i-го коммутационного устройства, выход первого операнда i-го коммутационного устройства соединен с входом первого операнда i-той клетки, выход второго операнда 1-го коммутационного устройства соединен с входом второго операнда i-той клетки, выход сигнала занятости входа результата i-го коммутационного устройства соединен с входом сигнала занятости входа результата i-той клетки, выход адреса следующего параграфа i-той клетки соединен с i-тым входом блока мультиплексирования, выход блока мультиплексирования соединен с входами общего сигнала конца параграфа всех клеток, выход сигнала занятости i-той клетки соединен с i-тым входом первой схемы ИЛИ, выход первой схемы ИЛИ соединен со всеми входами общего сигнала занятости клеток, выход сигнала конца параграфа i-той клетки, где i<(n-1), соединен с входом сигнала конца параграфа (1+1)-ой клетки, а выход сигнала конца параграфа (n-1)-ой клетки соединен с входами общего сигнала конца параграфа всех клеток, вход/выход доступа к регистрам i-той клетки является i-тым входом/выходом блока регистров общего назначения, вход/выход доступа к данным i-той клетки является i-тым входом/выходом блока памяти данных и подсистемы ввода/вывода, согласно изобретению дополнительно содержит вторую, третью и четвертую схемы ИЛИ, имеющих по N входов и одному выходу, блок формирования очередности чтения/записи, имеющий три входа и один выход, блок формирования сигнала записи параграфа, имеющий четыре входа и один выход, при этом клетка дополнительно имеет вход сигнала занятости тега, вход сигнала записи параграфа, вход общего сигнала наличия команд чтения, вход общего сигнала наличия команд записи, вход общего сигнала наличия команд формирования регистров, вход сигнала очередности, выход запроса занятости тега, который состоит из сигнальной линии готовности и сигнальных линий тега, выход сигнала наличия команд чтения, выход сигнала наличия команд записи, выход сигнала наличия команд формирования регистров, а коммутационное устройство дополнительно имеет вход запроса занятости тега и выход сигнала занятости тега, причем выход запроса занятости тега i-той клетки соединен с входом запроса занятости тега i-го коммутационного устройства, выход сигнала занятости тега i-го коммутационного устройства соединен с входом сигнала занятости тега i-той клетки, выход сигнала наличия команд чтения i-той клетки соединен с i-тым входом второй схемы ИЛИ, выход второй схемы ИЛИ соединен с входами общего сигнала наличия команд чтения всех клеток и со вторым входом блока формирования очередности чтения/записи, выход сигнала наличия команд записи i-той клетки соединен с i-тым входом третьей схемы ИЛИ, выход третьей схемы ИЛИ соединен с входами общего сигнала наличия команд записи всех клеток, с третьим входом блока формирования очередности чтения/записи и с третьим входом блока формирования сигнала записи параграфа, выход сигнала наличия команд формирования регистров i-той клетки соединен с i-тым входом четвертой схемы ИЛИ, выход четвертой схемы ИЛИ соединен с входами общего сигнала наличия команд формирования регистров всех клеток и с четвертым входом блока формирования сигнала записи параграфа, выход первой схемы ИЛИ дополнительно соединен со вторым входом блока формирования сигнала записи параграфа, а выход сигнала конца параграфа (n-1)-ой клетки дополнительно соединен с первым входом блока формирования сигнала записи параграфа, выход блока формирования сигнала записи параграфа соединен с входами сигнала записи параграфа всех клеток и с первым входом блока формирования очередности чтения/записи, а выход блока формирования очередности чтения/записи соединен с входами сигнала очередности всех клеток.
Клетка мультиклеточного процессора, имеющая входы первого и второго операндов, вход сигнала занятости входа результата, вход общего адреса следующего параграфа, вход общего сигнала занятости клеток, вход сигнала конца параграфа, вход общего сигнала конца параграфа, выходы запроса первого и второго операндов, выход результата, выход адреса следующего параграфа, выход сигнала занятости клетки, выход сигнала конца параграфа вход/выход доступа к регистрам, вход/выход доступа к данным и состоящая из блока памяти программ, устройства выборки команд, включающего регистр адреса, устройства управления, включающего регистр команд, устройства внутренней рассылки, включающего блок задержки результатов и блок доступа к коммутационной среде, и, по меньшей мере, одного буферного, содержащего набор строк для записи декодируемых команд, и одного исполнительного устройства, и при этом блок памяти программ имеет вход записи, вход адреса и выход командного слова, устройство выборки команд имеет вход командного слова, вход общего адреса следующего параграфа, вход общего сигнала занятости клеток, вход общего сигнала конца параграфа, вход сигнала готовности команды, выход адреса, выход сигнала завершения выборки, выход декодируемой команды, устройство управления имеет вход общего сигнала занятости клеток, вход сигнала конца параграфа, вход сигнала завершения выборки, вход декодируемой команды, вход сигнала готовности буферного устройства, выход запроса первого операнда, выход запроса второго операнда, выход сигнала конца параграфа, выход сигнала занятости клетки, выход декодированной команды, содержащий сигнальную линию готовности, сигнальные линии кода операции, номера и операндов, выход сигнала готовности команды, выход текущего номера, вход/выход доступа к регистрам, буферное устройство имеет вход декодированной команды, вход первого операнда, вход второго операнда, вход сигнала занятости исполнительного устройства, выход сигнала готовности буферного устройства, выход исполняемой команды, содержащий сигнальную линию готовности, сигнальные линии кода операции, номера и значения операндов, исполнительное устройство имеет вход исполняемой команды, вход сигнала занятости устройства внутренней рассылки, выход полученного результата, содержащий сигнальную линию готовности результата, сигнальные линии номера и значения результата, выход сигнала занятости исполнительного устройства, выход адреса следующего параграфа, вход/выход доступа к регистрам, вход/выход доступа к данным, устройство внутренней рассылки имеет вход полученного результата, вход сигнала занятости входа результата, вход текущего номера, выход сигнала занятости устройства внутренней рассылки, выход результата, а блок задержки результатов имеет вход полученного результата, вход сигнала занятости блока доступа к коммутационной среде и выход задержанного результата, а блок доступа к коммутационной среде имеет вход полученного результата, вход сигнала занятости коммутационной среды, вход задержанного результата, выход результата, выход общего сигнала занятости и выход сигнала занятости блока доступа к коммутационной среде, при этом вход первого операнда и вход второго операнда клетки являются соответствующими входами буферных устройств, вход сигнала занятости входа результата клетки является входом соответствующего сигнала устройства внутренней рассылки, вход общего адреса следующего параграфа клетки является соответствующим входом устройства выборки команд, вход общего сигнала занятости клеток соединен с соответствующими входами устройства управления и устройства выборки команд, вход сигнала конца параграфа клетки является соответствующим входом устройства управления, вход общего сигнала конца параграфа является соответствующим входом устройства выборки команд, выход запроса первого операнда и выход запроса второго операнда клетки, выход сигнала конца параграфа, а также выход сигнала занятости клетки являются соответствующими выходами устройства управления, выход адреса следующего параграфа клетки является соответствующим выходом исполнительного устройства, а выход результата клетки является выходом устройства внутренней рассылки, вход/выход доступа к данным клетки соединен с входом записи блока памяти программ и с входом/выходом доступа к данным исполнительного устройства, вход/выход доступа к регистрам клетки соединен с входом/выходом доступа к регистрам устройства управления и с входом/выходом доступа к регистрам исполнительного устройства, выход адреса устройства выборки команд является выходом регистра адреса и соединен с входом адреса блока памяти программ, выход командного слова блока памяти программ соединен с входом командного слова устройства выборки команд, выход декодируемой команды соединен с входом декодируемой команды, выход сигнала завершения выборки соединен с входом сигнала завершения выборки, выход сигнала готовности команды соединен с входом сигнала готовности команды, выход сигнала готовности буферного устройства соединен с входом сигнала готовности буферного устройства, выход декодированной команды соединен с входом декодированной команды, выход текущего номера соединен с входом текущего номера, выход исполняемой команды соединен с входом исполняемой команды, выход сигнала занятости исполнительного устройства соединен с входом сигнала занятости исполнительного устройства, выход полученного результата соединен с входами полученного результата блока задержки результатов и блока доступа к коммутационной среде, выход сигнала занятости устройства внутренней рассылки является выходом общего сигнала занятости и соединен с входом сигнала занятости устройства внутренней рассылки, вход сигнала занятости входа результата устройства внутренней рассылки является входом сигнала занятости коммутационной среды, выход сигнала занятости блока доступа к коммутационной среде соединен с входом сигнала занятости блока доступа к коммутационной среде, выход задержанного результата соединен с входом задержанного результата, выход результата блока доступа к коммутационной среде является выходом результата устройства внутренней рассылки, согласно изобретению дополнительно содержит вход общего сигнала наличия команд чтения, вход общего сигнала наличия команд записи, вход общего сигнала наличия команд формирования регистров, вход сигнала занятости тега, вход сигнала очередности, вход сигнала записи параграфа, выход сигнала наличия команд чтения, выход сигнала наличия команд записи, выход сигнала наличия команд формирования регистров и выход запроса занятости тега, причем вход общего сигнала наличия команд чтения, вход общего сигнала наличия команд записи, вход общего сигнала наличия команд формирования регистров, вход сигнала занятости тега являются соответствующими входами устройства управления, вход сигнала очередности, вход сигнала записи параграфа являются соответствующими входами устройства управления и буферного устройства, выход запроса занятости тега является соответствующим выходом устройства управления, выход сигнала наличия команд чтения, выход сигнала наличия команд записи и выход сигнала наличия команд формирования регистров являются соответствующими выходами буферного устройства и при этом выход и вход декодируемой команды, выход и вход исполняемой команды, а также выход и вход полученного результата включают сигнальные линии задержки, а устройство управления имеет выход текущего номера, который соединен с входом текущего номера блока задержки результатов.
Коммутационное устройство мультиклеточного процессора имеет вход запроса занятости тега, который состоит из сигнальной линии готовности и сигнальных линий тега и выход сигнала занятости тега, а также дополнительно включает вторую схему ИЛИ, которая имеет 2*N входов и один выход, а устройства выбора дополнительно включают третий и четвертый компараторы, которые обеспечивают сравнение поступающих данных на их равенство, и каждый из которых имеет два входа данных, вход сигнала разрешения сравнения и выход сигнала сравнения, а память запросов первого операнда и память запросов второго операнда имеют по второму порту чтения, содержащему вход сигнала разрешения чтения, адресный вход и выход данных, и при этом во всех устройствах выбора коммутационного устройства сигнал готовности выхода первого операнда соединен с входом сигнала разрешения сравнения третьего компаратора, выход сигнала сравнения третьего компаратора соединен с входом сигнала разрешения записи второго порта записи памяти запросов первого операнда, сигнальные линии тега выхода первого операнда соединены с адресным входом второго порта записи памяти запросов первого операнда, сигнальные линии номера клетки выхода первого операнда соединены со вторым входом данных третьего компаратора, сигнал готовности выхода второго операнда соединен с входом сигнала разрешения сравнения четвертого компаратора, выход сигнала сравнения четвертого компаратора соединен с входом сигнала разрешения записи второго порта записи памяти запросов второго операнда, сигнальные линии тега выхода второго операнда соединены с адресным входом второго порта записи памяти запросов второго операнда, сигнальные линии номера клетки выхода второго операнда соединены со вторым входом данных четвертого компаратора, выход регистра номера устройства выбора соединен с первыми входами третьего и четвертого компараторов, сигнальная линия признака готовности входа запроса занятости тега соединена с входами сигнала разрешения чтения вторых портов чтения памяти запросов первого операнда и памяти запросов второго операнда, сигнальные линии тега входа запроса занятости тега соединены с адресными входами вторых портов чтения памяти запросов первого операнда и памяти запросов второго операнда, выход данных второго порта чтения памяти запросов первого операнда i-го устройства выбора соединен с (2*1)-тым входом второй схемы ИЛИ, выход данных второго порта чтения памяти запросов второго операнда i-го устройства выбора соединен с (2"4+1)-тым входом второй схемы ИЛИ, выход второй схемы ИЛИ является выходом сигнала занятости тега.
Как вариант, в коммутационном устройстве мультиклеточного процессора блок передачи операндов состоит из L узлов передачи операндов, где 2<L<N, образующих древовидную многоуровневую структуру, а каждый узел передачи операндов имеет М входов операндов, где 2<M<(N-2), содержащих по сигнальной линии готовности и сигнальным линиям данных вход сигнала «буфер полон», М выходов сигналов «буфер полон» и выход операнда, включающий сигнальную линию готовности и сигнальные линии данных, и содержит М блоков буферной FIFO-памяти, блок арбитража и блок мультиплексирования, причем каждый блок буферной FIFO-памяти имеет вход данных, вход сигнала разрешения записи, вход сигнала разрешения чтения, выход данных, выход сигнала «буфер полон» и выход сигнала «буфер пуст», блок арбитража имеет М входов сигналов запроса, вход запрета арбитража, М выходов сигналов разрешения, выход управления и осуществляет любым из известных способов, при поступлении нескольких запросов и при отсутствии запрета арбитража, выбор наиболее приоритетного с выдачей ему сигнала разрешения, а блок мультиплексирования имеет М входов данных, вход управления и выход операнда, включающий сигнальную линию готовности и сигнальные линии данных, и при этом первый уровень данной структуры образован узлами передачи операндов, у которых суммарное число входов операндов, а также суммарное число выходов сигналов «буфер полон» равно N, и каждый их этих входов операндов является входом операнда блока передачи операндов, а каждый выход сигналов «буфер полон» является выходом сигнала «буфер полон» блока передачи операндов, причем для любого узла первого уровня j-тый вход операнда и j-тый выход сигнала «буфер полон», где j=0, …, m-1, являются (k+j)-тым входом операнда и (k+j)-тым выходом сигналов «буфер полон» блока передачи операндов, соответственно, где k-номер входа операнда блока передачи операндов, который является нулевым входом операндов данного узла передачи операндов, при этом выходы операндов и входы сигналов «буфер полон» узлов передачи операндов каждого уровня, содержащего количество узлов передачи операндов более одного, также последовательно, упорядоченно и взаимно-однозначно соединены, соответственно, с входами операндов и выходами сигналов «буфер полон» узлов передачи операндов следующего уровня, если же уровень образован одним узлом передачи операндов, то его выход операнда является выходом операнда блока передачи операндов, а значение его входа сигнала «буфер полон» имеет состояние «нет», и при этом у каждого узла передачи операндов сигнальные линии данных j-го входа операндов соединены с входом данных j-го блока буферной FIFO-памяти, сигнальная линия готовности j-го входа операндов соединена с входом сигнала разрешения записи j-го блока буферной FIFO-памяти, выход сигнала «буфер пуст» j-го блока буферной FIFO-памяти соединен с j-тым входом сигналов запроса блока арбитража, j-тый выход сигналов разрешения блока арбитража соединен с входом сигнала разрешения чтения j-го блока буферной FIFO-памяти, выход сигнала «буфер полон» j-го блока буферной FIFO-памяти является j-тым выходом сигналов «буфер полон» узла передачи операндов, вход сигнала «буфер полон» соединен с входом запрета арбитража, выход управления блока арбитража соединен с входом управления блока мультиплексирования, выход данных j-го блока буферной FIFO-памяти соединен с j-тым входом данных блока мультиплексирования, выход операнда блока мультиплексирования является выходом операнда узла передачи операндов.
Технических решений, совпадающих с совокупностью существенных признаков заявляемого изобретения, не выявлено, что позволяет сделать вывод о соответствии заявляемого изобретения такому условию патентоспособности, как «новизна».
Заявляемые существенные признаки, предопределяющие получение указанного технического результата, явным образом не следуют из уровня техники, что позволяет сделать вывод о соответствии заявляемого изобретения такому условию патентоспособности, как «изобретательский уровень».
Условие патентоспособности «промышленная применимость» подтверждено на примере конкретного осуществления.
Признаки изобретений в своей совокупности обеспечивают увеличение производительности и снижение энергопотребления вычислительной системы. Достигается это следующим образом.
При использовании более гибких условий приостановки выборки и декодирования команд появляется возможность в ряде случаев продолжать выборку и декодирование команд следующего параграфа, несмотря на наличие незавершенных процессов предыдущего параграфа. Так, если после записи в буферное устройство команды с признаком «конец параграфа» ранее выбранные команды, формирующие новые значения регистров в блоке регистров общего назначения, не выполнены, то можно продолжать выборку и декодирование команд следующего параграфа, например команд чтения, у которых адрес чтения задан непосредственно в команде. Возможность даже частичного выполнения команд нового параграфа одновременно с выполнением команд предыдущего позволяет увеличить производительность вычислительной системы.
Ввод режима контроля очередности чтения/записи и возможность управления этим режимом позволяют программисту гибко управлять доступом к памяти при программировании. В частности, если в программе или ее отдельных фрагментах входные и выходные данные не имеют пересечения по адресам, то режим контроля очередности чтения/записи может быть отменен и появляется возможность одновременного исполнения нескольких параграфов, например, нескольких итераций цикла. При установленном режиме контроля очередности чтения/записи предложенное техническое решение позволяет отказаться от дополнительных команд, обеспечивающих принудительную информационную связь между командами чтения и записи в один и тот же адрес, если они не связаны естественным образом, т.е. если результат команды чтения не используется при вычислении записываемого операнда. В результате уменьшается общее количество команд и, соответственно, повышается производительность и снижается энергопотребление.
Выделение в команде поля, в которое записывают наибольшее значение ссылки на результат данной команды, позволяет в целом ряде случаев уменьшить время нахождения уже вычисленного результата в блоке задержки результатов. А именно в случае, если отобранные и переданные в коммутационную среду результаты имеют сумму индивидуального номера и наибольшего значения ссылки меньше суммы индивидуального номера и размера окна видимости. При этом сокращается общее время исполнения команд, результаты которых задержаны. Их результаты становятся доступными раньше и, как следствие, увеличивается темп исполнения команд. Увеличение темпа исполнения непосредственно влияет на увеличение производительности.
При освобождении занятого значения тега после выдачи всех запрошенных результатов с данным тегом в буферные устройства клетки отпадает необходимость в регистре занятых тегов и объем буферных устройств может быть ограничен размером окна видимости. Функции регистра занятых тегов выполняет память запросов. Это позволяет уменьшить аппаратные затраты и, следовательно, снизить энергопотребление.
Инструментом сокращения аппаратных затрат является также иерархическая организация блока передачи операндов в коммутационном устройстве. А именно при одновременном поступлении от устройств выбора нескольких операндов, сократить время занятости коммутационного устройства можно только увеличив емкость блоков буферной FIFO-памяти. Так как темп выдачи операндов позволяет передать в буферное устройство m операндов за m тактов, то за время, пока последний из них будет находиться в буферной FIFO-памяти, возможно поступление в этот же блок буферной FIFO-памяти еще m операндов. Следовательно, чтобы не формировался сигнал занятости коммутационного устройства, емкость блоков буферной FIFO-памяти должна обеспечивать запоминание не менее m операндов. Если же блок передачи операндов организовать, например, как двухуровневую систему, первый уровень которой состоит из двух идентичных узлов передачи операндов, то за счет появления блока буферной FIFO-памяти на втором уровня емкость блоков буферной FIFO-памяти как первого, так и второго уровня составит m/2 операндов.
Варьируя количество уровней и количество узлов передачи операндов на уровне, можно минимизировать аппаратные затраты на реализацию коммутационного устройства.
Заявляемая группа изобретений поясняется чертежами, где:
фиг.1 - структурная схема мультиклеточного процессора;
фиг.2 - структурная схема клетки мультиклеточного процессора;
фиг.3 - структурная схема фрагмента коммутационного устройства, включающего устройство выбора и блоки передачи операндов;
фиг.4 - структурная схема варианта блока передачи операндов.
Мультиклеточный процессор (фиг.1) содержит N идентичных клеток 1(0), …, 1(1), …, 1(n-1), коммутационную среду, состоящую из N идентичных коммутационных устройств 2(0), …, 2(i), …, 2(n-1), подсистему ввода/вывода 3, блок памяти данных 4, блок регистров общего назначения 5, блок мультиплексирования 6, четыре схемы ИЛИ с номерами 7, 8, 9, 10, блок формирования сигнала записи параграфа 11 и блок формирования очередности чтения/записи 12. Каждая клетка имеет: вход первого операнда i.1.1; вход второго операнда i.1.2, каждый из которых включает по сигнальной линии готовности, сигнальным линиям номера и сигнальным линиям значения; вход сигнала занятости входа результата 1.1.3; вход общего адреса следующего параграфа i.1.4, состоящего из сигнальной линии готовности и сигнальных линий адреса; вход общего сигнала занятости клеток i.1.5; вход общего сигнала наличия команд чтения 1.1.6; вход общего сигнала наличия команд записи i.1.7; вход общего сигнала наличия команд формирования регистров i.1.8; вход сигнала конца параграфа 1.1.9; вход сигнала занятости тега 1.1.10; вход сигнала записи параграфа i.1.11; вход сигнала очередности 1.1.12; вход общего сигнала конца параграфа i.1.13; выход запроса первого операнда o.1.1 и выход запроса второго операнда o.1.2, состоящих из сигнальной линии готовности, сигнальных линий тега и сигнальных линий номера клетки каждый; выход результата o.1.3, который включает сигнальную линию готовности, сигнальные линии тега и сигнальные линии значения; выход адреса следующего параграфа o.1.4; выход сигнала занятости клетки о. 1.5; выход сигнала наличия команд чтения o.1.6; выход сигнала наличия команд записи o.1.7; выход сигнала наличия команд формирования регистров о. 1.8; выход сигнала конца параграфа o.1.9; выход запроса занятости тега о. 1.10, состоящий из сигнальной линии готовности и сигнальных линий тега; вход/выход доступа к данным io.1.1 и вход/выход доступа к регистрам io.1.2.
Коммутационное устройство имеет: вход запроса первого операнда i.2.1 и вход запроса второго операнда i.2.2; N входов результатов i.2.3(0), …, i.2.3(i), …, i.2.3(n-1); вход запроса занятости тега i.2.10; выход первого операнда o.2.1 и выход второго операнда o.2.2; выход сигнала занятости входа результата o.2.3; выход сигнала занятости тега o.2.10.
Для приема и выдачи данных и доступа к регистрам подсистема ввода/вывода блок памяти данных и блок регистров общего назначения имеют, соответственно, по N входов/выходов io.3.1(0), …, io.3.1(i), …, io.3.1(n-1), io.4.1(0), …, io.4.1(i), …, io.4.1(n-1) и io.5.1(0), …, io.5.1(i), …, io.5.1(n-1).
В i-том коммутационном устройстве выход первого операнда o.2.1, выход второго операнда o.2.2, выход сигнала занятости тега o.2.10 и выход сигнала занятости входа результата o.2.3 соединены, соответственно, с входами одноименных сигналов i-той клетки i.1.1, i.1.2, i.1.10, i.1.3, а выход запроса первого операнда o.1.1, выход запроса второго операнда o.1.2 и выход запроса занятости тега о.1.10 i-той клетки соединены, соответственно, с входами одноименных сигналов i-го коммутационного устройства i.2.1, i.2.2, i.2.10, а выход результата o.1.3 i-той клетки соединен с i-тым входом результата коммутационного устройства i.2.3(i).
Выход адреса следующего параграфа о.1.4 i-той клетки соединен с i-тым входом блока мультиплексирования 6, выход блока мультиплексирования 6 соединен с входами общего сигнала конца параграфа i.1.4 всех клеток, выход сигнала занятости i-той клетки о. 1.5 соединен с i-тым входом схемы ИЛИ 7, выход схемы ИЛИ 7 соединен со всеми входами общего сигнала занятости клеток i.1.5 и со вторым входом блока формирования сигнала записи параграфа 11.
Выход сигнала конца параграфа o.1.9 i-той клетки, где i<(n-1), соединен с входом сигнала конца параграфа 1.1.9 (i+1)-ой клетки, а выход сигнала конца параграфа (n-1)-ой клетки соединен с входами общего сигнала конца параграфа i.1.13 всех клеток, а также с первым входом блока формирования сигнала записи параграфа 11, вход сигнала конца параграфа i.1.9 нулевой клетки имеет состояние «нет».
Выход сигнала наличия команд чтения o.1.6 i-той клетки соединен с i-тым входом схемы ИЛИ 8, выход схемы ИЛИ 8 соединен с входами общего сигнала наличия команд чтения i.1.6 всех клеток и со вторым входом блока формирования очередности чтения/записи 12, выход сигнала наличия команд записи o.1.7 i-той клетки соединен с i-тым входом схемы ИЛИ 9, выход схемы ИЛИ 9 соединен с входами общего сигнала наличия команд записи i.1.7 всех клеток, с третьим входом блока формирования очередности чтения/записи 12 и с третьим входом блока формирования сигнала записи параграфа 11, выход сигнала наличия команд формирования регистров o.1.8 i-той клетки соединен с i-тым входом схемы ИЛИ 10, выход схемы ИЛИ 10 соединен с входами общего сигнала наличия команд формирования регистров i.1.8 всех клеток и с четвертым входом блока формирования сигнала записи параграфа 11.
Выход блока формирования сигнала записи параграфа 11 соединен с входами сигнала записи параграфа i.1.11 всех клеток и с первым входом блока формирования очередности чтения/записи 12, а выход блока формирования очередности чтения/записи 12 соединен с входами сигнала очередности i.1.12 всех клеток.
Вход/выход доступа к данным io.1.1 i-той клетки соединен с i-тым входом/выходом io.3.1(i) подсистемы ввода/вывода 3 и с i-тым входом/выходом io.4.1(i) блока памяти данных, а вход/выход доступа к регистрам io.1.2 i-той клетки соединен с i-тым входом/выходом io.5.1(i) блока регистров общего назначения 5.
Каждая клетка мультиклеточного процессора содержит (фиг.2) блок памяти программ 1.1, устройство выборки команд 1.2, устройство управления 1.3, по меньшей мере, одно буферное устройство 1.4 и одно исполнительное устройство 1.5, устройство внутренней рассылки 1.6 и имеет: вход первого операнда i.1.1; вход второго операнда i.1.2; вход сигнала занятости входа результата i.1.3; вход общего адреса следующего параграфа i.1.4; вход общего сигнала занятости клеток i.1.5; вход общего сигнала наличия команд чтения i.1.6; вход общего сигнала наличия команд записи i.1.7; вход общего сигнала наличия команд формирования регистров i.1.8; вход сигнала конца параграфа i.1.9; вход сигнала занятости тега i.1.10; вход сигнала записи параграфа i.1.11; вход сигнала очередности i.1.12; вход общего сигнала конца параграфа i.1.13; выход запроса первого операнда o.1.1; выход запроса второго операнда o.1.2; выход результата o.1.3; выход адреса следующего параграфа о.1.4; выход сигнала занятости клетки o.1.5; выход сигнала наличия команд чтения о.1.6; выход сигнала наличия команд записи о.1.7; выход сигнала наличия команд формирования регистров o.1.8; выход сигнала конца параграфа o.1.9; выход запроса занятости тега о.1.10;вход/выход доступа к данным io.1.1; вход/выход доступа к регистрам io.1.2.
Блок памяти программ 1.1 имеет вход записи, вход адреса, выход командного слова.
Устройство выборки команд 1.2 включает регистр адреса 1.2.1 и имеет вход командного слова, вход общего адреса следующего параграфа, вход общего сигнала занятости клеток, вход общего сигнала конца параграфа, вход сигнала готовности команды, выход адреса, выход сигнала завершения выборки, выход декодируемой команды.
Устройство управления 1.3 включает регистр команд 1.3.1 и имеет вход общего сигнала занятости клеток, вход общего сигнала наличия команд чтения, вход общего сигнала наличия команд записи, вход общего сигнала наличия команд формирования регистров, вход сигнала конца параграфа, вход сигнала занятости тега, вход сигнала записи параграфа, вход сигнала очередности, вход сигнала завершения выборки, вход декодируемой команды, вход сигнала готовности буферного устройства, выход запроса первого операнда, выход запроса второго операнда, выход сигнала конца параграфа, выход запроса занятости тега, выход сигнала занятости клетки, выход декодированной команды, содержащий сигнальную линию готовности, сигнальные линии кода операции, задержки, номера и операндов, выход сигнала готовности команды, выход текущего номера, вход/выход доступа к регистрам.
Буферное устройство 1.4 имеет вход декодированной команды, вход первого операнда, вход второго операнда, вход сигнала записи параграфа, вход сигнала очередности, вход сигнала занятости исполнительного устройства, выход сигнала готовности буферного устройства, выход исполняемой команды, содержащий сигнальную линию готовности, сигнальные линии кода операции, задержки, номера и значения операндов, выход сигнала наличия команд чтения, выход сигнала наличия команд записи, выход сигнала наличия команд формирования регистров.
Исполнительное устройство 1.5 имеет вход исполняемой команды, вход сигнала занятости устройства внутренней рассылки, выход полученного результата, содержащий сигнальную линию готовности результата, сигнальные линии задержки, номера и значения результата, выход сигнала занятости исполнительного устройства, выход адреса следующего параграфа, вход/выход доступа к регистрам, вход/выход доступа к данным.
Устройство внутренней рассылки 1.6 состоит из блока задержки результатов 1.6.1 и блока доступа к коммутационной среде 1.6.2 и имеет вход полученного результата, вход сигнала занятости входа результата, вход текущего номера, выход сигнала занятости устройства внутренней рассылки, выход результата. Блок задержки результатов 1.6.1 имеет вход текущего номера, вход полученного результата, вход сигнала занятости блока доступа к коммутационной среде и выход задержанного результата. Блок доступа к коммутационной среде 1.6.2 имеет вход полученного результата, вход сигнала занятости коммутационной среды, вход задержанного результата, выход результата, выход общего сигнала занятости и выход сигнала занятости блока доступа к коммутационной среде.
Вход первого операнда и вход второго операнда i.1.1 и i.1.2 клетки являются соответствующими входами буферного устройства 1.4, вход сигнала занятости входа результата i.1.3 является входом соответствующего сигнала устройства внутренней рассылки 1.6. Вход общего адреса следующего параграфа i.1.4 и вход общего сигнала конца параграфа i.1.13 являются соответствующими входами устройства выборки команд 1.2. Вход общего сигнала занятости клеток i.1.5 соединен с соответствующими входами устройства управления 1.3 и устройства выборки команд 1.2. Вход общего сигнала наличия команд чтения i.1.6, вход общего сигнала наличия команд записи i.1.7, вход общего сигнала наличия команд формирования регистров i.1.8, вход сигнала конца параграфа i.1.9 и вход сигнала занятости тега i.1.10 являются соответствующими входами устройства управления 1.3. Выход запроса первого операнда о.1.1, выход запроса второго операнда о.1.2, выход сигнала занятости клетки o.1.5 и выход запроса занятости тега о.1.10 являются соответствующими выходами устройства управления 1.3. Вход сигнала записи параграфа i.1.11 и вход сигнала очередности i.1.12 являются, соответственно, входами устройства управления 1.3 и буферного устройства 1.4.
Выход сигнала наличия команд чтения o.1.6, выход сигнала наличия команд записи o.1.7, выход сигнала наличия команд формирования регистров o.1.8 являются соответствующими выходами буферного устройства 1.4. Выход адреса следующего параграфа о.1.4 является выходом исполнительного устройства 1.5, а выход результата o.1.3 является выходом устройства внутренней рассылки.
Вход/выход доступа к данным io.1.1 соединен с входом записи блока памяти программ 1.1 и с входом/выходом доступа к данным исполнительного устройства 1.5. Вход/выход доступа к регистрам io.1.2 соединен с входом/выходом доступа к регистрам устройства управления 1.3 и с входом/выходом доступа к регистрам исполнительного устройства 1.5.
Выход адреса устройства выборки команд 1.2 является выходом регистра адреса 1.2.1 и соединен с входом адреса блока памяти программ 1.1. Выход командного слова блока памяти программ 1.1 соединен с входом командного слова устройства выборки команд 1.2.
Вход сигнала готовности команды устройства выборки команд 1.2 соединен с выходом сигнала готовности команды устройства управления 1.3. Выход сигнала завершения выборки устройства выборки команд 1.2 соединен с входом сигнала завершения выборки, а выход декодируемой команды с входом декодируемой команды устройства управления 1.3.
Вход сигнала готовности буферного устройства соединен с выходом сигнала готовности буферного устройства 1.4, выход декодированной команды устройства управления 1.3 соединен с входом декодированной команды буферного устройства 1.4, а выход текущего номера соединен с входом текущего номера устройства внутренней рассылки 1.6.
Выход исполняемой команды буферного устройства 1.4 соединен с входом исполняемой команды исполнительного устройства 1.5, а вход сигнала занятости исполнительного устройства соединен с выходом сигнала занятости исполнительного устройства 1.5.
Выход полученного результата исполнительного устройства 1.5 соединен с входом полученного результата устройства внутренней рассылки 1.6, а вход сигнала занятости устройства внутренней рассылки соединен с выходом сигнала занятости устройства внутренней рассылки 1.6.
Вход полученного результата устройства внутренней рассылки 1.6 соединен с входами полученного результата блока задержки результатов 1.6.1 и блока доступа к коммутационной среде 1.6.2. Вход сигнала занятости входа результата устройства внутренней рассылки 1.6 является входом сигнала занятости коммутационной среды блока доступа к коммутационной среде 1.6.2. Вход сигнала занятости блока доступа к коммутационной среде блока задержки результатов 1.6.1 соединен с выходом сигнала занятости блока доступа к коммутационной среде 1.6.2. Выход задержанного результата блока задержки результатов 1.6.1 соединен с входом задержанного результата блока доступа к коммутационной среде 1.6.2. Выход сигнала занятости устройства внутренней рассылки 1.6 является выходом общего сигнала занятости блока доступа к коммутационной среде 1.6.2. Выход результата устройства внутренней рассылки 1.6 является выходом результата блока доступа к коммутационной среде 1.6.2.
Фрагмент коммутационного устройства (фиг.3) состоит из i-го устройства выбора, включающего память запросов первого операнда 2.1, память запросов второго операнда 2.2, четыре компаратора 2.3, 2.4, 2.5 и 2.6, регистр номера устройства выбора 2.7, и двух идентичных блоков передачи операндов 2.8, 2.9 и двух схем ИЛИ 2.10, 2.11 и имеет: вход результата i.2.3(i), который включает сигнальную линию готовности, сигнальные линии тега, сигнальные линии значения и является i-тым входом результата коммутационного устройства; вход запроса первого операнда i.2.1 и вход запроса второго операнда i.2.2, которые включают сигнальную линию готовности, сигнальные линии тега, сигнальные линии номера клетки каждый; вход запроса занятости тега i.2.10, состоящий из сигнальной линии готовности и сигнальных линий тега; выход первого операнда 0.2.1 и выход второго операнда о.2.2, каждый из которых включает по сигнальной линии готовности, сигнальным линиям данных, образованных сигнальными линиям тега, сигнальными линиям номера клетки и сигнальным линиям значения; выход сигнала занятости входа результата о.2.3; выход сигнала занятости тега o2.10.
Память запросов первого операнда 2.1 и память запросов второго операнда 2.2 содержат количество элементов памяти, равное количеству значений тегов каждая, а элемент памяти обеспечивает возможность запоминания состояния запроса на операнды, а именно «да», если запрос установлен, и «нет», если запрос снят, и имеют по два независимых порта чтения, каждый из которых содержит адресный вход, вход сигнала разрешения чтения и выход данных и по два независимых порта записи, содержащих адресный вход, вход сигнала разрешения записи и вход данных.
Все компараторы 2.3, 2.4, 2.5 и 2.6 имеют по два входа данных, вход сигнала разрешения сравнения и выход сигнала сравнения.
Блоки передачи операндов 2.8 и 2.9 включают по N блоков буферной FIFO-памяти 2.8.1(0), …, 2.8.1(i), …, 2.8.1(n-1) и 2.9.1(0), …, 2.9.1(1), …, 2.9.1(n-1), по блоку мультиплексирования 2.8.2 и 2.9.2, и по блоку выбора 2.8.3 и 2.9.3, соответственно, и имеют по N входов операндов, каждый из которых включает сигнальную линию готовности, сигнальные линии данных, образованные сигнальными линиям тега, сигнальными линиям номера клетки и сигнальным линиям значения, N выходов сигналов «буфер полон» и выход операнда. Каждый блок буферной FIFO-памяти имеет вход данных, вход сигнала разрешения записи, выход данных, вход сигнала разрешения чтения, выход сигнала «буфер полон» и выход сигнала «буфер пуст». Каждый блок мультиплексирования имеет N входов данных, вход управления и выход данных, а каждый блок арбитража имеет N входов сигналов запроса, N выходов сигналов разрешения и выход управления.
Схемы ИЛИ 2.10 и 2.11 имеют по 2*N входов и один выход.
Сигнальная линия готовности входа результата i.2.3(i) соединена с входом сигнала разрешения чтения первого порта чтения памяти запросов первого операнда 2.1 и с входом сигнала разрешения чтения первого порта чтения памяти запросов второго операнда 2.2. Сигнальные линии тега входа результата i.2.3(i) соединены с адресным входом первого порта чтения памяти запросов первого операнда 2.1 и с адресным входом первого порта чтения памяти запросов второго операнда 2.2, а также вместе с выходом регистра номера устройства выбора 2.7 и сигнальными линиями значения входа результата i.2.3(i) соединены, соответственно, с сигнальными линиями тега, сигнальными линиями номера клетки и сигнальными линиями значения i-го входа операндов первого и второго блоков передачи операндов 2.8 и 2.9.
Сигнальная линия готовности входа запроса первого операнда i.2.1 соединена с входом сигнала разрешения первого компаратора 2.5 сигнальные линии тега входа запроса первого операнда i.2.1 соединены с адресным входом первого порта записи памяти запросов первого операнда 2.1, а сигнальные линии номера клетки входа запроса первого операнда1.2.1 соединены с вторым входом данных первого компаратора 2.5.
Сигнальная линия готовности входа запроса второго операнда i.2.2 соединена с входом сигнала разрешения второго компаратора 2.6 сигнальные линии тега входа запроса второго операнда i.2.2 соединены с адресным входом первого порта записи памяти запросов второго операнда 2.2, а сигнальные линии номера клетки входа запроса второго операнда1.2.2 соединены с вторым входом данных второго компаратора 2.6.
Сигнальная линия готовности входа запроса занятости тега i.2.10 соединена с входом сигнала разрешения чтения второго порта чтения памяти запросов первого операнда 2.1 и с входом сигнала разрешения чтения второго порта чтения памяти запросов второго операнда 2.2. Сигнальные линии тега входа запроса занятости тега i.2.10 соединены с адресным входом второго порта чтения памяти запросов первого операнда 2.1 и с адресным входом второго порта чтения памяти запросов второго операнда 2.2.
Выход первого операнда o.2.1 является выходом операнда первого блока передачи операндов 2.8. Выход второго операнда o.2.2 является выходом операнда второго блока передачи операндов 2.9.
Выход сигнала занятости входа результата о.2.3 является выходом первой схемы ИЛИ.
Выход сигнала занятости тега о.2.10 является выходом второй схемы ИЛИ.
Вход данных первого порта записи как памяти запросов первого операнда 2.1, так и памяти запросов второго операнда 2.2 имеет состояние «да», а вход данных второго порта записи имеет состояние «нет».
Выход регистра номера устройства выбора, соединен с первым входом данных компараторов 2.3, 2.4, 2.5 и 2.6.
Выход сигнала сравнения первого компаратора 2.5 соединен с входом сигнала разрешения записи первого порта записи памяти запросов первого операнда 2.1. Выход сигнала сравнения второго компаратора 2.6 соединен с входом сигнала разрешения записи первого порта записи памяти запросов второго операнда 2.2.
Выход сигнала сравнения третьего компаратора 2.3 соединен с входом сигнала разрешения записи второго порта записи памяти запросов первого операнда 2.1. Выход сигнала сравнения четвертого компаратора 2.4 соединен с входом сигнала разрешения записи второго порта записи памяти запросов второго операнда 2.2.
Выход данных первого порта чтения памяти запросов первого операнда i-го устройства выбора является сигнальной линией готовности i-го входа операндов первого блока передачи операндов 2.8. Выход данных первого порта чтения памяти запросов второго операнда i-го устройства выбора является сигнальной линией готовности i-го входа операндов второго блока передачи операндов 2.9.
Выход данных второго порта чтения памяти запросов первого операнда 2.1 i-го устройства выбора соединен с (2*1)-тым входом второй схемы ИЛИ 2.11. Выход данных второго порта чтения памяти запросов второго операнда 2.2 i-го устройства выбора соединен с (2*1+1)-тым входом второй схемы ИЛИ 2.11.
В первом блоке передачи операндов 2.8 сигнальная линия готовности i-го входа операндов является входом сигнала разрешения записи i-го блока буферной FIFO-памяти 2.8.1(i), сигнальные линии данных этого же входа соединены с входом данных i-го блока буферной FIFO-памяти 2.8.1(i). Выход сигнала «буфер пуст» i-го блока буферной FIFO-памяти 2.8.1(i) соединен с i-тым входом сигналов запроса блока арбитража 2.8.3. Выход управления блока арбитража 2.8.3 соединен с входом управления блока мультиплексирования 2.8.2, а i-тый выход сигналов разрешения блока арбитража 2.8.3 соединен с входом сигнала разрешения чтения i-го блока буферной FIFO-памяти 2.8.1(i). Выход данных i-го блока буферной FIFO-памяти 2.8.1(i) соединен с i-тым входом данных блока мультиплексирования 2.8.2. Выход данных блока мультиплексирования 2.8.2 является выходом операнда первого блока передачи операндов 2.8.
Выход сигнала «буфер полон» i-го блока буферной FIFO-памяти 2.8.1(i) первого блока передачи операндов 2.8 j-го коммутационного устройства соединен с (2*j)-тым входом первой схемы ИЛИ 2.11 i-го коммутационного устройства.
Во втором блоке передачи операндов 2.9 сигнальная линия готовности i-го входа операндов является входом сигнала разрешения записи i-го блока буферной FIFO-памяти 2.9.1(i), сигнальные линии данных этого же входа соединены с входом данных i-го блока буферной FIFO-памяти 2.9.1(i). Выход сигнала «буфер пуст» i-го блока буферной FIFO-памяти 2.9.1(i) соединен с i-тым входом сигналов запроса блока арбитража 2.9.3. Выход управления блока арбитража 2.9.3 соединен с входом управления блока мультиплексирования 2.9.2, а i-тый выход сигналов разрешения блока арбитража 2.9.3 соединен с входом сигнала разрешения чтения i-го блока буферной FIFO-памяти 2.9.1(i). Выход данных i-го блока буферной FIFO-памяти 2.9.1(i) соединен с i-тым входом данных блока мультиплексирования 2.9.2. Выход данных блока мультиплексирования 2.9.2 является выходом операнда первого блока передачи операндов 2.9.
Выход сигнала «буфер полон» i-го блока буферной FIFO-памяти 2.9.1(i) второго блока передачи операндов 2.9 j-го коммутационного устройства соединен с (2*)+1)-тым входом первой схемы ИЛИ 2.11 i-го коммутационного устройства.
На структурной схеме блока передачи операндов (фиг.4) показан вариант древовидной двухуровневой реализации первого блока передачи операндов, первый уровень которого состоит из двух узлов передачи операндов, а второй - из одного. Первый узел передачи операндов первого уровня включает N/2 блоков буферной FIFO-памяти с 2.8.1(0) по 2.8.1(n/2-1), блок арбитража 2.8.4, блок мультиплексирования 2.8.6 и имеет N/2 входов операндов с i.2.8.1(0) no i.2.8.1(n/2-1), вход сигнала «буфер полон», N/2 выходов «буфер полон», выход сигнальной линии готовности и выход данных. Второй узел передачи операндов первого уровня также включает N/2 блоков буферной FIFO-памяти с 2.8.1(n/2) по 2.8.1(n-1), блок арбитража 2.8.5, блок мультиплексирования 2.8.7 и имеет N/2 входов операндов с i.2.8.1(n/2) no i.2.8.1(n-1), вход сигнал «буфер полон», N/2 выходов «буфер полон», выход сигнальной линии готовности и выход данных.
Узел передачи операндов второго уровня включает два блока буферной FIFO-памяти 2.8.8 и 2.8.9, блок арбитража 2.8.10, блок мультиплексирования 2.8.11 и имеет два входа данных, два выхода сигнала «буфер полон», выход сигнальной линии готовности и выход данных.
Каждый блок буферной FIFO-памяти имеет вход данных, вход сигнала разрешения записи, выход данных, вход сигнала разрешения чтения, выход сигнала «буфер полон» и выход сигнала «буфер пуст». Блок мультиплексирования узла передачи операндов имеет М входов данных, где М - количество блоков буферной FIFO-памяти в данном узле, вход управления, выход сигнальной линии готовности и выход данных, а каждый блок арбитража имеет М входов сигналов запроса, вход запрета арбитража, М выходов сигналов разрешения и выход управления.
В узлах передачи операндов первого уровня сигнальная линия готовности i-го входа операндов является входом сигнала разрешения записи 1-го блока буферной FIFO-памяти 2.8.1(i), где i=0, …, n/2-1, n/2, …, n-1 сигнальные линии тега, сигнальные линии номера и сигнальные линии значения, этого же входа являются входом данных i-го блока буферной FIFO-памяти 2.8.1(i). Выход сигнальной линии готовности и выход данных блока мультиплексирования 2.8.11 является выходом операнда первого блока передачи операндов o.2.1.
Для i<n/2: выход сигнала «буфер пуст» i-го блока буферной FIFO-памяти 2.8.1(i) соединен с i-тым входом сигналов запроса блока арбитража 2.8.4; выход управления блока арбитража 2.8.4 соединен с входом управления блока мультиплексирования 2.8.6, а i-тый выход сигналов разрешения блока арбитража 2.8.4 соединен с входом сигнала разрешения чтения i-го блока буферной FIFO-памяти 2.8.1(1); выход данных 1-го блока буферной FIFO-памяти 2.8.1(i) соединен с 1-тым входом данных блока мультиплексирования 2.8.6; выход сигнальной линии готовности блока мультиплексирования 2.8.6 соединен с входом сигнала разрешения записи блока буферной FIFO-памяти 2.8.8 узла передачи операндов второго уровня; выход данных блока мультиплексирования 2.8.6 соединен с входом данных блока буферной FIFO-памяти 2.8.8 узла передачи операндов второго уровня.
Для i≥n/2: выход сигнала «буфер пуст» i-го блока буферной FIFO-памяти 2.8.1(i), соединен с (n/2-1)-тым входом сигналов запроса блока арбитража 2.8.5; выход управления блока арбитража 2.8.5 соединен с входом управления блока мультиплексирования 2.8.7, а (n/2-1)-тый выход сигналов разрешения блока арбитража 2.8.5 соединен с входом сигнала разрешения чтения i-го блока буферной FIFO-памяти 2.8.1(i); выход данных i-го блока буферной FIFO-памяти 2.8.1(i) соединен с (n/2-1)-тым входом данных блока мультиплексирования 2.8.7; выход сигнальной линии готовности блока мультиплексирования 2.8.7 соединен с входом сигнала разрешения записи блока буферной FIFO-памяти 2.8.9 узла передачи операндов второго уровня; выход данных блока мультиплексирования 2.8.7 соединен с входом данных блока буферной FIFO-памяти 2.8.9 узла передачи операндов второго уровня.
Выход сигнала «буфер пуст» блока буферной FIFO-памяти 2.8.8 соединен с первым входом сигналов запроса блока арбитража 2.8.10, выход управления блока арбитража 2.8.10 соединен с входом управления блока мультиплексирования 2.8.11, а первый выход сигналов разрешения блока арбитража 2.8.10 соединен с входом сигнала разрешения чтения блока буферной FIFO-памяти 2.8.8, выход данных блока буферной FIFO-памяти 2.8.8 соединен с первым входом данных блока мультиплексирования 2.8.11.
Выход сигнала «буфер пуст» блока буферной FIFO-памяти 2.8.9 соединен со вторым входом сигналов запроса блока арбитража 2.8.10, а второй выход сигналов разрешения блока арбитража 2.8.10 соединен с входом сигнала разрешения чтения блока буферной FIFO-памяти 2.8.9, выход данных блока буферной FIFO-памяти 2.8.9 соединен с вторым входом данных блока мультиплексирования 2.8.11, вход запрета арбитража блока арбитража 2.8.10 имеет состояние «нет».
Мультиклеточный процессор работает следующим образом.
Контекстно-зависимую программу, команды которой содержат поля кода операции, операндов, задержки и управляющих признаков и среди которых есть, по меньшей мере, одна команда-источник и одна команда-приемник, причем в командах-приемниках не менее чем один операнд является ссылкой на команду-источник, делят на совокупность параграфов таким образом, что каждый из них является линейным участком, образованным частично-упорядоченной и информационно-замкнутой последовательностью команд. Последняя команда параграфа отмечена управляющим признаком «конец параграфа».
Все команды-источники в параграфе предшествуют своим командам-приемникам, причем команды-приемники имеют ссылки на команды-источники только своего параграфа. Ссылки кодируют как числа, значения которых равны разнице между номерами команды-приемника и команды-источника, полученными при последовательной нумерации команд параграфа. Максимальное значение ссылки на команду-источник записывают в поле задержки.
Команды каждого параграфа распределяют между блоками памяти программ клеток таким образом, что в блоке памяти программ 1.1 i-ой клетки, начиная с адреса параграфа, последовательно размещаются его команды с номерами i, N+i, 2*N+i, …, которые записываются туда любым из известных способов с использованием подсистемы ввода/вывода 3.
Затем устанавливают во всех клетках исходное состояние регистра адреса 1.2.1 равным адресу первого исполняемого параграфа, в поле занятости строк буферного устройства 1.4 записывают признак «свободно», устанавливают исходное состояние сигнала режима контроля очередности чтения/записи в состояние «контроль», сигнала очередности в состояние «чтение». При этом установка режима контроля очередности чтения/записи выполняется с использованием управляющего регистра, который входит в состав блока регистров общего назначения 5 и состояние полей которого задает режимы вычислений. Формирование полей осуществляется как аппаратно, так и программно, а доступ к регистру обеспечивается через вход/выход доступа к регистрам io.1.2.
В процессе исполнения контекстно-зависимой программы устройства выборки команд 1.2 всех клеток выбирают команду, размещенную в блоке памяти программ 1.1 по адресу, содержащемуся в регистре адреса 1.2.1, затем записывают выбранную команду в регистр команд устройства управления 1.3.1, где ее декодируют, и, одновременно, если среди выбранных N команд не было отмеченных управляющим признаком «конец параграфа», формируют и записывают новое значение регистра адреса 1.2.1, равное адресу команды, следующей за выбранной.
Если среди выбранных команд была команда, отмеченная управляющим признаком «конец параграфа», и адрес следующего выполняемого параграфа уже вычислен, то новое значение регистра адреса 1.2.1 устанавливают равным адресу следующего выполняемого параграфа и после записи нового значения выборку команд повторяют, если же декодирование предыдущей команды не выполнено или среди выбранных команд была команда, отмеченная управляющим признаком «конец параграфа», а адрес следующего выполняемого параграфа на этот момент не вычислен, то выборку команд приостанавливают и возобновляют, соответственно, когда декодирование будет выполнено или будет вычислен адрес следующего выполняемого параграфа.
max
max
max
В устройстве управления 1.3, при декодировании, каждой очередной выбранной группе из N команд присваивают очередное значение тега (t), а команде из группы и, соответственно, ее результату - номер. Значение очередного тега формируется клетками синхронно и изменяется циклически от 0 до T-1, где T=2**p. Минимальное значение T, при котором принципиально невозможна взаимоблокировка команд, определяется размером окна видимости результатов и для N=2**k равно W/N, где W=2**q - размер окна видимости, q - размер поля ссылки в команде в битах.
Занятость тега фиксируется в памяти запросов первого и второго операндов 2.1 и 2.2 устройств выбора. Если j-тое значение тега присвоено группе команд и результат хотя бы одной команды с данным тегом не получен коммутационным устройством, то j-тый тег считается занятым. Значение тега освобождается, когда все запрошенные результаты команд с этим тегом получены буферным устройством 1.4. Тогда в соответствующих битах памяти запросов будет находиться ноль, и это значение тега может быть присвоено другой группе команд.
Номер команды равен t&i, где i - номер клетки, выбравшей данную команду. По значению номера команды и значениям ее ссылок формируют номера запрашиваемых результатов, которые сообщают коммутационному устройству. Номер запрашиваемого результата определяется следующим образом:
r
op
max
N=((t&i)-P)mod(T)
r
op
где N - номер запрашиваемого результата; P - значение ссылки. Следует отметить, что младшие k бит Nr содержат номер клетки, от которой должен прийти запрашиваемый результат, а старшие p-k бит содержат значение тега команды, которая формирует данный результат. Значения тегов и номеров клеток запрашиваемых результатов используются при формировании запросов первого и второго операндов o.1.1 и о.1.2 на отбор по номерам команд-источников их результатов.
Одновременно в устройстве управления 1.3 формируют и передают в мультиклеточный процессор сигнал занятости клетки o.1.5, где этот и аналогичные сигналы остальных клеток объединяют схемой ИЛИ 7 и полученный общий сигнал занятости клеток i.1.5 передают устройствам управления 1.3 всех клеток. Выделяют код операции команды, поле задержки, формируют операнды, и если общий сигнал занятости клеток имеет состояние «нет», то сформированные запросы первого и второго операндов о.1.1 и o.1.2 записывают в память запросов первого и второго операндов 2.1 и 2.2, соответственно, номер, присвоенный текущей декодированной команде через выход текущего номера, передают в устройство внутренней рассылки 1.6, декодированную команду в виде набора полей записывают в свободную строку буферного устройства 1.4, причем в поле занятости строки записывают признак «занято», в поле кода операции строки записывают код операции, в поле номера записывают номер команды, в поле задержки записывают значение задержки, в поле операнда, если значение операнда известно, записывают его значение, а в поле признака готовности операнда записывают признак «готов», иначе в поле адреса операнда записывают номер команды-источника, результат которой является операндом, а в поле признака готовности операнда записывают признак «не готов», если же общий сигнал занятости клеток i.1.5 имеет состояние «да», то запись не выполняют до перехода этого сигнала в состояние «нет».
При этом в буферном устройстве 1.4 формируют и выдают устройству управления 1.3 сигнал готовности буферного устройства к записи декодируемой команды, имеющий два состояния «да» и «нет», указывающие на его готовность, анализируют коды операций команд, находящихся в буферном устройстве 1.4, и формируют сигналы наличия команд чтения o.1.6, записи о.1.7 и формирования регистров o.1.8, которые имеют два состояния «да» и «нет», указывающие на наличие или отсутствие соответствующих команд в буферном устройстве, и которые выдают в мультиклеточный процессор, где одноименные сигналы, полученные от всех клеток, объединяют схемами ИЛИ и формируют, соответственно, общие сигналы наличия команд чтения i.1.6, записи i.1.7 и формирования регистров i.1.8, а также формируют сигнал очередности i.1.12, имеющий два состояния «чтение» и «запись», указывающих на возможность выполнения соответствующих команд, и сигнал записи параграфа i.1.11, имеющий два состояния «да» и «нет», указывающие на завершение записи всех команд текущего параграфа в буферное устройство 1.4, которые передают в устройства управления 1.3.
При этом, если сигнал режима контроля очередности чтения/записи установлен в состояние «контроль» и сигнал записи параграфа i.1.11 имеет состояние «да» и если сигнал очередности i.1.12 имеет состояние «чтение» и общий сигнал наличия команд чтения i.1.6 имеет состояние «нет», а общий сигнал наличия команд записи i.1.7 имеет состояние «да», то сигнал очередности i.1.12 устанавливают в состояние «запись», если же сигнал очередности i.1.12 имеет состояние «запись», а общий сигнал наличия команд записи i.1.7 имеет состояние «нет», то сигнал очередности i.1.12 устанавливают в состояние «чтение».
Сигнал занятости клетки 0.1.5 имеет состояние «да» в следующих случаях:
1. Когда нет места в буферном устройстве 1.4.
2. Если занято очередное значение тега.
3. Если после записи в буферное устройство 1.4 команды с признаком «конец параграфа», ранее выбранные команды, формирующие новые значения регистров в блоке регистров общего назначения 5, не выполнены, и на регистре команд 1.3.1 находится команда, использующая значение какого-либо регистра в качестве операнда.
4. Если в буферные устройства 1.4 записаны все команды предыдущего параграфа (сигнал записи параграфа i.1.11 имеет состояние «да»), сигнал режима контроля очередности чтения/записи установлен в состояние «контроль», декодируемая команда является командой чтения или записи, сигнал очередности 1.12 имеет состояние «чтение» и общий сигнал наличия команд записи i.1.7 имеет состояние «да».
5. Если в буферные устройства 1.4 записаны все команды предыдущего параграфа (сигнал записи параграфа i.1.11 имеет состояние «да»), сигнал режима контроля очередности чтения/записи установлен в состояние «контроль», декодируемая команда является командой записи, сигнал очередности 1.12 имеет состояние «запись» и общий сигнал наличия команд записи i.1.7 имеет состояние «да».
Функционально буферное устройство 1.4 решает задачу формирования команд и передачу их исполнительному устройству 1.5 и состоят из буфера хранения операционной части команды и буфера хранения операндов.
Операционная часть, кроме кода команды, включает в себя всю необходимую служебную информацию для рассылки и приема результатов, а именно задержку, номер команды и признаки готовности первого (второго) операнда для выполнения команды.
Буфер хранения операндов имеет ассоциативную адресацию. Ассоциативным адресом является номер команды-источника.
В качестве операндов при выполнении операций могут использоваться:
запрошенные результаты команд-источников, поступающие из коммутационного устройства;
значения, вычисленные при декодировании команды, а также непосредственно присутствующие в команде или взятые из регистров общего назначения.
В первом случае признак готовности операнда при записи команды устанавливается в состояние «не готов», а во втором - в состояние «готов». После получения запрошенного результата от коммутационного устройства он устанавливается в состояние «готов».
Команда, получившая все операнды, проходит приоритетный отбор среди других готовых команд в буферном устройстве 1.4, после чего выдается на исполнение при условии незанятости исполнительного устройства 1.5.
При записи команды буфер хранения операционной части устанавливает признак занятости соответствующей строки, который снимается, когда команда выдается на исполнение, и формирует, если есть хотя бы одна свободная строка, признак готовности буферного устройства к приему следующей команды.
Доступ к коммутационному устройству осуществляется устройством внутренней рассылки 1.6, которое обеспечивает выбор наиболее приоритетного среди одновременно полученных результатов и выдачу его в коммутационное устройство. При этом до тех пор пока разница между номером полученного результата и номером декодируемой команды не превысит величину задержки, результат будет задержан в этом блоке.
Каждый полученный результат с его тегом поступает во все коммутационные устройства, которые отбирают, по ранее полученным номерам запрашиваемых результатов, требуемые данной клетке результаты, и передают их в ее буферное устройство.
max
Каждое коммутационное устройство состоит из N однотипных устройств выбора, чей порядковый номер указывает на клетку, результаты которой отбираются данным устройством выбора, и двух блоков передачи результатов (операндов). Теги запрашиваемых результатов хранятся в позиционном виде в памяти запросов устройства выбора. Память запросов представляет собой два регистра размером T бит, соответственно, для первого и второго операндов. Так при запросе результата с тегом j для использования в качестве первого операнда в j-том бите первого регистра будет записана единица («запрос установлен»), а после получения результата с этим тегом в j-тый бит будет записан ноль («запрос снят»).
В общем случае, каждое коммутационное устройство может одновременно получить до N результатов и все они могут быть отобраны. Для парирования неравномерности их поступления внутри каждого блока передачи результатов используется буферная FIFO-память.
В этом случае при поступлении одновременно нескольких результатов, один или два результата сразу передаются в буферное устройство 1.4, а остальные записываются в буферную FIFO-память блока передачи операндов 2.8 или 2.9 и передаются позже. Время задержки результата в буферной FIFO-памяти определяется интенсивностью и шириной потока, а также принятой дисциплиной обслуживания результатов.
Для сокращения объема буферной памяти используют блокировку выдачи результатов в коммутационные устройства тем клеткам, в блоках передачи операндов которых переполнена буферная FIFO-память. Обеспечивается это сигналами занятости, которые формируют все коммутационные устройства.