我可以 运行 在 GPU 上使用 Metal 的算法吗?
Can I run an algorithm on the GPU using Metal?
我正在使用最小编辑距离算法来确定两个字符串的相关程度。我已经将它实现到 CPU 上的 运行 并且当你有数百个字符串时它工作得很好,但是当你多次比较数千个字符串时它是减速的来源。所以我认为将负载卸载到 GPU 上可能会有用,因为它可以一次执行多个比较。
这可能吗?我遇到的 Metal 资源主要用于没有帮助的图形。或者他们可能是?
你想做的事情是可能的,至少对于某些问题规模来说是这样,但这并不是特别简单。您需要做的是以在 GPU 上可以 运行 和 iOS 的方式表达算法,这可能意味着使用 Metal。具体来说,您需要使用实现最小编辑距离算法的 Metal 着色语言编写一个或多个计算内核,然后使用 Metal 计算命令编码器调度它们。 Web 上有多种关于使用 Metal 进行计算编程的资源。
我不知道 MED 的现有 Metal 实现,但至少有 one CUDA implementation, and you can read a longer explanation of MED on the GPU here。
除了@warrenm 的回答之外,您还需要编写一个或多个内核函数。有很酷的金属教程网站:http://metalbyexample.com, also Apple documentation has something about it: https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Compute-Ctx/Compute-Ctx.html
还有一些关于 https://www.raywenderlich.com 的教程,但它们大多是 graphic-oriented。您还可以查看 iOS 的 GPUImage 库,它是一个很酷的 OpenGL 包装器,具有漂亮的界面。也许还有一个选项可以编写将使用 OpenGL 执行的自定义函数?
我正在使用最小编辑距离算法来确定两个字符串的相关程度。我已经将它实现到 CPU 上的 运行 并且当你有数百个字符串时它工作得很好,但是当你多次比较数千个字符串时它是减速的来源。所以我认为将负载卸载到 GPU 上可能会有用,因为它可以一次执行多个比较。
这可能吗?我遇到的 Metal 资源主要用于没有帮助的图形。或者他们可能是?
你想做的事情是可能的,至少对于某些问题规模来说是这样,但这并不是特别简单。您需要做的是以在 GPU 上可以 运行 和 iOS 的方式表达算法,这可能意味着使用 Metal。具体来说,您需要使用实现最小编辑距离算法的 Metal 着色语言编写一个或多个计算内核,然后使用 Metal 计算命令编码器调度它们。 Web 上有多种关于使用 Metal 进行计算编程的资源。
我不知道 MED 的现有 Metal 实现,但至少有 one CUDA implementation, and you can read a longer explanation of MED on the GPU here。
除了@warrenm 的回答之外,您还需要编写一个或多个内核函数。有很酷的金属教程网站:http://metalbyexample.com, also Apple documentation has something about it: https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Compute-Ctx/Compute-Ctx.html
还有一些关于 https://www.raywenderlich.com 的教程,但它们大多是 graphic-oriented。您还可以查看 iOS 的 GPUImage 库,它是一个很酷的 OpenGL 包装器,具有漂亮的界面。也许还有一个选项可以编写将使用 OpenGL 执行的自定义函数?