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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: parallel transform (параллелим алгоритмы)  (Прочитано 13811 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Ноябрь 07, 2013, 13:39 »

Всё равно можно сделать это проще:
Ну проще это никак не выглядит Улыбающийся И при этом запускающая остается не у дел (а задействовать ее было хорошей идеей). Кроме того Ваш метод не общий, предполагается что size > nthread.

Часто встречается такая задача: есть N треугольников, их площади известны. Распределить по ним заданное число точек, ну напр 100.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #16 : Ноябрь 07, 2013, 13:45 »

Всё равно можно сделать это проще:
Ну проще это никак не выглядит Улыбающийся И при этом запускающая остается не у дел (а задействовать ее было хорошей идеей). Кроме того Ваш метод не общий, предполагается что size > nthread.

1) Да нет, проще же)

2) Запускающая нить не остаётся не у дел) Она всегда отрабатывает, причём в неё заряжается интервал, размером size/nthreads

3) Предложенный метод общий - он работает и в случае size == nthreads  Улыбающийся
пояснение: Если size кратен или равен nthreads, то m == 0. Это означает, что все нитки получат интервалы одинаковой длины size/nthreads.
В противном случае будет выполнятся условие 0 < m < nthreads. При этом запускающая нитка всегда получает интервал size/nthreads
  


Цитировать
Часто встречается такая задача: есть N треугольников, их площади известны. Распределить по ним заданное число точек, ну напр 100.

В смысле есть N площадей и m точек и их нужно разбить на N групп так, чтобы размер каждой был пропорционален соответствующей площади?
« Последнее редактирование: Ноябрь 07, 2013, 18:38 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Ноябрь 07, 2013, 18:30 »

В смысле есть N площадей и m точек и их нужно разбить на N групп так, чтобы размер каждой был пропорционален соответствующей площади?
Да. По сути это та же задача что и разбросать нагрузку по ниткам, только в более общем виде. Напр при N > 100 какие-то треугольники не будут иметь ни одной точки, но при этом другие могут иметь больше одной
« Последнее редактирование: Ноябрь 07, 2013, 18:32 от Igors » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #18 : Ноябрь 07, 2013, 21:36 »

Добавил алгоритм for_each
заменил struct на namespace


Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #19 : Ноябрь 07, 2013, 22:09 »

OpenMP это общий случай, в Qt есть QtConcurrent, классная штука.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #20 : Ноябрь 07, 2013, 22:45 »

OpenMP это общий случай, в Qt есть QtConcurrent, классная штука.

Да, я знаю о QtConcurrent.. Но Qt я редко использую, для моих скромных целей вполне хватает стандартной библиотеки и буста)

Всё же OpenMP - это не общий случай.. Это всего лишь стандарт (открытый) для распараллеливания со своими директивами, процедурами и переменными окружения..
Возможности, предоставляемые для поддержки многопоточности в C++11 выглядят более богаче)

Я ничего не имею против OpenMP, напротив, в некоторых ситуациях openmp более предпочтительнее.. а в каких то не очень)   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #21 : Ноябрь 08, 2013, 09:07 »

Всё же OpenMP - это не общий случай.. Это всего лишь стандарт (открытый) для распараллеливания со своими директивами, процедурами и переменными окружения..
Возможности, предоставляемые для поддержки многопоточности в C++11 выглядят более богаче)
Ну сказали тоже Улыбающийся Ладно, чтобы не скатываться во флуд - предлагаю проверить на тестах 3 подхода

- С++ 11 (m_ax)
- OpenMP (беру на себя)
- QtConcurrent (есть смелые ?)
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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