swift - 金属计算 - 像素依赖于其他像素颜色
问题描述
我最近开始学习金属框架,所以我可以为我的 swift 应用程序编写一些过滤器。我即将编写一个基于误差扩散抖动抖动图片的金属内核。每个像素都被赋予一个颜色,然后根据原始像素颜色将值分配给相邻像素。在计算每个像素时,这些值分布在整个图像上,因此所有像素都相互依赖。该示例将是 Floyd stein berg 抖动。
使用金属处理线程的方式,这种抖动方法将不起作用。抖动图像时,只能按从头到尾的顺序计算像素。是否有可能有一个不涉及线程的内核,或者一种选择整个图像数组以由单个线程计算的方法?
解决方案
简而言之,不,你不能用 GPU 计算来做到这一点,因为 GPU 方法是隐式并行的。这意味着一个结果不能依赖于所有其他结果。您可以尝试将计算分解为多个阶段,以便一次一个阶段可以并行完成。这取决于你的计算逻辑做什么。如果您只想在 GPU 上使用“一个线程”,那么只在 CPU 上进行计算可能会更快。如果您有兴趣,我写了一个方法,您可能想阅读有关使用 Metal 进行 Rice 减压的方法。这种方法对解压任务进行逐块分段。
推荐阅读
- java - 使用 Java 解析 curl 响应
- c# - asp.net mvc中的登录和注册问题?
- react-native - 如何创建具有多行和动态宽度项目的水平 FlatList?
- grpc-python - GRPC Python - 从对等 ipv4 收到错误
- python - 向量化有条件地更改列值的函数
- css - 在内部网格线对齐子元素
- python - 为我的数据框创建带有百分比的单列饼图
- python - Detecting multiply forms on one image
- python - 将字符串转换为 IO[str] 数据类型
- jenkins - Jenkins 多分支管道在不相关的分支上触发管道