我已经弄清楚如何通过使用变换反馈(或渲染到纹理)将高阶函数map和filter转换为OpenGL代码。我也希望能够使用fold,但我不知道这是如何工作的。让我们假设操作是关联的,所以我不在乎它是左折还是右折或某些不确定的混合。
折叠操作的例子:
或者,如果没有OpenCL或CUDA,这是不可行的吗?
答案 0 :(得分:3)
如果您的操作是关联的,则可以通过重复渲染到较小的纹理来减少/折叠数据。在每个过程中,您可以组合上一个过程中的多个纹素。您可以通过将其绑定为片段着色器的纹理来读取上一遍中的数据。
例如,如果您想计算128x128值的图像的平均值,您可以首先渲染到64x64的纹理,其中您在目标纹理中的每个纹素的输入纹理中平均4个纹素。
典型的例子是模糊图像。