Size: a a a

pro.graphon (and gamedev)

2020 November 07

d

disba1ancer in pro.graphon (and gamedev)
Maksim Litvinov
"треугольного квадродерева" - ЧТО?!
а что не так?
источник

ML

Maksim Litvinov in pro.graphon (and gamedev)
disba1ancer
а что не так?
что это? :)
источник

d

disba1ancer in pro.graphon (and gamedev)
Maksim Litvinov
что это? :)
мне из рисунка всё более/менее  понятно
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
disba1ancer
@Ioann_V думал над реализацией очереди для task stealing, но напоролся на один неприятный момент с размером очереди, если вместимость очереди динамическая, то имеется проблема при кражах во время реаллокации контейнера тасок, связанная с тем что указатель на контейнер с тасками может поменяться неожиданно, даже если мы при каждом копировании элемента будем обновлять указатель, может возникнуть проблема, поток взял указатель и перед тем как сделать копирование был прерван ОС, к примеру, и в этот момент другой поток который делает реаллокацию контейнера, обновил указатель и успел разрушить старый контейнер, и получается что по логике ворующий поток уже должен прочитать данные из протухшей памяти, можно как-нибудь исключить такую вероятность?
Мьютекс?)
источник

d

disba1ancer in pro.graphon (and gamedev)
Vladyslav Ryuzaki
Мьютекс?)
очень долго, чем быстрее таски переключаются и воруются тем лучше
источник

d

disba1ancer in pro.graphon (and gamedev)
у меня контейнер на атомарных переменных вместо мьютексов
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
disba1ancer
очень долго, чем быстрее таски переключаются и воруются тем лучше
Есть алгоритмы для lockfree очередей

Если вдруг у тебя один читатель и один писатель, то ещё лучше
источник

d

disba1ancer in pro.graphon (and gamedev)
Vladyslav Ryuzaki
Есть алгоритмы для lockfree очередей

Если вдруг у тебя один читатель и один писатель, то ещё лучше
у меня n потоков у каждого своя очередь, писать в очердь может только поток-владелец, а вот читать могут разные, при этом меняя её размер
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
disba1ancer
у меня n потоков у каждого своя очередь, писать в очердь может только поток-владелец, а вот читать могут разные, при этом меняя её размер
Вообще вся боль уйдет, если сделать ее фиксированного размера
источник

d

disba1ancer in pro.graphon (and gamedev)
Vladyslav Ryuzaki
Вообще вся боль уйдет, если сделать ее фиксированного размера
знаю, но тогда другой вопрос, как выбрать оптимальный размер?
источник

d

disba1ancer in pro.graphon (and gamedev)
и что делать если его всё-таки не хватило
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
disba1ancer
знаю, но тогда другой вопрос, как выбрать оптимальный размер?
Ну, от задачи зависит) путем тестирования

Берешь какой-то размер с головы и туда сюда его меняешь, пока не будешь доволен
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
disba1ancer
и что делать если его всё-таки не хватило
Обычно, если его не хватает, то просто таска в очередь не пихается, либо поток, что пихает таску, ждёт, пока очередь будет свободна
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
В любом случае растущая очередь - плохо, значит у тебя не справляются воркеры с задачей
источник

d

disba1ancer in pro.graphon (and gamedev)
Vladyslav Ryuzaki
Обычно, если его не хватает, то просто таска в очередь не пихается, либо поток, что пихает таску, ждёт, пока очередь будет свободна
очень не эффективно, а если вдруг у всех потоков сразу такое случится?
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
А ты ещё и память будешь забивать этим
источник

VR

Vladyslav Ryuzaki in pro.graphon (and gamedev)
disba1ancer
очень не эффективно, а если вдруг у всех потоков сразу такое случится?
Выбирай размер так, чтобы не случилось
источник

d

disba1ancer in pro.graphon (and gamedev)
Vladyslav Ryuzaki
Обычно, если его не хватает, то просто таска в очередь не пихается, либо поток, что пихает таску, ждёт, пока очередь будет свободна
но в таком случае, можно кинуть в общую очередь пула таску, не так быстро, но сработает
источник

d

disba1ancer in pro.graphon (and gamedev)
Vladyslav Ryuzaki
В любом случае растущая очередь - плохо, значит у тебя не справляются воркеры с задачей
а может у меня такие алгоритмы что они скачкообразно добавляют таски?
источник

d

disba1ancer in pro.graphon (and gamedev)
мне сейчас в голову пришёл вариант с жареным указателем...
источник