Recursive Tile-based architecture
Альтернативный вариант трассировки лучей, оптимизированный под мобильную архитектуру.
Здесь предлагается сделать ускоряющую структуру (primitive provider), которая возвращает видимые треугольники по конусу.
Весь рендеринг идет через запросы к ускоряющей структуре, сначала для рисования тайла, потом поверх рисуются отражения. Это хорошо работает для когерентных лучей.
#tbdr #raytracing #mobile #rus
Альтернативный вариант трассировки лучей, оптимизированный под мобильную архитектуру.
Здесь предлагается сделать ускоряющую структуру (primitive provider), которая возвращает видимые треугольники по конусу.
Весь рендеринг идет через запросы к ускоряющей структуре, сначала для рисования тайла, потом поверх рисуются отражения. Это хорошо работает для когерентных лучей.
#tbdr #raytracing #mobile #rus
Создание World of Tanks Blitz на базе собственного движка DAVA
Как происходит переход из OOP/сценеграфа в ECS/DOD.
И продолжение: Blitz Engine & Battle Prime: ECS и сетевой код
#cpp #ecs #dod #rus
Как происходит переход из OOP/сценеграфа в ECS/DOD.
И продолжение: Blitz Engine & Battle Prime: ECS и сетевой код
#cpp #ecs #dod #rus
Как мы отказались от JPEG, JSON, TCP и ускорили ВКонтакте в два раза
То что новые форматы лучше и так понятно, а вот отказ от TCP в пользу UDP уже интереснее.
Рассказывают как работает сеть, ограничение скорости провайдером и тд.
#web #backend #rus
То что новые форматы лучше и так понятно, а вот отказ от TCP в пользу UDP уже интереснее.
Рассказывают как работает сеть, ограничение скорости провайдером и тд.
#web #backend #rus
(video) Уязвимости аллокаторов памяти – Павел Филонов
Простой пример как можно занести уязвимость в самописный аллокатор.
#cpp #security #rus
Простой пример как можно занести уязвимость в самописный аллокатор.
#cpp #security #rus
Что следует помнить C++ разработчику об архитектуре процессора
Часто в таких докладах повторяются одни и те же рекомендации, тут также, но кое-что разобрано более детально, это интересно послушать:
14:37 - про конвеер ЦП.
19:46 - параллельное выполнение инструкций, разбор разных архитектур ЦП.
22:48 - про кэш. Десктопные ЦП делают префетч и для доступа по шаблону (фиксированное смещение), мобильные ЦП делают префетч только для линейных даннных.
40:05 - эмулятор ЦП, применяется для микрооптимизаций.
#cpu_opt #rus
Часто в таких докладах повторяются одни и те же рекомендации, тут также, но кое-что разобрано более детально, это интересно послушать:
14:37 - про конвеер ЦП.
19:46 - параллельное выполнение инструкций, разбор разных архитектур ЦП.
22:48 - про кэш. Десктопные ЦП делают префетч и для доступа по шаблону (фиксированное смещение), мобильные ЦП делают префетч только для линейных даннных.
40:05 - эмулятор ЦП, применяется для микрооптимизаций.
#cpu_opt #rus
Путеводитель C++ программиста по неопределенному поведению
Очень подробно разбирается множество случаев неопределенного поведения в C++.
loop-counters-signed-vs-unsigned
В дополнение - NVidia рекомендует использовать неопределенное поведение при переполении знакового int чтобы компилятор CUDA лучше оптимизировал циклы.
Если переполнение не происходит (иначе это UB), то компилятор может использовать strength reduction - заменяет
#cpp #rus
Очень подробно разбирается множество случаев неопределенного поведения в C++.
loop-counters-signed-vs-unsigned
В дополнение - NVidia рекомендует использовать неопределенное поведение при переполении знакового int чтобы компилятор CUDA лучше оптимизировал циклы.
Если переполнение не происходит (иначе это UB), то компилятор может использовать strength reduction - заменяет
stride*i
на сложение:было:
for (i = 0; i < n; i++)
out[i] = in[offset + stride*i];
стало:
for (i = 0, k = 0; i < n; i++) {
out[i] = in[offset + k];
k += stride;
}
#cpp #rus
Обзор C++26
9.39 - Pattern matching
27.45 - Рефлексия. Появятся новые конструкции, зато будет кодогенерация.
#cpp #rus
9.39 - Pattern matching
27.45 - Рефлексия. Появятся новые конструкции, зато будет кодогенерация.
#cpp #rus