想象一下,我想使用 GPU 计算斐波那契数列的前一百万项。(我意识到这将超过 32 位数据类型的精度限制 - 仅用作示例)
给定一个具有 40 个着色器/流处理器的 GPU,并使用参考书作弊,我可以将百万项分解为 40 个 250,000 个条带的块,并为每个着色器设置两个起始值:
单位 0:1,1(然后计算 2,3,5,8,blah blah blah)
单元 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
...
如何确保在前四项准备好之前不尝试计算第五项?
我意识到这可以在多次传递中完成,但在计算值时设置一个“就绪”位,但这似乎非常低效,并且有点消除了在 GPU 上执行此类计算的好处。
OpenCL/CUDA/etc 可能提供了很好的方法来做到这一点,但我正在尝试(为了我自己的启发)让它与 XNA/HLSL 一起工作。
链接或示例表示赞赏。
更新/简化
是否可以编写一个使用一个像素的值来影响相邻像素的值的着色器?