0xd34df00d
18.12.2012 19:06 Azoth_primary
C++11-threading правда соснул, OpenMP рулез, на адекватность шедулинга полагаться не приходится. Восьмиядерная машина, два варианта параллелизации — через openmp (#pragma parallel for) и через std::async/std::future.
Вариант с OpenMP — http://bpaste.net/show/FBDFdJvyHNzRZhCjl... , ≈200 мс.
Вариант с ручным выставлением шедулинга и преаллокацией массива, чтобы избежать дорогих реаллокаций в критической секции — http://bpaste.net/show/EpbqoPHYhYMUhG7zZ... , 185-190 мс.
Вариант с std::async/std::thread — http://bpaste.net/show/1N6mDCGZNNKQyni1z... , 370 мс.
При этом само время работы программы в один поток — 500-600 мс. Так что OpenMP тоже соснул. Такие дела.
Recommended by:
@pooq: моча съела говно
А ручная ебля точно не надоест?
Надоест, тем более, что экономия в 5% хуита.
2013 год а в крестах не реализовали и половины функциональных возможностей питона!
Хаскеля.
1. я не понимаю, почему ты используешь прагмы вместо встроенного в гоцаце parallel mode в std::for_each
2. я не понимаю, почему ты используешь вектор и критическую секцию вместо массива фиксированного размера, в который можно производить lock free запись используя atomic индекс записываемого элемента
соснули не библиотеки, соснул wannabe-программист
Возможно, потому, что я не хочу ебаться лишний раз? Возможно, потому, что я знаю нормальные инструменты, от parMap в х-ле до QtConcurrent::mapped?
Я знаю про локфри, и знаю про атомики и атомик_инкремент для индекса, но зачем?
А параллел_моде уже позволит мне регулировать шедулинг, как в примере 2?
> Я знаю про локфри, и знаю про атомики и атомик_инкремент для индекса, но зачем?
пиздец. пизде-е-ец. «Зачем мне думать головой и использовать lock-free алгоритмы, я лучше поставлю ещё одну критическую секцию. Кококо, я пишу критические секции сотнями, а потом обсираю в бложике чужие библиотеки для параллельных вычислений. Я — дедфуд, завидуйте мне»
Пруф, что здесь критическая секция — узкое место.
И какого хуя в 2012 году я должен раз за разом ебаться с лоу-левел говном там, где это совсем не нужно?
в отличии от тебя у меня нет полного примера, в котором бы я мог поменять четыре строки и сравнить скорость. так что придётся тебе это сделать самому
:(
какого хуя ты 2012 году вообще параллелишь задачи, которые требуют меньше секунды? запусти в отдельном потоке последовательный алгоритм, а пользователя в это время отвлеки плавной анимацией открывающегося окошка
Потому что нет никаких окошек, запустились, обучились, классифицировали, вышли.
И да, это сейчас, а потом — скользящий контроль по LOO, что автоматически увеличивает время выполнения в сто раз в моем случае.
> в сто раз
с каких пор такие мелочи волнуют человека столь смело использующего критические секции вместо одного атомика?
А, хотя пизжу, даже при LOO картинки-то один раз при запуске читаться будут.
Ну там тогда сам LOO параллелить буду, похуй.
Чо.
кр. содержание предыдущей серии: ты — хуй и будешь оставаться им пока не выложишь замеры скорости без критической секции, но с атомик-индексом (и код тож,. ога)
знатно ты его
есть у меня подозрение, что он сейчас напишет «на самом деле задача стояла несколько иная, и алгоритм пришлось переделать» и представит публике новый кусок кода, в котором будут атомики, но из-за изменённого алгоритма сравнивать скорость будет нельзя и дедфуд кагбэ и ни при чём окажется и никто не узнает какое говно он в /0 написал
Таки нет.
именно ради этого /19 и был написан
Че.
результаты тестрования на атомиках давай, вот чего, предсказуемый ты наш
Не изменились, уже потестил.
Правда, это мой первый код с атомиками из C++11, мог попутать.
learnData [std::atomic_fetch_add<size_t> (&learnIdx, 1)] = { img, type }; // СУТЬ
Чятик, ты живой?
критическую секцию-то убрать не забыл?
Нет.
хм, а ты не пробовал сделать %s/const auto/const auto\&/g ? а то есть у меня подозрение что ты где-то перебрал с auto.
Пробовал, сегфолт тогда, ибо каким-то хуем entry инвалидируется, и остается dangling reference.
ну охуеть вообще. т.е. переписать на полноценный std::for_each, где всеми объектами управляешь ты, ты не осилил. т.е. у тебя куча копирований объектов, а ты гонишь на библиотеки, которыми распараллеливаешь?
Еб твою. По-твоему, 600 миллисекунд (в однопоточной версии) занимает скопировать сто векторов по тыще пар даблов? Да не смеши мои тапочки.
И какого хуя спидап не 8x все равно?
Ладно, хер с ним, 4x, гипетрединг же.
у тебя не только вектора копируются, но и всякие их path, наверняка
-____-
ты мог упереться во что угодно. в диск, в память, в устройство отрисовки. расслабься, у тебя и так трёхкратное ускорение на четырёх физических ядрах, это считается очень хорошим результатом
> отрисовки
Его нет.
> IO
Его нет.
> трехкратное
Задача абсолютно параллельная, да и между make -j4 и make -j8 у меня почти двухкратное различие. Хотя я не ебу, конечно, какие блоки шарятся в HT, которые используются в этом всем матане.
блядь, как нет io, если у тебя файлы там какие-то?
Да все прокешировалось давно и и так в tmpfs.
всё равно каждое чтение требует перехода в режим ядра. попробуй целиком в массивы предзагрузить свои файлы, а после того как загрузил — засекай всемя
Вообще охуеть. Не может туда столько тратиться, будет как с атомиками.
О, кстати, это все — отличный повод изучить возможности Intel vTune для профилирования говна в многопоточных приложениях, чо ж я сразу-то не?
ещё как может. чистый переход в режим ядра на моём ноуте требует порядка одной микросекунды. далее вопрос уже в том как часто ты переходишь и сколько у тебя аллокаций памяти в процессе работы.
в общем, ты можешь сколько угодно исходить говном из-за того, что у тебя эффективность параллельного алгоритма оказалась 75%, но я продолжу тебя считать мудаком, ибо на лабе на четвёртом курсе я от msvs теми же самыми прагмами получал эффективность в 91% на сортировке слияниями.
2014 год на дворе, а в реальном мире не реализовали потребностей и в половине функциональных возможностей Хаскеля!
потому что кресты
В лобаче учился?
да
Хм. И там годный IT факультет еще теплится?
не слышал о таком
Там два. ИТ и ПМИ. Видимо, ты учился на ПМ :)
ты несёшь хуйню. в лобаче нет таких факультетов как ИТ и ПМИ
Да. Попутал. Это магистратурские направления.
ты продолжаешь нести хуйню
На сайте универа так и написано. Все претензии к вебмастеру
пиши на питоне и жабке или решетке. Там нету лоулевела
На жабке есть.
знаток жабки итт?
где? я ещё ни разу до него не добрался
Чо, у вас там уже есть нормальные тредпулы и прочая хуита?
Unsafe? Дедфуд везде найдет где поебаться.
Такими темпами и в х-ле есть лоулевел, и вообще везде, где есть FFI.
ты не поверишь
пиши на жуйке.Там нету магога
лол, есть.
но дедфуда-то нет, лул