nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 03:24



Reply to topic  [ 413 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7 ... 28  Next
nedoPC-580 (SMP на 5 процессорах КР580ВМ80А) 
Author Message
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Задача распараллеливания некоего процесса - это из области сетевого планирования. Для классических языков может решаться, как сказал Shaos, через препроцессоры компиляции, когда препроцессор анализирует код, сортирует процедуры и строит диаграмму загрузки с учетом количества используемых процессоров и добавляет код управления в основной код программы. Ну или свой язык с компилятором надо придумывать.

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

Вот же блин комом - еще чего то помню с института.
Щас Lavr напишет что опять общие фразы, тра-ля-ля ;)
Эээх, что-то я совсем в бух софте погряз.


25 Feb 2011 22:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
"общие фразы, тра-ля-ля :wink: "
jdigreze просил - не хочу его разочаровывать в его прогнозе... :lol:

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


26 Feb 2011 12:13
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
"общие фразы, тра-ля-ля :wink: "
jdigreze просил - не хочу его разочаровывать в его прогнозе... :lol:

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


Вот дословное содержимое вышеприведённого документа:

Code:
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 можно посмотреть тут: http://www.nedopc.org/forum/viewtopic.php?t=9439

_________________
:dj: https://mastodon.social/@Shaos


26 Feb 2011 23:47
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
cr0acker wrote:
А зачем нам ОСЬ, когда у нас уже ЯВУ для этого еесть
http://www.shaos.ru/papers/rw1_para.txt

Вот дословное содержимое вышеприведённого документа:
...

А что-нибуть реально под этим работало?


27 Feb 2011 07:43
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Lavr wrote:
Shaos wrote:
cr0acker wrote:
А зачем нам ОСЬ, когда у нас уже ЯВУ для этого еесть
http://www.shaos.ru/papers/rw1_para.txt

Вот дословное содержимое вышеприведённого документа:
...

А что-нибуть реально под этим работало?


Приведённый программы работали в интерпретаторе RW0-байткода

_________________
:dj: https://mastodon.social/@Shaos


27 Feb 2011 09:22
Profile WWW
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Lavr wrote:
дело в том, что я не хочу и не собираюсь весь софт для "Спеца" переписать...
А прийдётся!
В противном надо заморачиваться виртуализацией ресурсов. Это несколько усложнит схемотехнику, и всё равно часть софта пойдёт лесом. Самый простой вариант - приделать к готовому компу внешнее управление от супервизора, правда к симметричной многозадачности это не будет иметь никакого отношения. Увы и ах. :(


28 Feb 2011 00:52
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post 
Незнаю что насчёт спеца, а в рк хорошим тоном считалось писать софт (как минимум системный) с использованием только стандартных входов монитора - т.е. никакого самостоятельного опроса клавы и т д - в этом случае переписыванию подлежит только монитор, а стандартные программы вполне могут работать на новом железе

_________________
:dj: https://mastodon.social/@Shaos


28 Feb 2011 05:17
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Shaos wrote:
Незнаю что насчёт спеца, а в рк хорошим тоном считалось писать софт (как минимум системный) с использованием только стандартных входов монитора

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


jdigreze wrote:
Lavr wrote:
дело в том, что я не хочу и не собираюсь весь софт для "Спеца" переписать...

А прийдётся!

Во как!!! :wink:
"Это не наш метод - мешать портвейн с водкой..." :lol:
Почему бы этим не заняться ОСи - запускать приложения и выполнять функцию диспетчера?
Иначе затея теряет смысл.... :cry:
"правда к симметричной многозадачности это не будет иметь никакого отношения. Увы и ах."


01 Mar 2011 08:12
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Lavr wrote:
Почему бы этим не заняться ОСи - запускать приложения и выполнять функцию диспетчера?
Теоретисськи - можно. Только вот приложение от этого не выиграет. Комбинация явно патовая.
А смысл затеи есть - потрогать ручками, как это оно устроено, да еще и работает.

Лирическое отступление в тему "потрогать ручками": В свое время меня поразила книжица, если не ошибаюсь, от препода MIT по сетям, типа методички для студентов. Поразила обилием фраз: "берёте вон те м/с и вот этот проц, собираете из этого всего комп, связываете свои компы, пишете им протоколы" и т.п.


02 Mar 2011 01:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
jdigreze wrote:
потрогать ручками, как это оно устроено, да еще и работает

Не то чтобы хотелось, но и сейчас хочется.
Но вот с возрастом я отвык от "мазохизма" и привык больше спать по ночам.
Переписать весь софт "Спеца" - честно не возьмусь.
И ОС в одиночку - точно знаю - не осилю.


02 Mar 2011 14:46
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
jdigreze wrote:
В свое время меня поразила книжица, если не ошибаюсь, от препода MIT по сетям, типа методички для студентов. Поразила обилием фраз: "берёте вон те м/с и вот этот проц, собираете из этого всего комп

Интересная, наверно, книжица... конкретная... Методички и книги для студентов грешат тем,
что ничего по ним сделать зачастую нельзя, а обобщений - завались.
Вот типичный пример, здесь предлагали:
Есть книга для студентов по проектирование микропроцессоров
http://www.nedopc.org/forum/viewtopic.php?t=9214
Я не поленился и скачал - дык наблюдение кольца "самогонных" процессоров
при минимуме текста дало мне куда больше для понимания. Просто схемы...


04 Mar 2011 13:10
Profile
God

Joined: 02 Jan 2006 02:28
Posts: 1390
Location: Abakan
Reply with quote
Post 
Дык это как раз к вопросу о "пощупать руками". Теорию надо подкреплять практикой. Хотя, на мой взгляд, 580й с этой точки зрения не лучший выбор для реализации железа. Софту по-большей части всё равно, как проводить физическое распараллеливание.


06 Mar 2011 21:20
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
jdigreze wrote:
580й с этой точки зрения не лучший выбор для реализации железа

Согласен - но хотелось совместить приятное с полезным. Раз уж HardWareMan
делает новый "Специалист", и СОЗУ позволяет, почему бы не рискнуть попробовать
многозадачность и распараллеливание?
Тем более мы сделали лишь черновые прикидки, а он, глядишь и двухпроцессорный
"Специалист" забабахает... он такой :3
Главное тут не усираться, а чтоб оно так и шло - for fun...


06 Mar 2011 21:31
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Интересно, что тема во второй раз "уходит в песок"...
Вот здесь была попытка придумать параллелизм:
http://www.nedopc.org/forum/viewtopic.php?t=8372
но закончилась весьма похоже...
Shaos wrote:
jdigreze wrote:
Ведь фактически, можно построить вычислительный комплекс на базе, например AVR, используя часть процессоров как комутаторы шины, а часть как интерпретаторы RW0... В результате получим систему, подобную несимметричному мультипроцессингу. Правда, придется модифицировать интерпретатор на работу с распределенными вычислениями.

Ну RW0-процессы умеют в распределённой среде работать - читаем вот это: http://shaos.ru/papers/rw1_para.txt

Видимо, вопрос не столь прост. С шашками наголО не решается... :-?


21 Mar 2011 08:54
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
А сама затея умы всё ж будоражит... Здесь на форуме два раза возникала,
вот и на http://zx.pk.ru/ подобное тёрли, и дотёрли до кода. Я, правда,
не вник с разбегу, получилось что или нет, но топик интересный: :kruto:
Менеджер памяти для многозадачной ОС
http://zx.pk.ru/archive/index.php/t-507.html


25 Apr 2011 11:09
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 413 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7 ... 28  Next

Who is online

Users browsing this forum: No registered users and 31 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.