gpt4 book ai didi

haskell - Haskell 中的并行图形处理

转载 作者:行者123 更新时间:2023-12-02 02:45:12 24 4
gpt4 key购买 nike

图形是那些“令人尴尬的并行”问题之一。 Haskell 应该非常非常适合并行处理。所以我的问题是:

  1. 在渲染问题上投入尽可能多的 CPU 核心的最佳方法是什么?

  2. 是否可以让 GPU 来完成任务?

“渲染问题”是指以下问题:

  • 每个像素的颜色都是其坐标的纯函数。

  • 我们从现有的“输入”图像开始,每个“输出”像素的颜色是相应输入像素的纯函数,或者可能是此类像素的一个小邻域。

<小时/>

关于#1:这看起来很简单,但实际上并非如此。用于存储计算像素的数据结构有多种可能的选择(这会影响您访问它的方式,以及将结果转储到磁盘或屏幕上的容易程度)。有多种方法可以在多核上执行。等等。

在我看来,Data Parallel Haskell 将是此类事物的理想选择。然而,我上次检查时,DPH 还没有工作。就是这样。即使假设它确实有效,您也可能会创建一个并行数组来保存像素,然后您必须复制像素以将它们显示在屏幕上或将它们写入磁盘。

我会尝试激发每个像素,但这可能太细粒度了。我可以将像素作为一个列表并使用并行列表策略之一。或者我可以将其设置为(未装箱?)不可变数组并编写一些手动代码来启动 Spark 。或者我可以使用显式线程和可变数组。或者我可以有一堆工作线程,它们通过 channel 将像素值传输到主线程,将结果放入正确的位置。或者...

总而言之,这里有数量惊人的可能性,但我不确定哪种是最好的。

<小时/>

关于#2:显然,此类问题是 GPU 存在的全部原因。显然 GPU 非常适合解决此类问题。我的问题更多是“从 Haskell 中做到这一点很难吗?”

最佳答案

如果您愿意混合使用多种语言,那么 OpenCL 的用途非常广泛。尽管 OpenCL 语言非常接近 C(所以绝对不是 Haskell),但您可以以或多或少的函数式风格编写内核代码,并将其视为在空间坐标上映射该内核。使用 OpenCL 等主流并行编程框架的一个优势是,您可以依靠 HPC 和图形人员多年来在许多应用领域积累的不断增长的知识。 CPU 和 GPU 之间的重定向基本上很轻松,但您需要注意数据类型的注意事项(例如,某些 GPU 不支持 double )。

我写了a tutorial on calling into OpenCL from Haskell 。它基于相对较新的 OpenCL绑定(bind)(hackage 上有几个 OpenCL 绑定(bind),我无法证明它们的相对质量)。

关于haskell - Haskell 中的并行图形处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com