В последние дни я построил на основе программного обеспечения raymarcher для губчатой губки. В настоящий момент без использования SIMD и я также не использовал специального алгоритма. Я просто отслеживаю от -1 до 1 в X и Y, которые являются U и V для целевой текстуры. Затем я получил положение камеры и место назначения, которое я использую для вычисления вектора инкремента для raymarch.
После этого я использую постоянное значение итераций для выполнения, в которых только одна ветвь решает, есть ли пересечение с фрактальной громкостью. Так что если мой глаз камеры - E, а мой вектор направления - D, я должен найти наименьшее значение t. Если я обнаружил, что или достиг максимального расстояния, я разбиваю цикл. В конце у меня есть t - из этого я вычисляю цвет фрагмента.
По моему мнению, должно быть возможно распараллеливать эти операции с помощью SSE1/2, так как можно разрешить ветвь путем нулевого поля в векторе (__m64/__m128), поэтому дальнейшие операции SIMD здесь не будут применяться , Это действительно зависит от того, что вы raymarch/-cast, но если вы просто вычислите цвет фрагмента из функции (например, моя фрактальная кривая здесь) и не получаете доступ к памяти нелинейно, есть некоторые трюки, чтобы сделать это возможным.
Несомненно, этот ответ содержит предположения, но я буду информировать вас, когда я распараллеливал эту процедуру.
Просто [добавить к вашему ответу] (http://www.yosefk.com/blog/simd-simt-smt- parallelism-in-nvidia-gpus.html) для других, которые не уверены в различиях между SIMT и SIMD. –