Несколько графических процессоров в OptiX (возможны асинхронные запуски?)

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

Я внедряю прогрессивное фотонное картирование, используя новый подход Кнауса и Цвикера ( http://www.cs.jhu.edu/~misha/ReadingSeminar/Papers/Knaus11.pdf) с использованием OptiX. Этот подход делает каждую итерацию / кадр PPM независимой и более подходящей для нескольких графических процессоров.

Что я делаю (с одним GPU), так это отслеживаю количество фотонов с помощью OptiX и затем сохраняю их в буфере. Затем фотоны затем сортируются в пространственную хеш-карту с использованием CUDA и тяги, никогда не покидая графический процессор. Я хочу создать карту пространственного хеша на графическом процессоре, так как это узкое место моего рендерера. Наконец, этот буфер используется во время косвенной оценки сияния. Так что это алгоритм нескольких проходов, состоящий из трассировки лучей, трассировки фотонов, генерации фотонных карт и, наконец, создания изображения.

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

То, что я хотел бы сделать, это позволить одному GPU сделать один кадр, в то время как второй GPU сделает следующий кадр. Затем я могу объединить результаты, например, на процессоре или на одном из графических процессоров за один проход. Также допустимо, если я могу делать каждый проход параллельно на каждом устройстве (синхронизировать между каждым проходом). Это как-то возможно?

Например, могу ли я создать два контекста OptiX, сопоставляемых каждому устройству в двух разных потоках хоста. Это позволило бы мне выполнить генерацию карты пространственного хеша CUDA/ тяги, как и раньше, предполагая, что фотоны находятся на одном устройстве, и объединить два сгенерированных изображения в конце конвейера. Однако в руководстве по программированию говорится, что оно не поддерживает многопоточную обработку контекста. Я мог бы использовать несколько процессов, но тогда много путаницы с межпроцессным взаимодействием. Этот подход также требует дублирования работы с созданием геометрии сцены, компиляцией файлов PTX и так далее.

Спасибо!

1 ответ

OptiX уже распределяет рабочую нагрузку в соответствии с мощностью ваших графических процессоров, поэтому ваш подход, скорее всего, будет не быстрее, чем OptiX избавится от всех графических процессоров.

Если вы хотите, чтобы ваши данные оставались на устройстве (обратите внимание, что в такой ситуации запись с разных устройств не будет согласованной), вы можете использовать флаг RT_BUFFER_GPU_LOCAL, как указано в руководстве по программированию.

https://developer.nvidia.com/optix-documentation

Другие вопросы по тегам