Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт сен 20, 2018 15:15

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Идея технического решения проистекает из некоторого дефицита накристальной памяти в ПЛИС. Суть заключается в обеспечении совместного доступа двух процессорных ядер к одному блоку памяти (поскольку она двупортовая). В этом случае все определенные слова становятся доступны обоим ядрам, но вот исполнять код они будут совершенно независимо. Для этого, конечно, требуется, чтобы они стартовали с разных адресов. Также тут есть некоторая сложность в обеспечении загрузки и модификации программ, поскольку для этого удобно использовать второй порт, а тут он оказывается занят.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Aналогично происходит с памятью, имеющей несколько тактов latency...
Делается несколько ядер с раздельным по времени доступом к памяти:
Трехъядерный форт-процессор в ПЛИС

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Aналогично происходит с памятью, имеющей несколько тактов latency...
Делается несколько ядер с раздельным по времени доступом к памяти:

О! А этот момент я как-то выпустил. Действительно, можно же еще запустить память на кратной частоте, и получится 4 ядра. Насчет шести не уверен, но в два-то раза поднять частоту можно. Причем у Xilinx не будет проблем с латентностью, потому что ее нет.


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

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

А другая возможность появления латентности у памяти - использование внешней синхронной статической памяти.

Так же, дополнительная латентность появится, если синхронно мультиплексировать внутреннюю шину процессора. При стыковке устройств с разной латентностью на шине, может даже потребоваться дополнительные регистры включать на пути данных от быстрых устройств. А вот, при добавлении в такую систему медленных устройств, уже надо железную организацию раздельного доступа делать и у каждого ядра свой сигнал ожидания появится... Например, одно ядро ждет, когда флешка данные выдаст, остальные крутятся на внутренней памяти. А на синхронной шине надо к флешке специальный контроллер делать, который поймав запрос от одного ядра дает ему доступ к флешке, если же в этот момент и другое ядро захотело данных от флеша, ему должен выставиться сигнал ожидания.

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

Примерно, вот так это видится:

Изображение

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
В этом случае общая производительность остается такой же. А с двупортовой памятью можно организовать именно совместный доступ двух ядер (при повышении частоты памяти - и четырех). При этом производительность каждого из ядер не уменьшается.


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4945
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
Хищник писал(а):
В этом случае общая производительность остается такой же. А с двупортовой памятью можно организовать именно совместный доступ двух ядер (при повышении частоты памяти - и четырех). При этом производительность каждого из ядер не уменьшается.

только тогда надо делать запрещение доступа к одному адресу одновременно двух процессоров.
кроме того логично в железе сделать аналог семафора или мьютекса.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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

Это только в том случае, если конвеер не позволил поднять тактовую частоту процессора.

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


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

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


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

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
mOleg писал(а):
только тогда надо делать запрещение доступа к одному адресу одновременно двух процессоров.
кроме того логично в железе сделать аналог семафора или мьютекса.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Хищник писал(а):
В этом случае общая производительность остается такой же.

Это только в том случае, если конвеер не позволил поднять тактовую частоту процессора.

Да он тут вроде бы чуть в стороне стоит. Речь о том, что обычно пропускная способность блочной памяти оказывается использованной не до предела, поскольку она и так дает частоту в 2-3 раза выше, чем позволяет софт-процессор, а у нее еще и два порта. Обобщение ресурсов с арбитражем - стандартный прием, но арбитраж может привести к снижению производительности из-за простоев при совместном доступе. А с двумя портами таких простоев не будет, поскольку два ядра могут спокойно исполнять каждый свой код. Мне потому и видится термин multithreading, что это по сути исполнение одной и той же программы в двух разных местах.


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

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

Вот, пусть предельная частота памяти - 300MHz, а частота ядра процессора - 100MHz.
В этом случае, скорость исполнения - 100млн. инструкций в секунду (считая, что на одну инструкцию нужен один такт процессора).
Ставим двухпортовую память - получаем 200млн. инструкций в секунду (как общую цифру).
А теперь берем процессорное ядро и разбиваем его работу на три стадии (3-хступенчатый конвеер) и добиваемся, чтобы тактовая частота работы такого процессора была 300MHz. При этом его скорость работы остается 100MIPS (300/3).
Если же теперь сделать схему, которая будет прогонять по конвееру данные не одного ядра, а трех - общая скорость станет 300MIPS, a при двухпортовой памяти - 600MIPS.

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

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

уже не будет.

Тоже самое можно было бы сделать, переведя память в мультиплексированный режим доступа (сделать ее 2x3=6-портовой) и навесив 6 полноценных ядер. Вот только на такую схему будет потрачено значительно больше ресурсов ПЛИС, чем при конвееризации и обработке на одном конвеере нескольких ядер.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
А теперь берем процессорное ядро и разбиваем его работу на три стадии (3-хступенчатый конвеер) и добиваемся, чтобы тактовая частота работы такого процессора была 300MHz. При этом его скорость работы остается 100MIPS (300/3).

Это уже несколько отдельное направление. Конвейеризация - хорошее дело, но в случае, когда нет "пузырей". А в стековой архитектуре они будут более вероятны, чем в регистровой, поскольку практически все проходит через вершину стека. Кроме того, частые call/ret также приводят к сбросу конвейера, заставляя процессор "прокачивать" новые команды. Поэтому для стекового процессора чрезмерное дробление на такты не приводит к пропорциональному росту производительности. Оно и вообще не приводит, потому что штрафы за непредсказанный переход есть где угодно, но для Форта два особо неблагоприятных фактора - частые нарушения линейного порядка исполнения и постоянная запись в стек с последующим чтением записанного. Поэтому я склоняюсь к достаточно умеренной частоте собственно форт-ядра.


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

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

Штрафы за переходы и сброс конвеера - это плата за intel-евский подход к построению конвеера. Это в конвеере x86 такая гадость (и, похоже, во многих других процессорах тоже), а в нормальном конвеере подобное можно избежать. Надо всего лишь не стремиться на каждом шагу конвеера исполнять одно и то же ядро. Когда же будет множество ядер, исполняемых на конвеере в полном смысле значения слова "конвеер", тогда никаких штрафов и сбросов не будет. Ядро будет исполнять ровно тот же код, как и без конвеера, ровно с теми же временными затратами на переходы, вызовы, возвтраты и ветвления. А конвеер будет обслуживать одновременно несколько таких "медленных" ядер, давая в сумме общую производительность без лишних потерь.

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

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6403
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
WingLion писал(а):
Штрафы за переходы и сброс конвеера - это плата за intel-евский подход к построению конвеера. Это в конвеере x86 такая гадость (и, похоже, во многих других процессорах тоже), а в нормальном конвеере подобное можно избежать. Надо всего лишь не стремиться на каждом шагу конвеера исполнять одно и то же ядро.

Он не только у Интела. Если за три такта исполняется часть операций на трех разных процессорах, то это просто расфазировка на три ядра. При этом размер-то все равно увеличивается в три раза, так что суммарная производительность чипа остается на том же уровне. Я свои рассуждения начал с того, что заметил, что новое ядро влезает в количестве 8-10 штук в ПЛИС, где 20 блоков памяти и 20 умножителей. А поскольку на умножение 32*32 надо 3 блока, то получилось, что надо обобщать какие-то ресурсы - по 3 блока умножения на ядро не получится. А начав размышлять об умножителях, я и пришел к выводу, что блочная память обобщается очень просто, и это не обычный совместный доступ с арбитражем, а именно независимое использование общего куска памяти. Для Форта это вполне приемлемо, потому что там можно держать общие библиотеки.


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

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


Увеличивается в три раза только количество тригеров, но _не логика_!

А логика используется одна на все три ядра.

Попробую это объяснить на пальцах..

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

Xn=Reg(f(Xn-1)) <- и это исполняется каждый такт процессора.

Теперь берем и конвеизируем его:

f(X)= f3(f2(f1(X))) <- это разбиение логики на ступени конвеера

Xn= Reg(f3(Yn-1));
Yn-1 = Reg(f2(Zn-2));
Zn-2= Reg(f1(Xn-3));

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

Смысл в том, что память крутится на своей предельной частоте, а на ней "неспеша" (со своим пределом) работают сразу три ядра.

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


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

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


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

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


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

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