Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 11:52

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Вс июн 06, 2010 15:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
А вот так более показательно, пожалуй.

Код:
CREATE X[] 1000 CELLS ALLOT

: SUM-ARRAY \ index1, index2 -- sum
  0
  ROT ROT DO
    X[] I -TH @ +
  LOOP
;

VARIABLE SUM2

: MAIN1  \ точка старта первого ядра
  500 0 SUM-ARRAY
  SUM2 @ +
\ теперь на стеке первого ядра сумма элементов массива X[]
;

: MAIN2  \ точка старта второго ядра
  1000 500 SUM-ARRAY
  SUM2 !
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Вс июн 06, 2010 15:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
При условии, что выполнение MAIN1 стартует не раньше чем выполнение MAIN2, иначе, в SUM2 в нужный момент для MAIN1 окажется неполная сумма второй половины массива или совсем белиберда...

p.s. усе... я уехал до вторника...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Вс июн 06, 2010 16:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
При условии, что выполнение MAIN1 стартует не раньше чем выполнение MAIN2, иначе, в SUM2 в нужный момент для MAIN1 окажется неполная сумма второй половины массива или совсем белиберда...

Раз они тактируются одним и тем же генератором, то куда же они денутся?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Вс июн 06, 2010 23:35 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Вот, кстати, из википедии (просто чтобы быстрее)
Цитата:
Сутью многопоточности является квазимногозадачность на уровне одного исполняемого процесса, то есть все потоки выполняются в адресном пространстве процесса. Кроме этого, все потоки процесса имеют не только общее адресное пространство, но и общие дескрипторы файлов. Выполняющийся процесс имеет как минимум один (главный) поток.

Многопоточность (как доктрину программирования) не следует путать ни с многозадачностью, ни с многопроцессорностью, несмотря на то, что операционные системы, реализующие многозадачность, как правило реализуют и многопоточность.


Цитата:
Многозада?чность (англ. multitasking) — свойство операционной системы или среды программирования обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких процессов.


Т.е. многопоточность - это по определению работа в одном адресном пространстве. Что, собственно, я и хотел отметить выбором термина multithreading.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Ср июн 09, 2010 09:05 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
Раз они тактируются одним и тем же генератором, то куда же они денутся?


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

Но, тем не менее, подобное использование ядер означает, что они работают над одной задачей. А у одной задачи адресное пространство, как раз, одно, потому в нем вполне могут копошиться несколько ядер одновременно. И тогда у них и код общий, и данные общие, и начальник один.

А у разных задач данные все-таки разные. Если же они общие, то формально - это как бы одна задача.
Впрочем, можно сказать, что вся система со всеми исполняемыми приложениями - одна задача, и у них все общее.
И требование разделение данных между тредами можно назвать бзиком программиста.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Ср июн 09, 2010 22:58 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
Ну, мало-ли, вдруг на одного из них страшный WAIT нападет и отъест процессорное время?
Или еще чего стрясется, и супервизор решит, что нефиг фигней маяться, пора прерыванием заняться и подаст его только одному ядру, а не обоим одновременно.
Да и запуск на исполнение частей задачи может произойти не синхронно.

А как может напасть WAIT, если оба ядра работают с физически одним и тем же блоком памяти? Если у одного WAIT, то и у другого. Аналогично с прерыванием - блок один, кому приходит прерывание, понятно сразу. Да и при таких свойствах я бы как раз вообще не делал прерывания, а использовал подобные сдвоенные ядра для распараллеливания вычислений на уровне кода.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 00:31 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
я бы как раз вообще не делал прерывания
и зациклившийся процесс осталнавливался бы только вместе с компьютером - методом выдёргивания из розетки - если нет 3 клавиш , но ведь они тоже - прерывание :o


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 00:45 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
А как может напасть WAIT, если оба ядра работают с физически одним и тем же блоком памяти? Если у одного WAIT, то и у другого.


Вот, с этим, не согласен в корне.
Представим простейший вариант - несколько ядер на одной шине, и на этой же шине -
вместе с быстрой памятью, работающей без задержек со всеми ядрами, есть некая довольно медленная память, которая способна одновременно работать только с одним ядром.
Тогда, ядро, работающее с этой памятью - "нормально работает", а все остальные ядра, если пытаются работать с этой памятью - нарываются на WAIT.
Вот и представим, что тот самый массив, который в примере суммируется, находится в такой памяти.
Если же менеджер этой памяти позволяет попеременно работать с этой памятью всем ядрам, например, по принципу "кто смел, тот и съел", то WAIT-ы начнут приходить к разным ядрам почти непредсказуемо (по псевдослучайному закону). И, данные тоже будут обрабатываться так же непредсказуемо по времени.

Хищник писал(а):
Аналогично с прерыванием - блок один, кому приходит прерывание, понятно сразу.


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

Хищник писал(а):
Да и при таких свойствах я бы как раз вообще не делал прерывания, а использовал подобные сдвоенные ядра для распараллеливания вычислений на уровне кода.


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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 00:46 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
вопрос писал(а):
методом выдёргивания из розетки


А кнопку RESET отменили зря.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 00:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
вопрос писал(а):
и зациклившийся процесс осталнавливался бы только вместе с компьютером - методом выдёргивания из розетки - если нет 3 клавиш , но ведь они тоже - прерывание

Процесс чего? И в чем - в FPGA? Еще раз отсылаю к началу топика - речь идет об экономии памяти в простых встроенных системах на базе ПЛИС, когда память кончается быстро, а логические ячейки еще есть, и в них можно разместить второе ядро. В таких системах точно нет "трех клавиш"... там иногда и просто трех (любых) клавиш не набирается :) Методы борьбы с зацикливаниями там совершенно иные - софт отлаживается до состояния, когда зацикливаний в пределах программы испытаний просто нет. Потому что я просто не знаю, как и чем можно в процессе эксплуатации отлаживать коробку, висящую на стене, или контроллер, у которого наружу торчат только провода для какого-нибудь двигателя.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 00:53 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
Вот, с этим, не согласен в корне.
Представим простейший вариант - несколько ядер на одной шине, и на этой же шине -
вместе с быстрой памятью, работающей без задержек со всеми ядрами, есть некая довольно медленная память, которая способна одновременно работать только с одним ядром.
Тогда, ядро, работающее с этой памятью - "нормально работает", а все остальные ядра, если пытаются работать с этой памятью - нарываются на WAIT.

А такая ситуация не стыкуется с заявленными в самом начале условиями - наличии совместного доступа к быстрой двупортовой памяти. Если память медленная и однопортовая - пусть ей занимается одно ядро. А речь идет о том, чтобы прицепиться к двупортовой памяти еще и с другого бока, чтобы ячейки не простаивали.
WingLion писал(а):
Тем не менее, если есть чисто мультиядерная система с несколькими ядрами, работающими на общей шине, прерывания ей все равно понадобятся (когда-нибудь - наверняка). И тогда от этого вопроса уже не удастся отмахнуться, а придется решать.

Ну так он и будет решен другим способом :) Ядро, обслуживающее прерывания, будет построено просто иначе - с монопольным доступом к своему куску памяти. А то, про что я написал, будет просто слегка ускорять вычисления общего характера. Никто же не говорит, что все ядра надо именно так и организовать, попарно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 01:04 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
А такая ситуация не стыкуется с заявленными в самом начале условиями - наличии совместного доступа к быстрой двупортовой памяти. Если память медленная и однопортовая - пусть ей занимается одно ядро. А речь идет о том, чтобы прицепиться к двупортовой памяти еще и с другого бока, чтобы ячейки не простаивали.


Хм... Оно уже как-то на тепличные условия начинает смахивать.
Там - да, согласен, все будет "легко и просто". Вот только "кому сейчас легко?" ;)

Хищник писал(а):
А то, про что я написал, будет просто слегка ускорять вычисления общего характера. Никто же не говорит, что все ядра надо именно так и организовать, попарно.


Угу. Я просто задел вопросы немного более общего характера для подобных систем, потому что не забываю про свой трехъядерный проц, которому все эти вопросы могут встать поперек горла, если не будут решены.
И памяти в ПЛИС мало, а значит, у ядер будет не только общая высокоскоростная память, работающая без задержек, но им придется и с внешней SRAM работать, и с FLASH, и с SD-RAM. А потом еще и порты для внешних устройств полезут как грибы, и тогда вместе с белыми и подберезовиками вылезут и поганки-проблемы.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 01:34 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
Хм... Оно уже как-то на тепличные условия начинает смахивать.
Там - да, согласен, все будет "легко и просто". Вот только "кому сейчас легко?"

Это реалии Xilinx :) Сейчас в тех кристаллах, которыми мы чаще всего пользуемся, процессор занимает по 10-12%. А памяти никогда много не бывает. Ну и вот, раз в память уже уперлись, то процессоры-то можно ставить в параллель. В других ситуациях будут эффективнее другие решения.
WingLion писал(а):
Угу. Я просто задел вопросы немного более общего характера для подобных систем, потому что не забываю про свой трехъядерный проц, которому все эти вопросы могут встать поперек горла, если не будут решены.
И памяти в ПЛИС мало, а значит, у ядер будет не только общая высокоскоростная память, работающая без задержек, но им придется и с внешней SRAM работать, и с FLASH, и с SD-RAM. А потом еще и порты для внешних устройств полезут как грибы, и тогда вместе с белыми и подберезовиками вылезут и поганки-проблемы.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 02:13 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Хищник писал(а):
Ну и вот, раз в память уже уперлись, то процессоры-то можно ставить в параллель. В других ситуациях будут эффективнее другие решения.


Можно и нужно. Я сейчас вижу возможность установить в параллель сразу 6 ядер на одном блоке памяти (Два трехъядерника на два порта памяти). При чем это и с Альтерой и Ксайлинксом сработает, можно сказать, однаково.

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


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

Хищник писал(а):
В крайнем случае, они не будут лазить друг к другу, но какими-нибудь словами вполне смогут пользоваться одновременно, не делая две копии.


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

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Multi-threading для софт-процессора
СообщениеДобавлено: Чт июн 10, 2010 02:27 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
WingLion писал(а):
И, думаю, что "какие-нибудь слова" - могут быть и кодом всего ядра форта,
:hey; О тут как раз нарветесь. Если это слова с данными внутре, хотя бы тот же VARIABLE, будут использоватся совместно без каких нибудь средств синхронизации то каюк вашему форту наступит неминуемо. :<


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB