Size: a a a

pro.graphon (and gamedev)

2020 July 12

АК

Антон Ковалев... in pro.graphon (and gamedev)
А инпут берется и шлется как эвент в систему эвентов в движке
источник

АК

Антон Ковалев... in pro.graphon (and gamedev)
Хотя вру, я глянул в движок, и инициализация рендера и окна - это отдельная таска
источник
2020 July 13

AT

Anatoly Tomilov in pro.graphon (and gamedev)
disba1ancer
таки решил сделать полноценный тредпул с задачами, и всякой асинхронной мишурой, чтобы IOCP крутился там, но иногда таки кажется, что лучше просто взять буст, по крайней мере поверх него запилить
Как-то читал статью, где чувак, приглашённый в id Software со стороны и не знакомый с кодовой базой и движком id Tech 3 в паре мест воткнул прагмы OpenMP (перед главным циклом #pragma omp parallel или что-то типа того), что-то где-то разбил на пару функций и в результате ускорил игру если не в разы, то на много десятков процентов. Думаю, что вся муть свыше #pragma omp parallel или #pragma omp task нигде и не нужна, кроме самых сложных сетевых серверов.
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
даже этот thread pull — это слишком сложно и синтаксически коряво по сравнению с декларативным синтаксисом прагм, которые слегка изменяют семантику блоков кода, если поддерживаются
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
(наброс, если что, а то тихо здесь)
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Anatoly Tomilov
(наброс, если что, а то тихо здесь)
А как же стопицот фпс и одинаковые графики загруженности всех ядер?
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
чем же одинаковые графики загруженности всех ядер так хороши? В последних разработках интел даже ядра-то разной мощности в основном
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Таски это не оптимизация конкретных узких мест, а архитектурная парадигма, которая тебе мешает писать плохо параллелизуемый код
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
главное, чтобы синтаксис был негромоздкий и связи прослеживались. Я сомневаюсь, что в C++ для этого есть условия
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Anatoly Tomilov
чем же одинаковые графики загруженности всех ядер так хороши? В последних разработках интел даже ядра-то разной мощности в основном
Все ядра всегда идут в дело с точки зрения игры, автоматически всё, что друг от друга не зависит, распределяется и выполняется
источник

d

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

d

disba1ancer in pro.graphon (and gamedev)
Anatoly Tomilov
Как-то читал статью, где чувак, приглашённый в id Software со стороны и не знакомый с кодовой базой и движком id Tech 3 в паре мест воткнул прагмы OpenMP (перед главным циклом #pragma omp parallel или что-то типа того), что-то где-то разбил на пару функций и в результате ускорил игру если не в разы, то на много десятков процентов. Думаю, что вся муть свыше #pragma omp parallel или #pragma omp task нигде и не нужна, кроме самых сложных сетевых серверов.
а что вообще делает эта прагма?
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Все ядра всегда идут в дело с точки зрения игры, автоматически всё, что друг от друга не зависит, распределяется и выполняется
и после этого кажется странным, что может быть как-то по-другому
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
(урок OpenMP (я его и не знаю больше того, что напишу здесь))
#pragma omp parallel for
for (int i = 0; i < 101325; ++i) {
   task(i);
}
разобъёт весь диапазон на поддиапазоны примерно равной длины, чьё количество равно количеству потоков и выполнит task(i); в потоках. Каждый в своём. И дождётся завершения.
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
или
#pragma omp parallel sections
{
   #pragma omp section
   {
       taskA();
   }
   #pragma omp section
   {
       taskB();
   }
}
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
если убрать -fopenmp, то просто линейно выполнится код. Как будто прагм нет
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
ну или если сделать #include <omp.h>, а затем omp_set_num_threads(1);, примерно то же самое
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
тредпул — как бы глобальный синглтон
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
но доступный неявно через прагмы
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
его можно конфигурировать вообще
источник