HeadlinesBriefing HeadlinesBriefing.com

Оптимизация производительности двойного стекового

Hacker News •
×

При разработке высокопроизводительных приложений, таких как видеоигры, разработчики ищут приемы для написания быстрого кода, который максимизирует ограниченные ресурсы. Распределение памяти критически важно для производительного кода, требующего переменной памяти. "Bump allocator" или стековый распределитель оптимизирует это, рассматривая распределение как простое сложение целых чисел, а освобождение как более дешевое присвоение целых чисел. Вокруг 2010 года, работая в Surreal Software над отмененным проектом "This is Vegas," программирование анимации столкнулось с частыми временными распределениями для смешения анимаций. Эти распределения существовали только кратко на каждом кадре и зависели от того, какие персонажи были активны, определяемые обзором камеры. Распределитель оказался горячей точкой в профилировании. Решение заключалось в реализации стекового распределителя, где распределение — это лишь сложение целых чисел, а освобождение памяти — одиночное присвоение целых чисел. Выделив фиксированный блок (например, 1 МБ) и поддерживая переменную "tos" (верх стека), управление памятью стало почти мгновенным. Результатом стало значительное улучшение производительности, с измеримым временем распределения в профилях. Ключевое ограничение заключается в том, что этот распределитель не вызывает автоматически деструкторы; хотя placement new может обрабатывать конструкторы, управление деструкторами вручную и подвержено ошибкам. Кроме того, стековые распределители отличаются в многопоточных средах, если переменная "tos" использует атомарное сложение, позволяя нескольким потокам распределять из одного и того же пула, что полезно в ситуациях с CPU fork/join или GPU-алгоритмах. Частичные освобождения также возможны, запоминая состояние "tos" в начале рекурсивных процессов и сбрасывая его по завершении. Техника обеспечивает значительные приросты скорости для временных потребностей в памяти во время игрового кадра.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing