2013-04-16 20 views
1

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

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

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

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

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

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

Спасибо!

ответ

1

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

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

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

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