首页 > 解决方案 > 金属计算 - 像素依赖于其他像素颜色

问题描述

我最近开始学习金属框架,所以我可以为我的 swift 应用程序编写一些过滤器。我即将编写一个基于误差扩散抖动抖动图片的金属内核。每个像素都被赋予一个颜色,然后根据原始像素颜色将值分配给相邻像素。在计算每个像素时,这些值分布在整个图像上,因此所有像素都相互依赖。该示例将是 Floyd stein berg 抖动。

使用金属处理线程的方式,这种抖动方法将不起作用。抖动图像时,只能按从头到尾的顺序计算像素。是否有可能有一个不涉及线程的内核,或者一种选择整个图像数组以由单个线程计算的方法?

标签: swiftfiltermetaldithering

解决方案


简而言之,不,你不能用 GPU 计算来做到这一点,因为 GPU 方法是隐式并行的。这意味着一个结果不能依赖于所有其他结果。您可以尝试将计算分解为多个阶段,以便一次一个阶段可以并行完成。这取决于你的计算逻辑做什么。如果您只想在 GPU 上使用“一个线程”,那么只在 CPU 上进行计算可能会更快。如果您有兴趣,我写了一个方法,您可能想阅读有关使用 Metal 进行 Rice 减压的方法。这种方法对解压任务进行逐块分段。


推荐阅读