Първият домашен многопроцесорен компютър М-10

Гливенко Е.В., Прядко С.А., Фомочкина А.С.

През 70-те години на миналия век в Съветския съюз е създадена многопроцесорната машина М-10. Системата M-10 първоначално е фокусирана върху обработката на големи потоци от информация с помощта на алгоритми с повече или по-малко естествен паралелизъм. Освен това се предполага, че обработката трябва да се извършва в реално време.

Архитектурата на машината M-10 беше коренно различна от архитектурите на други многопроцесорни машини. Това беше система, организирана на синхронен принцип, която във всеки цикъл изпълняваше едновременно действията на три оператора: управляващ оператор, изчислителен оператор, който преобразува функции, и оператор, който извършва геометрични трансформации. Притежавайки обща памет, машината М-10 комуникира с тази памет в нейната цялост чрез функции, определени в голям брой точки.

Архитектурата на машината М-10 беше нетрадиционна. На първо място, принципът на неговата работа не предполага, че паралелизираната върху него програма първоначално ще бъде написана на произволен език и ще има последователна структура. Идеята за изграждане на машина е взета от областта на математиката, а именно от функционалния анализ, където началният елемент не е число, както в математическия анализ, а функция като цяло. Оттук и името "функционална аритметика". Действията с функции се наричат ​​оператори. В машината М-10 няма цифрова част. Входът на машината не е числа, а функции, определени в краен брой точки. Системата от машинни оператори не е набор от аритметични операции, а набор от трансформации на функции във функции. Многопроцесорността се определя от броя точки, в които е дефинирана функцията. На потребителя се предлага доста обширен набор от инструменти за работа с функции, дефинирани по този начин.начин. Потребителят е поканен сам да „паралелизира“ своята задача, като я представи като набор от функции на входа и под формата на очаквани резултати - също функции - на изхода. Тази машина най-много прилича на векторна или матрична машина, но, разбира се, с по-обширен набор от операции. Проблемът при създаването на такава архитектура беше изискването наборът от оператори за тази машина да бъде пълен. Това означава, че всеки възможен оператор над функции, дефинирани в краен брой точки, трябва да може да бъде представен като "програма", съставена от машинни оператори. Наборът от оператори М-10 отговаря на условията за пълнота [1, 2], а при избора на система от оператори бяха взети предвид и изискванията за удобство на "програмиране".

Избраната архитектура на машината М-10 направи възможно ефективното й използване като машина за управление на различни съоръжения. Това беше възможно главно поради възможността за прехвърляне на повечето функции на операционните системи, както и на интерфейсните устройства към хардуера. Тази машина се е доказала при обработката на информация за местоположението [3] при наблюдение на сателити, при обработката на изображения от камерите с мехурчета на ускорителя [4], както и при числени симулационни задачи във физиката и геофизиката.

Основи на архитектурата. Функционална аритметика ще наричаме многопроцесорна структура, състояща се от голям брой отделни процесори, чиято работа е синхронизирана по специален начин.

Съставът на функционалната аритметика включва следните компоненти: многобитови и еднобитови структури, памет и управляващо устройство. Всички структури, както многобитови, така и еднобитови, се състоят от един и същ брой процесори, като всеки процесор от многобитовата структура е свързан със своя еднобитов процесор.процесор. Броят на процесорите във всяка структура е n l, където l определя размерността на функционалната аритметика, а n определя съдържанието на всяка от посоките. Отделен многобитов аритметичен процесор работи с m-битови числа, в съответствие с това той съдържа m-битови регистри за запис на операнди и резултати. Еднобитовият процесор има еднобитови регистри.

Многобитовата структура се използва за работа с функциите f(x1, …,xl) на l променливи, съответно определени в n точки във всяка от l посоки, т.е. общо по n l точки. Входните и изходните регистри на отделните процесори се комбинират във входните и изходните регистри на цялата структура и информацията, записана в тях, се интерпретира като стойностите на някаква функция f(x1, …,xl), зададена в n l точки. Всяка точка отговаря на собствен процесор. Във всяка точка функцията се определя с помощта на m-битово число.

Отделни звена на функционалната аритметика са синхронизирани и работата на цялата система може да бъде представена като последователност от оператори. Функционалните аритметични оператори свързват двойка функции, посочени във входните регистри на структурата, с резултатна функция, която се намира в изходните регистри. Функционалните аритметични оператори могат да бъдат разделени на три типа: многобитови структурни оператори, еднобитови структурни оператори и оператори, в които участват и двете структури.

Входът на операторите от първия тип получава функции от входните регистри на многобитова структура и като резултат се получават и функции на многобитова структура. Операторите от втория тип работят с функции, записани в регистри с еднобитова структура. Такива функции приемат само две стойности (нула и едно) и служат за подчертаване на някоикомплекти. По аналогия със съответния термин от математиката ще ги наричаме характеристични функции на множествата. Всъщност еднобитовите структурни оператори извършват операции върху множества. В операторите от трети тип участват както функции, така и набори, както под формата на операнди, така и под формата на резултати. Операторите от трети тип се използват за трансформиране на функция върху определено множество или за получаване в резултат на определено множество, свързано с функцията.

След това разгледайте конкретни видове функционална аритметика. За l=2 такава аритметика ще се нарича функционална равнина, за l=1 - функционална линийка. Функциите, използвани в линеалите, ще се наричат ​​логически, тъй като техните области на дефиниране са дискретни. По аналогия с това операторите на функционалната аритметика ще се наричат ​​логически. За да може да се реализира всеки логически оператор върху функционалната аритметика под формата на програма, т.е. под формата на последователност от командни изрази е необходимо командните изрази да съставляват цялостна система.

функционална равнина. Нека покажем идеята за изграждане на архитектура, наречена функционална равнина, като използваме абстрактен математически пример.

Помислете за конкретен проблем (проблемът на Дирихле): намерете решение на уравнението на Лаплас:

(1)

вътре в някаква двумерна област G. Освен това решението на границата на областта трябва да съвпада с дадена функция f , т.е. приемат определени стойности.

Известен е стандартен итеративен метод за приближено решение на тази задача, който се състои в следното. Разделяме координатната равнина (x, y) на квадрати със страна h с прави линии, успоредни на координатните оси, и избираме система от квадрати по такъв начин, че цялата площ да бъде покрита от товасистема от квадрати. Във възлите на получената решетка ще се търси приблизително решение на задачата на Дирихле. Преномерирайте всички вътрешни възли. Нека техният брой е N. За всеки вътрешен възел записваме равенство, което съставлява значението на схемата за приблизителна крайна разлика:

(2)

Аргумент за логически оператор е логическа функция f ( x , y ) на две променливи, дефинирани във възлите на мрежата. Предполагаме, че е дадено в някакъв многоъгълник, съдържащ домейна G.

Представяме ви следните оператори:

Изместване на x надясно е оператор с единичен вход, който свързва функцията f(x,y) с функцията A(f(x,y))=f(x-h, y); Изместване наляво в x A(f(x,y))=f(x+h, y); Изместване нагоре y A(f(x,y))=f(x, y-h); Изместване надолу y A(f(x,y))=f(x, y+h); AΣ оператор за сумиране – оператор с два входа AΣ (f1 (x,y), f2 (x,y))= f1 (x,y)+ f2 (x,y); A* е операторът на умножение на две функции A* (f1 (x,y), f2 (x,y))= f1 (x,y) × f2 (x,y).

Предполага се възможност за маскиране на оператори, т.е. изпълнение на оператора само върху някакво подмножество от домейна на дефиниране на функциите, включени в оператора.

Да предположим, че компютърната архитектура е такава, че е възможно:

  • съхранявайте цели логически функции под формата на таблици в регистър, който е решетка, подобна на равнина;
  • изпълни оператор върху една функция, зададена в регистър, така че резултатът да е в друг подобен регистър, без да променя съдържанието на първия;
  • изпълни оператор върху двойка функции, които са в два регистъра, така че резултатът да е в третия регистър.

