Что в стеке?
Я пытаюсь понять, что хранится в стеке в optix.
Насколько я понимаю, мы устанавливаем размер стека для контекста, и один стек прикрепляется к каждому потоку в программе генерации лучей. Когда луч запускается, поток несет с собой стек, в котором хранится полезная нагрузка луча.
Я думал, что, когда мы делаем, например, рекурсивную трассировку лучей, переполнение стека произойдет, потому что в памяти будет слишком много полезных нагрузок. Но сейчас у меня есть программа с лучом сияния, который имеет полезную нагрузку с плавающей точкой + 3 uint, и теневой луч только с плавающей точкой, и есть только один отскок. Однако мой стек должен быть больше 1024, чтобы избежать переполнения стека. Конечно, это намного больше, чем просто мои две полезные нагрузки.
Вот и мне интересно, что еще в стеке? (Я имею в виду, в общем, не в моем конкретном случае. Что хранится в стеке, кроме полезных данных луча (ов) (если они есть)? Например, мы также храним информацию о попаданиях? О дереве сцены "Мы отслеживаем, какая программа называется текущим лучом?"
Спасибо за вашу помощь!
1 ответ
Ответил на плате NVIDIA здесь
Детлеф Реттгер написал
"Стек также используется для сохранения и восстановления динамических переменных вокруг вызовов функций (например, rtTrace или вызываемых программ). Это фон для одного из рекомендаций по производительности в Руководстве по программированию OptiX, которое начинается с Попытка минимизировать текущее состояние при обращениях к rtTrace в программы".
Больше информации об этом в §3.1.3 - Глобальное состояние в Руководстве по программированию OptiX.
Помните, что программы OptiX представляют собой полноценные ядра CUDA, объединенные вместе. Поэтому стековая память также используется для обычных задач выполнения (количество может варьироваться даже между версиями CUDA).