Представьте, что я хочу, скажем, вычислить первый миллион слагаемых последовательности Фибоначчи, используя графический процессор. (я понимаю, что это превысит предел точности для 32-битного типа данных - используется только в качестве примера)
При наличии графического процессора с 40 шейдерами / потоковыми процессорами и мошенничества с использованиемВ справочнике я могу разбить миллион терминов на 40 блоков по 250 000 полос и заполнить каждый шейдер двумя начальными значениями:
единица 0: 1,1 (которая затем вычисляет 2,3,5,8, бла-бла-бла)
единица 1: 250 000-й член
единица 2: 500 000-й срок
...
Как, если возможно, я могу обеспечить, чтобы пиксели обрабатывались по порядку?Если первые несколько пикселей во входной текстуре имеют значения (для простоты с RGBA)
0,0,0,1 // initial condition
0,0,0,1 // initial condition
0,0,0,2
0,0,0,3
0,0,0,5
...
Как я могу убедиться, что я не пытаюсь вычислить 5-й член до того, как первые четыре будут готовы?
Я понимаю, что это может быть сделано за несколько проходов, но установка бита «готово» всякий раз, когда вычисляется значение, но это кажется невероятно неэффективным и как бы исключает преимущество выполнения этого типа вычислений на GPU.
OpenCL / CUDA / etc, вероятно, предоставляют хорошие способы сделать это, но я пытаюсь (для моего собственного назидания) заставить это работать с XNA / HLSL.
Ссылки или примеры приветствуются.
Обновление / упрощение
Можно ли написать шейдер, который использует значения из одного пикселя для воздействия на значения из соседнего пикселя?