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

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

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

Сообщений: 11445


Просмотр профиля
« : Май 24, 2012, 11:50 »

Добрый день

Есть массив/контейнер 500k таких точек
Код
C++ (Qt)
struct CPoint {
QVector3D mPosition;  // позиция точки в пр-ве
double mRadius;         // радиус
// др данные (здесь нас не интересуют)
};
 

Расчет длится неск минут, поэтому нужно задействовать все ядра. Но просто так дать каждой нитке часть точек не выходит, т.к. точки влияют одна на другую. Это ограничение можно сформулировать так:

- нельзя одновременно считать 2 точки (в разных нитках) если одна находится в радиусе другой

Как же расчленить данные (возможно повторно просчитывая некоторые точки)?

Спасибо
Записан
Akon
Гость
« Ответ #1 : Май 24, 2012, 15:06 »

Т.е никак не возникает суперпозиции (результат воздействия на точку нескольких внешних точек есть сумма воздействия этих точек)?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 24, 2012, 15:37 »

Т.е никак не возникает суперпозиции (результат воздействия на точку нескольких внешних точек есть сумма воздействия этих точек)?
Грубо говоря строится граф: точка связывается с соседней, образуется "ребро" которое запоминается в обеих точках. Разные нитки не не  должны одновременно добавлять ребра в одни и те же точки.
Записан
Fat-Zer
Гость
« Ответ #3 : Май 24, 2012, 20:14 »

Грубо говоря строится граф: точка связывается с соседней, образуется "ребро" которое запоминается в обеих точках. Разные нитки не не  должны одновременно добавлять ребра в одни и те же точки.
А если на каждую точку поставить мьютекс? или жирно слишком будет?
Записан
Bepec
Гость
« Ответ #4 : Май 24, 2012, 20:15 »

Насколько я знаю - черезчур жирно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 25, 2012, 10:15 »

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

Распиливание/расчленение возможно. Напр взяли кусок слева, др справа, так что они не пересекутся, тогда можно дать каждой нитке по куску.
Записан
Fat-Zer
Гость
« Ответ #6 : Май 25, 2012, 17:14 »

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

а если не на CPU распараллеливать, а вынести всё в openCL? не получится?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Май 25, 2012, 18:17 »

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

а если не на CPU распараллеливать, а вынести всё в openCL? не получится?
Задача не выглядит такой уж страшной и требующей привлечения таких масштабных тулзов  Улыбающийся
Записан
DmitryM
Гость
« Ответ #8 : Май 30, 2012, 10:57 »

Ну так вдаваться в его подробности и не нужно - достаточно знать что расчет разными нитками должен производиться на непересекающихся кусках данных. Такой случай довольно типичен.
Если ничего не знать о природе точек, то это превращается в УГ.
На первый взгляд, нужно разбить данные на не пересекающиеся куски, а потом обработать, и на ум приходит MapReduce и Qt Concurrent.
А вот задача о независимом множестве относиться к NP-полным задачам, что и угнетает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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