Оптимальный способ записи данных о пересечении лучей для трассировки лучей с использованием OpenCL - PullRequest
0 голосов
/ 09 марта 2012

Я разрабатываю трассировщик лучей Монте-Карло в OpenCl для расчета «коэффициентов обзора» для радиационного анализа теплопередачи и хочу знать оптимальный способ сопоставления того, сколько раз объект x пересекается с лучами, испускаемыми из объекта i.

Теперь основной алгоритм выглядит следующим образом:

  1. Огненный случайный луч, R, с поверхности объекта i
  2. Проверка пересечения луча R с объектами 0 - N
  3. Определите первый объект, пересекаемый R, пусть это будет объект x
  4. Запишите первое пересечение, увеличивая массив целых чисел так, чтобы массив [i] [x] + = 1
  5. Повторите для общего количества лучей
  6. Разделите каждое значение в i-й строке массива на общее количество массивов, запущенных из объекта i.

Теперь, как правило, в параллельной реализации на ЦП каждый поток просто поддерживает свою собственную копию массива [N], а затем, когда все лучи запущены из объекта i, главный поток будет суммировать отдельные массивы для получения результатов.

В OpenCL на GPU это не практичное решение, так как при увеличении N быстро возникает нехватка локальной памяти, и использование одного массива с барьерами снизит производительность.

Что является лучшим практическим средством для предварительного сокращения массива результатов или является барьером памяти единственным практическим решением?

1 Ответ

0 голосов
/ 10 марта 2012

Ядро A) Сделайте это, как вы описали, записав свои собственные копии массива [N] обратно в глобальную память в конце.

Ядро B) Ядро для сокращения (что "главный поток" делает в вашем описании).

Сделать все вызовы ядра A заданными событиями по завершении. Сделайте вызов (я) ядра B зависимым от этих событий. Вы могли бы даже использовать несколько вызовов ядра B для сокращения пирамиды, взяв два (или более, может потребоваться настройка) массива и выписав одну сумму. Цепочка событий может разрешить зависимости и разрешить глубокие очереди.

...