Мультипроцессорность (мультиядерность)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Мультипроцессорность (мультиядерность)

Сообщение vitaly_l » 27.05.2012 09:50:55

Процессоров, на мат плате бывает: один и много...
Процессоры делятся на: моно и мульти - ядерные...

:?: :arrow: Вопрос: Как управлять мульти-ядерными процессорами?!

Например, если процессор: двух, четырёх или 32 - ядерный...
А я хочу, чтобы каждое ядро - выполняло свою отдельную задачу, именно в параллельном режиме.

Так бывает??? (знаю - бывает)
Точнее, вопрос прозвучит так: Умеет ли Лазарус управлять мультиядерными процессами?
Какие функции этим управляют?



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Мультипроцессорность (мультиядерность)

Сообщение Mr.Smart » 27.05.2012 09:58:40

Этим занимается планировщик задач ОС.
Если данная область интересна, почитайте про OpenMP
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Мультипроцессорность (мультиядерность)

Сообщение vitaly_l » 27.05.2012 10:18:15

Mr.Smart писал(а):почитайте про OpenMP

В OpenMP - сказано что, С++ поддерживает параллельно-процессорную-распределительность и что OpenMP - некоммерческая организация.
Ещё там мультиядерность - регулируется коротенькой функцией...
Значит и Pascal может... (мне так думается)...

Может в Лазарусе тоже есть параллельная-процессорная-распределительность???
Или около того...



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Мультипроцессорность (мультиядерность)

Сообщение Mr.Smart » 27.05.2012 10:55:17

vitaly_l вы вообще поиском пользуетесь???
http://wiki.freepascal.org/OpenMP_support

зы Lazarus здесь совершенно не причём!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Мультипроцессорность (мультиядерность)

Сообщение vitaly_l » 27.05.2012 11:04:46

Mr.Smart писал(а):вы вообще поиском пользуетесь???


поиском пользуюсь, просто я не знал что искать...
А OpenMP я не искал т.к. получается, что в Википедии неполная (почти ложная) информация...

Спасибо.

.

Добавлено спустя 5 часов 50 минут 3 секунды:
Parallel procedures/loops
ProcThreadPool.DoParallel(@FindBestParallel,0,BlockCount-1,@Data);
http://wiki.lazarus.freepascal.org/Mult ... utorial/ru


.


:!: не понимаю...
:arrow: http://wiki.freepascal.org/OpenMP_support
:arrow: Что нужно прописать в uses
:arrow: чтобы стала работать функция: parallel - :?:



/
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Мультипроцессорность (мультиядерность)

Сообщение alexey38 » 28.05.2012 10:13:36

Если Вам действительно интересна данная тематика, то не обязательно начинать с изучения OpenMP. Я бы даже не рекомендовал начинать с этого. Стандарт - вещь хорошая, но желательно вначале понимать всю кухню, тогда будут понятны и очевидны нюансы, которые здесь имеются.

Многопроцессорность - она сильно завязана на операционную систему (ОС). Переключение задач между процессоров осуществляет диспетчер (планировщик) из ядра ОС.
Если программировать под Winodws, то многопроцессорность - это многопоточность. Есть процессы - Procecc, есть потоки Thread. Каждый exe-файл - это Procecc. А потоки внутри exe-файла - это Thread. Для ообявления общей оперативной памяти между несколькими Procecc используются FileMapping (это единственное средство, все другие технологии построены с использованием этого механизма). Между Thread внутри одного Procecc память и так общая.

В Лазаре и Дельфи есть классы под работу с Thread. Они не сложные. Суть проста, указывается процедура, которая начнет выполняться в другом потоке и поток создается. Есть средства WinAPI они примерно соответствуют классам, см. исходники классов.

Основная сложность это распаралелить саму задачу, т.е. определить, что может выполняться паралельно, а что должно выполняться последовательно. Здесь все зависит от программиста. Никакие стандарты здесь не помогут. И далее много нюансов, как заставить синхронизироваться разные потоки, т.к. результаты одних являются исходными данными для других. Здесь есть разные средства, идущие от WinAPI, но есть и классы - обертки. Для синхронизации используются CriticalSection, Mutex, Event, Semaphore и еще есть атомарные объекты. Про все это нужно читать и читать. Так как это базовая основа, а стандарты типа OpenMP используют именно это, но неявно.

Следует понимать, что синхронизация потоков отнимает процессорное время. Если синхронизироваться очень часто, то работать будет медленее.
Например, если есть задача:
С1=А1+Б1
С2=А2+Б2
Д=С1+С2
То разбиение вычисления С1 и С2 на двух ядрах займет намного больше времени, чем все это выполнить на одном ядре в одном потоке. Синхронизация потоков может занимать 100-1000 простых целочисленных команд.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Мультипроцессорность (мультиядерность)

Сообщение VirtUX » 28.05.2012 10:32:08

Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Мультипроцессорность (мультиядерность)

Сообщение vitaly_l » 28.05.2012 13:21:18

alexey38 писал(а):Если Вам действительно интересна данная тематика ..... простых целочисленных команд.

МультиУважаемый alexey38 - безусловно, Вы правы, чтобы понимать досконально - нужно много читать. Однако, практика и скромные знания антропологии - показывают, что в итоге сами ЗНАНИЯ в чистом виде (без воды) - выглядят именно так, как Вы это описали. СПАСИБО НАИГРОМАДНЕЙШЕЕ и дай природа Вам здоровья и т.д., то, что Вы описали - мне очень сильно помогло, теперь я понимаю и вижу суть... как на ладони.., остальное нюансы, т.к. теперь из 360! = 360х359х358х...х1 - направлений, осталось всего 1. Всего одно! и довольные художники, "на радостях" - танцуют А-Джигу...

VirtUX писал(а):http://wiki.lazarus.freepascal.org/Parallel_procedures

Спасибо за ссылку, я уже видел функцию DoParallel итд, однако в Вашем примере больше примеров :) Спасибо!

PS: Если, у кого ни будь, есть ещё, что нить полезное - по данной теме, пожалуйста пишите. Всё пригодится в "копилку"...

И следующий вопрос ещё остался в силе:
Mr.Smart - дал ссылку http://wiki.freepascal.org/OpenMP_support
:!: не понимаю...
:arrow: Что нужно прописать в uses
:arrow: чтобы стала работать функция: parallel - :?:


вот ещё, может кому понадобиться:
http://wiki.freepascal.org/Category:Parallel_programming
http://wiki.freepascal.org/Example_of_multi-threaded_application:_array_of_threads
.
Последний раз редактировалось vitaly_l 10.09.2012 17:12:26, всего редактировалось 2 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Мультипроцессорность (мультиядерность)

Сообщение Kemper » 30.05.2012 18:38:49

Мдааа.... Без понимания, как данные ходят между процессорами и ядрами имхо бестолковая вещь.
Kemper
новенький
 
Сообщения: 61
Зарегистрирован: 18.05.2010 00:29:44


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron