nedoPC-580 (SMP на 5 процессорах КР580ВМ80А)

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Задача распараллеливания некоего процесса - это из области сетевого планирования. Для классических языков может решаться, как сказал Shaos, через препроцессоры компиляции, когда препроцессор анализирует код, сортирует процедуры и строит диаграмму загрузки с учетом количества используемых процессоров и добавляет код управления в основной код программы. Ну или свой язык с компилятором надо придумывать.

Есть математические описания алгоритмов для распараллеливания. Рыть надо в сторону диаграмм Ганта. Это штуки универсальные, годные не только и не столько для вычтехники.

Вот же блин комом - еще чего то помню с института.
Щас Lavr напишет что опять общие фразы, тра-ля-ля ;)
Эээх, что-то я совсем в бух софте погряз.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

"общие фразы, тра-ля-ля :wink: "
jdigreze просил - не хочу его разочаровывать в его прогнозе... :lol:

дело в том, что я не хочу и не собираюсь весь софт для "Спеца" переписать...
Я читал тему сначала и заинтересовался вот этим:
cr0acker wrote:А зачем нам ОСЬ, когда у нас уже ЯВУ для этого еесть :)
http://www.shaos.ru/papers/rw1_para.txt
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:"общие фразы, тра-ля-ля :wink: "
jdigreze просил - не хочу его разочаровывать в его прогнозе... :lol:

дело в том, что я не хочу и не собираюсь весь софт для "Спеца" переписать...
Я читал тему сначала и заинтересовался вот этим:
cr0acker wrote:А зачем нам ОСЬ, когда у нас уже ЯВУ для этого еесть :)
http://www.shaos.ru/papers/rw1_para.txt
Вот дословное содержимое вышеприведённого документа:

Code: Select all

RW1 КАК ЯЗЫК ПРОГРАММИРОВАНИЯ ПАРАЛЛЕЛЬНЫХ ПРОЦЕССОВ
----------------------------------------------------

Copyright (c) 2002, Alexander Shabarshin (shaos@mail.ru)

В статье затрагивается возможность использования языка
программирования роботов RW1 в качестве языка 
параллельных процессов.