За маскиране на операторите въвеждаме друг регистър, т. нар. „килим“. То е многоъгълно, със същото разположение на възлите, като регистър за съхранениефункции. Единствената разлика е, че във всеки възел на килима се съхранява само 1 бит информация, докато във всеки възел на регистъра, който съхранява функцията, броят на битовете се определя от точността на настройка на функцията. Можем да приемем, че характеристичната функция на някакво множество е разположена върху килима, а именно множеството, в точките на което функцията е равна на единица.

Например, като използвате килим, можете да изберете зона за описаната по-горе задача, както със, така и без граница, т.е. набор от вътрешни точки.

Да разгледаме програма, състояща се от последователност от представени оператори и прилагаща решение на проблема. Дирихле.

Нека прочетем следната информация от паметта в регистъра: в точките на границата на региона, дадените гранични стойности, а във вътрешните точки на региона, стойностите, равни на нула, които представляват нулевото приближение на решението на проблема на Дирихле. Означете тази функция u0(x,y), образувайки първото приближение u1(x,y) по формула (2). За да направим това, прилагаме оператора за смяна надясно в x с една позиция към всички точки. Съхраняваме резултата в отделен регистър A. След това изместваме u0 в x наляво с една позиция. Нека съхраним резултата в друг регистър B. Нека добавим съдържанието на регистрите A и B под маската, като използваме маската, избираме само набора от вътрешни точки на областта. Резултатът се съхранява в регистър C.

Следващата команда изпълнява оператора за изместване на оригиналната функция u0(x,y) нагоре с една позиция, съхраняване на резултата в регистър B. След това изместваме оригиналната функция u0 надолу с една позиция и съхраняваме резултата в регистър B. Добавете съдържанието на регистрите A и B под маска, която подчертава вътрешните точки на региона. Съдържанието ще бъде изпратено до регистър D.

Следващата операция ще добави съдържанието на регистрите C и D отново само във вътрешни точки на областта с резултат, записан, например, в регистър C.След това, отново само във вътрешните точки на региона, ще умножим съдържанието на регистър C по константна функция, равна на числото 1/4 във всички точки.

След тези операции апроксимацията u1(x,y) ще се появи едновременно във всички вътрешни точки на региона. При маскиране ще приемем, че предишните стойности ще бъдат запазени извън вътрешните точки, т.е. гранични условия. Следните приближения ще бъдат получени с помощта на същата програма.

Функционална лента. Представената многопроцесорна структурна равнина е удобна за решаване на двумерни задачи. За решаване на триизмерни проблеми би било по-удобно да имате структура, изградена по подобен начин, но с три измерения. Въпреки това, дори в едномерния случай, такава структура прави възможно широкото използване на паралелизма за решаване на широк кръг от проблеми. Структура, подобна на функционална равнина, но имаща едно измерение, ще се нарича функционална линийка.

Такава структура работи с логически функции от една променлива. Функционалната лента е аритметична единица, която извършва трансформация на една или повече логически функции във всеки цикъл. Във всеки цикъл се изпълнява един логически оператор. По-специално, този оператор може да бъде функционален, т.е. резултатът от неговото действие не е функция, а число. Естествено, възможностите на функционалната линийка са по-малки от тези на функционалната равнина. Въпреки това, използвайки няколко функционални линии от различни типове в една структура, е възможно да се организира тяхното взаимодействие по такъв начин, че да се осигури добро паралелизиране на задачите.

Нека аритметичната единица, която изпълнява функционалната лента, е оборудвана с четири регистъра A, B, C, D. Всеки от тези регистри съхранява информация за логическа функция. Според структуратарегистърът на логическата функция е разделен на n части (n е броят точки, в които е зададена функцията). Всяка част съдържа m бита. Така всеки регистър A, B, C, D съдържа n×m бита. Ще приемем, че стойността на аргумента за функцията е зададена позиционно, стойностите на аргумента са номерирани отляво от 0 до n-1. В реални задачи се работи с функция, дефинирана в краен брой точки x1,…, xn. Тогава стойностите на функцията в точките x1,…, xn ще бъдат записани последователно в регистъра.

Регистрите A и C се считат за вход за аритметичната единица. Регистрите B и D са изходни, те съдържат резултата, получен след прилагане на логическия оператор.

За пълноразмерна аритметична единица, т.е. за устройство, където m е голямо, следната система от оператори е удобна, служеща като командна система: