Russian Qt Forum
Ноябрь 26, 2024, 17:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Параллельные вычисления (проблемы)  (Прочитано 22345 раз)
vaprele07
Гость
« Ответ #15 : Декабрь 11, 2009, 05:11 »

Вот здесь много материалов по теме: http://software.intel.com/ru-ru/
Записан
niXman
Гость
« Ответ #16 : Декабрь 11, 2009, 06:33 »

Табличку скачать не получается Грустный
Записан
niXman
Гость
« Ответ #17 : Декабрь 11, 2009, 07:10 »

Все равно многого не понятно.

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

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

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

Выбирайте.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Декабрь 11, 2009, 07:43 »

У меня в чистом виде реализован вариант "2". Ну можно еще добавить что относительно небольшая часть расчетов (5-10%) не распараллелена и выполняется главной ниткой
Записан
niXman
Гость
« Ответ #19 : Декабрь 11, 2009, 07:54 »

Если это так, и принцип делегирования реализован !правильно!, то самое время подумать над кластером.


п.с.
могу помочь.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Декабрь 11, 2009, 08:31 »

Если это так, и принцип делегирования реализован !правильно!, то самое время подумать над кластером.
Про делегирование ничего не слышал Улыбающийся Главная нитка помещает задачи в очередь. Как только в очереди окажется N (размер кластера) задач - все рабочие нитки снимаются со своих семафоров и начинают брать задачи из очереди (также кластером из N задач). N в моих руках, управляемо. Послав все задачи, главная нитка засыпает на семафоре но перед этим досылает еще по одной "псевдо-задаче" (для каждой рабочей нитки). Получив задачу-терминатор, рабочая нитка засыпает на своем семафоре. Последняя засыпающая открывает семафор главной нитке. Это все Улыбающийся
Записан
niXman
Гость
« Ответ #21 : Декабрь 11, 2009, 08:39 »

Из описания правильно.
Допустим. У вас 4 ядра, и 4 рабочих нитки.
1. скажите, рабочие нитки загружены на 100 процентов?
2. сколько раз(за время своей жизни), в сумме, происходит блокировка разделяемого ресурса нитками?
Записан
niXman
Гость
« Ответ #22 : Декабрь 11, 2009, 09:44 »

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

Цитировать
Как только в очереди окажется N (размер кластера)
Под словом кластер, я подразумевал аппаратный кластер. Во имя достижения большего кол-ва аппаратных процессоров.
Записан
niXman
Гость
« Ответ #23 : Декабрь 11, 2009, 09:48 »

Вот здесь много материалов по теме: http://software.intel.com/ru-ru/
Вот было любопытно, посмотреть, что вы такого порекомендовали. Но, оказалось, что ваша ссылка, равносильна этой: http://www.*

Очень познавательно Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Декабрь 11, 2009, 14:02 »

Из описания правильно.
Допустим. У вас 4 ядра, и 4 рабочих нитки.
1. скажите, рабочие нитки загружены на 100 процентов?
2. сколько раз(за время своей жизни), в сумме, происходит блокировка разделяемого ресурса нитками?
1) Увы, совсем не на 100% (принимаем 100% = все 4 загружены до упора). Типичная загрузка только 65-70%, а очень хотелось бы большего. Остальное idle, а когда N неудачно -  появляется довольно мощный overhead (монитор показывает его как "system" красным).

2) Блокировки конечно есть для I/O и.т.п. Но в тестах реально работает только одна - для выборки ниткой следующей пачки задач из очереди. Реализация QSpinLockLock/QSpinLockUnlock (это OSX аналог QAtomicInt).

Тесты показывают что "львиная доля" тратится на подъем/усыпление рабочих ниток на семафорах. Не вижу возможности сделать 1 семафор для всех ниток (получается каждая должна иметь свой) да и неясно помогло бы это - ведь усыпление все равно будет.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Декабрь 18, 2009, 15:38 »

Добрый день

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

К сожалению, OpenMP никак не быстрее ручной реализации. На совсем маленьких расчетах время примерно то же самое (хотя с OpenMP диаграмма загрузки выглядит гораздо стабильнее). А вот с увеличением числа расчетов OpenMP начинает проигрывать. Не так уж много но заметно, например 87 секунд против 76  Плачущий

Сейчас качаю Intel компилятор, хочу проверить еще с ним.
Записан
niXman
Гость
« Ответ #26 : Декабрь 18, 2009, 16:39 »

не думаю что твое видение решения, окажется верным. тут проблема в архитектуре/реализации.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Декабрь 18, 2009, 17:15 »

не думаю что твое видение решения, окажется верным. тут проблема в архитектуре/реализации.
Трудно понять, мудрено выражаетесь Улыбающийся Так в архитектуре или реализации? (часто это употребляется в смысле стратегия/тактика). Насчет видения - ну я пока ничего не вижу, буду благодарен за свежие идеи (пусть и экспериментальные).
Записан
niXman
Гость
« Ответ #28 : Декабрь 18, 2009, 18:13 »

Цитировать
Трудно понять, мудрено выражаетесь
даже и не думал.

Цитировать
Так в архитектуре или реализации?
возможно и там, и там..

Цитировать
(часто это употребляется в смысле стратегия/тактика)
не понял сравнения.

Цитировать
Насчет видения - ну я пока ничего не вижу, буду благодарен за свежие идеи (пусть и экспериментальные).
я лишь хочу сказать, что многие думают: вот заюзаю MPI[CH] и все, избавлю себя от проблем с синхронизацией/распределением/реализацией в такой-то задаче. но нет, если бы все было так просто Подмигивающий

я задавал вопрос:
Цитировать
сколько раз(за время своей жизни), в сумме, происходит блокировка разделяемого ресурса нитками?
вы так и не ответили.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Декабрь 18, 2009, 18:48 »

сколько раз(за время своей жизни), в сумме, происходит блокировка разделяемого ресурса нитками?
Извините за возможные непонятки, мой ответ был
2) Блокировки конечно есть для I/O и.т.п. Но в тестах реально работает только одна - для выборки ниткой следующей пачки задач из очереди. Реализация QSpinLockLock/QSpinLockUnlock (это OSX аналог QAtomicInt).
То есть при использовании OpenMP блокировок нет вообще, все потери на синхронизации. Повторюсь также про трудоемкость 1 пикселя (для вычисления которого привлекаются все нитки)
32 sec / (80 * 1000) 
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.106 секунд. Запросов: 22.