Язык RW1 к версии 2.0 прошел путь от ассемблероподобного
языка к языку типа С (http://shaos.ru/papers/rw1_r.htm). 
Чтобы представить специфику языка, приведем пример простой
программы:

 robot "Program 1"
 author "A.Shabarshin"
 +rw1_std.rwi
 main()
 {
  while(1)
  {
   // вечный цикл
  }
 }

Данная программа не делает ничего, но в ней можно увидеть
то, что должно быть обязательно в любой RW1 программе.
Это ключевое слово ROBOT, за которым следует имя программы 
в кавычках. Слово AUTHOR, за которым идет имя автора 
программы в кавычках. Основная функция программы main(), 
которая должна быть самой первой функцией программы. 
Кроме того, внутри программы организуется вечный цикл. 
В файле RW1_STD.RWI определены некоторые полезные макросы.

Будем подразумевать, что мы используем подход RW1P1 -
Robot Warfare 1 Platform 1, что может быть перенесено и
на RW1P2 (см. http://shaos.ru/papers/rw1_r.htm#RW1P1).

В среде исполнения может быть запущено несколько роботов
(программ), которые могут взаимодействовать друг с другом
посредством сообщений. Каждый робот в системе имеет
свой уникальный идентификационный номер, который можно
узнать, прочитав регистр I. Например, так:

 id=I; say "&id "

Идентификаторы присваиваются начиная с 1. Идентификатор
0 обозначает всех роботов в системе (для широковещательных
сообщений). 

Самым простым типом сообщений является передача одного 
числового значения с помощью команды SEND, которое 
может быть принято командой RECV. Пример:

 send -13 10 // отправить роботу с номером 10 число -13
 recv info   // если буфер не пуст, принять число и 
            // сохранить его в переменной info

Команда RECV является очень информативной - кроме 
сохранения принятого числа, она располагает некоторую
информацию в регистрах робота: регистр N - порядковый 
номер робота-передатчика (если N равен 0, то буфер 
принятых сообщений пуст); в регистрах X и Y записываются 
относительные координаты робота-передатчика (в случае,
если пространственная привязка имеет смысл); в регистр 
K помещается значение времени, в которое был отправлен код.

Такое почисловое взаимодействие не предназначено для 
передачи больших объёмов данных между роботами.
Более мощным средством межпроцессного обмена языка RW1,
появившемся в версии 2.1, это прием/передача "пакетов".
Итак, что же такое пакет в языке RW1? Пакет - это массив
чисел, первое из которых обозначает количество оставшихся.
Например:

 def pack1[5] = {4, 1,2,3,4}

В данном случае создается массив pack1, который является
RW1-пакетом с длиной 4. Этот пакет можно передать в
качестве сообщения другому роботу с помощью команды SENDP:

 sendp pack1 10    // отправить пакет роботу 10, или
 sendp pack1[0] 10 // то же самое

Если вы смогли догадаться, можно отправить и часть массива,
и даже не с нулевого элемента. Пример:

 sendp pack1[2] 10 // отправляем пакет c ячейки 2 - в ней 
 // мы имеем число 2, поэтому отправляем следующие 2 числа

Прием пакета осуществляется командой RECVP:

 def pack0[10]
 recvp pack0 
 if(n) say "принят пакет размером &pack0[0] ячеек"
 else  say "ошибка приема"

Для копирования пакетов используется команда COPYP:

 copyp target source // копирование пакета из source 

Интересно отметить, что пара SEND и RECVP совместимы. 
Только при этом одно число будет превращаться в пакет из 
двух значений, первое из которых будет 1. Вторая пара
SENDP и RECV совместима лишь частично - при этом происходит
потеря всех данных за исключением длины пакета. Так 
что если вы решили использовать для межпроцессного 
взаимодействия пакеты, не пользуйтесь командой RECV,
а приходящие отдельные сообщения (посланные командой
SEND) успешно принимаются пакетной командой RECVP
(как было указано выше).

Итак, типовая программа-робот будет выглядеть так:

 robot "Program 2"
 author "A.Shabarshin"
 +rw1_std.rwi
 main()
 { 
   // определение и инициализация массивов
   def buff[256];
   time = 0 // определение момента активности
   while(1)
   { // вечный цикл
     if(time>=T)
     { // некие действия
       send 111 // послать широковещательное сообщение
       // возможно тут будет переназначение time
     }
     recvp buff // получение сообщения
     if(n) 
     { // анализ полученного сообщения
       say "> &n &x &y &k received"
     }
   }
 }

Следует разъяснить что у нас будет храниться в переменной 
TIME. Здесь мы будет сохранять метку времени, по достижению
которой наш робот должен проявить некую самостоятельную 
активность. Регистр T используется для контроля времени - 
в нем хранится количество тиков от момента старта системы.
Если мы имеем привязку к реальному времени (+RW1P1.RWI), 
то в T хранится время в десятых долях секунды (другое 
значение делителя может быть установленно отдельно).
Кроме того, активность будет проявляться при получении 
какого-либо сообщения извне. 

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

 robot "Program 3 - count me"
 author "A.Shabarshin"
 +rw1_std.rwi
 +rw1p1.rwi
 main()
 {
   def buff[256];
   def robots[100]; // надеюсь их будет не больше 100 ;)
   nrobot = 0  // начальное значение счетчика
   time = 0 // определение момента активности
   while(1)
   { // вечный цикл
     if(time>=T)
     { // некие действия
       send 111 // послать широковещательное сообщение
       time = time + @TIME_SEC(3) // повторить через 3 секунды
     }
     recvp buff // получение сообщения
     if(n) 
     { // анализ полученного сообщения
       
     }
   }
 } 



                      Александр Шабаршин        14.01.2002
P.S. содержимое упомянутого в тексте документа rw1_r.htm можно посмотреть тут: viewtopic.php?t=9439
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
cr0acker wrote:А зачем нам ОСЬ, когда у нас уже ЯВУ для этого еесть
http://www.shaos.ru/papers/rw1_para.txt
Вот дословное содержимое вышеприведённого документа:
...
А что-нибуть реально под этим работало?
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:
cr0acker wrote:А зачем нам ОСЬ, когда у нас уже ЯВУ для этого еесть
http://www.shaos.ru/papers/rw1_para.txt
Вот дословное содержимое вышеприведённого документа:
...
А что-нибуть реально под этим работало?
Приведённый программы работали в интерпретаторе RW0-байткода
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Lavr wrote:дело в том, что я не хочу и не собираюсь весь софт для "Спеца" переписать...
А прийдётся!
В противном надо заморачиваться виртуализацией ресурсов. Это несколько усложнит схемотехнику, и всё равно часть софта пойдёт лесом. Самый простой вариант - приделать к готовому компу внешнее управление от супервизора, правда к симметричной многозадачности это не будет иметь никакого отношения. Увы и ах. :(
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Незнаю что насчёт спеца, а в рк хорошим тоном считалось писать софт (как минимум системный) с использованием только стандартных входов монитора - т.е. никакого самостоятельного опроса клавы и т д - в этом случае переписыванию подлежит только монитор, а стандартные программы вполне могут работать на новом железе
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Незнаю что насчёт спеца, а в рк хорошим тоном считалось писать софт (как минимум системный) с использованием только стандартных входов монитора
Да это вобщем-то по жизни хороший тон - писать программы со стандартными вызовами, но кто ж на "Спеце" стандарты-то вводил...
Их там три, если не больше - так что вариантов пруд-пруди.
Для эффективности писали как удобно...

jdigreze wrote:
Lavr wrote:дело в том, что я не хочу и не собираюсь весь софт для "Спеца" переписать...
А прийдётся!
Во как!!! :wink:
"Это не наш метод - мешать портвейн с водкой..." :lol:
Почему бы этим не заняться ОСи - запускать приложения и выполнять функцию диспетчера?
Иначе затея теряет смысл.... :cry:
"правда к симметричной многозадачности это не будет иметь никакого отношения. Увы и ах."
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Lavr wrote:Почему бы этим не заняться ОСи - запускать приложения и выполнять функцию диспетчера?
Теоретисськи - можно. Только вот приложение от этого не выиграет. Комбинация явно патовая.
А смысл затеи есть - потрогать ручками, как это оно устроено, да еще и работает.

Лирическое отступление в тему "потрогать ручками": В свое время меня поразила книжица, если не ошибаюсь, от препода MIT по сетям, типа методички для студентов. Поразила обилием фраз: "берёте вон те м/с и вот этот проц, собираете из этого всего комп, связываете свои компы, пишете им протоколы" и т.п.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:потрогать ручками, как это оно устроено, да еще и работает
Не то чтобы хотелось, но и сейчас хочется.
Но вот с возрастом я отвык от "мазохизма" и привык больше спать по ночам.
Переписать весь софт "Спеца" - честно не возьмусь.
И ОС в одиночку - точно знаю - не осилю.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:В свое время меня поразила книжица, если не ошибаюсь, от препода MIT по сетям, типа методички для студентов. Поразила обилием фраз: "берёте вон те м/с и вот этот проц, собираете из этого всего комп
Интересная, наверно, книжица... конкретная... Методички и книги для студентов грешат тем,
что ничего по ним сделать зачастую нельзя, а обобщений - завались.
Вот типичный пример, здесь предлагали:
Есть книга для студентов по проектирование микропроцессоров
viewtopic.php?t=9214
Я не поленился и скачал - дык наблюдение кольца "самогонных" процессоров
при минимуме текста дало мне куда больше для понимания. Просто схемы...
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Дык это как раз к вопросу о "пощупать руками". Теорию надо подкреплять практикой. Хотя, на мой взгляд, 580й с этой точки зрения не лучший выбор для реализации железа. Софту по-большей части всё равно, как проводить физическое распараллеливание.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:580й с этой точки зрения не лучший выбор для реализации железа
Согласен - но хотелось совместить приятное с полезным. Раз уж HardWareMan
делает новый "Специалист", и СОЗУ позволяет, почему бы не рискнуть попробовать
многозадачность и распараллеливание?
Тем более мы сделали лишь черновые прикидки, а он, глядишь и двухпроцессорный
"Специалист" забабахает... он такой :3
Главное тут не усираться, а чтоб оно так и шло - for fun...
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Интересно, что тема во второй раз "уходит в песок"...
Вот здесь была попытка придумать параллелизм:
viewtopic.php?t=8372
но закончилась весьма похоже...
Shaos wrote:
jdigreze wrote:Ведь фактически, можно построить вычислительный комплекс на базе, например AVR, используя часть процессоров как комутаторы шины, а часть как интерпретаторы RW0... В результате получим систему, подобную несимметричному мультипроцессингу. Правда, придется модифицировать интерпретатор на работу с распределенными вычислениями.
Ну RW0-процессы умеют в распределённой среде работать - читаем вот это: http://shaos.ru/papers/rw1_para.txt
Видимо, вопрос не столь прост. С шашками наголО не решается... :-?
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

А сама затея умы всё ж будоражит... Здесь на форуме два раза возникала,
вот и на http://zx.pk.ru/ подобное тёрли, и дотёрли до кода. Я, правда,
не вник с разбегу, получилось что или нет, но топик интересный: :kruto:
Менеджер памяти для многозадачной ОС
http://zx.pk.ru/archive/index.php/t-507.html