问题描述
我正在尝试创建一个 seam carving 实现,它将使用 Metal 在 GPU 上运行。算法的动态编程部分需要逐行(或逐列)处理图像,所以我知道它并不完全适合 GPU,但我认为图像可能有数千像素宽/高,它仍然会受益于并行化。
我的两个想法是
- 编写一个使用 2D 纹理的着色器,但确保 Metal 以正确的顺序计算图像,在开始下一行之前完成一行
- 使用一维纹理编写着色器,然后手动传入图像的每一行进行计算;理想情况下,可以在 2D 纹理中创建视图,而不必将数据复制到单独的 1D 纹理中
我对 Metal 和 Swift 还是个新手,所以我对这两个的幼稚尝试都没有奏效。对于选项 1,我尝试使用 Nx1x1 的线程组来调度线程,但结果纹理只是返回全零 – 此外我不相信这在理论上甚至是正确的,即使我告诉它使用高度为 1 的线程组,我不确定我能保证它会从第一行开始。对于选项 2,我只是找不到按行/列将 1D 视图创建为 2D 纹理的好方法 - 文档似乎表明 Metal 不喜欢让您访问基础数据,但我不会如果有办法做到这一点,你会感到惊讶。
感谢您的任何想法!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)