0xd34df00d
03.09.2012 16:31 Azoth_primary
Собрал программу с -fopenmp -D_GLIBCXX_PARALLEL в надежде, что оно мне всякие std::sort и std::lower_bound распараллелит. А хуй там был, время выполнения сурового числодробительного кода выросла в 30-50 раз.
Мудак чтоли совсем?
Обоснуйте.
Они и не будут параллелиться, потому что одних -fopenmp и -D_GLIBCXX_PARALLEL мало.
Тогда почему выросло время выполнения рабочего кода?
И да, что еще нужно, кроме этого?
Увеличить количество тиков процессора в 50 раз, чтобы потом разложить на 4 ядра. Awesome.
http://stackoverflow.com/questions/20633...
а хули ты хотел, запусти gprof и охуей сколько времени тратится на чеках границ и прочей хуйте.
Хм, ценно́.
Я хотел твою одежду и мотоцикл^WWWW производительность поднять. Находить N ближайших точек к данной из десятка миллионов за миллисекунду — перебор, можно быстрее, ИМХО.
Кстати, можешь поиграть с omp_set_num_threads(), твой i7 с гипертредингом соснет.
N ближайших точек? отсортируй их по координате X и поимей NlogN
Почему соснет? 4 треда и нормик, шедулер все нормально раскидает.
Я уже так и делаю. Олсо, в 2D. Пока k-d trees юзать неохота.
Но по-дефолту-то будет 8.
KD для малых размерностей — оверкилл имхо.
Это да.
а чо велосипедшь вообще, в CGAL разве нету функции нахождения N nearest points?
ИМХО тоже. Поэтому я сначала сортирую по иксам, нахожу в полоске, а потом уже в полоске хуячу либо брутфорсом, либо опять же сортирую по игрику и там уже выделяю.
Щто. Чо за CGAL?
http://www.cgal.org/
Оу. Похоже, лицензия не катит.
LGPL не катит?
в-общем тебе вот это нужно. Только дерево поиска придется построить. http://www.cgal.org/Manual/latest/doc_ht... у тебя евклидова метрика?
Не уверен.
Пока евклидова. Потом. может, будем обмазываться всякой ебической хуйней.
По ссылке ничо не понял, пойду велосипедить свое дерево.
ну иди, лол. ждем охутельных историй и алгоритмов с O(1)
пиздец, дедфуд до сих пор верит в магическую кнопку "сделай мне параллельно".
Кстати, в итоге заработало и стало быстрее в полтора раза на 8 тредах. И 8 тредов быстрее 4, даже с учетом HT.
Размерность маленькая, наверное. Если бы программа месила пару минут, было бы наоборот.
Почему это? И там метров 100 данных.