2015-10-01 7 views
1

Я пытаюсь понять, что хранится в стеке в optix.Что находится в стеке?

Как я понимаю, мы устанавливаем размер стека для каждого контекста, и один стек прикрепляется к каждому потоку в программе генерации лучей. Когда луч запускается, поток несет с собой стек, в котором хранится полезная нагрузка луча.

Я думал, что когда мы будем использовать рекурсивный трассировщик лучей, произойдет переполнение стека, потому что в памяти будет слишком много полезных нагрузок. Но прямо сейчас у меня есть программа с лучом лучи, которая имеет полезную нагрузку с float + 3 uint и теневой луч с только плавающей точкой, и есть только один отскок. Однако мой стек должен быть больше 1024, чтобы избежать переполнения стека. Несомненно, это больше, чем просто мои две полезные нагрузки.

Так что, интересно, что еще находится в стеке? (я имею в виду, в общем, не в моем конкретном случае. Что хранится в стеке, кроме лучевой (ых) полезной нагрузки (если они есть)? Например, мы также храним информацию о хитах? дерево? Мы отслеживаем, какая программа называется текущим лучом?)

Спасибо за помощь!

ответ

1

Ответил на плате NVIDIA here

Детлеф Roettger написал

«Стек также используется для сохранения и восстановления живых переменных вокруг вызовов функций (например, rtTrace или Вызываемые программы). Это фон для одного из рекомендаций по производительности в Программе OptiX Руководство, которое начинается с . Попробуйте минимизировать живое состояние через вызовы до rtTrace в программах. «

Дополнительная информация об этом в §3.1.3 - Глобальное государство в OptiX Programming guide.

Помните, что программы OptiX представляют собой полноразмерные ядра CUDA, объединенные вместе. Таким образом, память стека также используется для обычных потребностей выполнения (количество, вероятно, будет варьироваться даже между версиями CUDA).

Смежные вопросы