将 OpenCL/CUDA 转换为金属

Posted

技术标签:

【中文标题】将 OpenCL/CUDA 转换为金属【英文标题】:Convert OpenCL/CUDA to Metal 【发布时间】:2019-02-16 22:33:48 【问题描述】:

我即将将我项目的一些 GPU 内核从 OpenCL/Cuda 转换为 Metal,以便在 Apple 设备上运行我的应用程序。目前,我的项目完全用 C/C++ 编写。在做了一些研究之后,我想我需要用 Swift 或 Objective-C 来弄脏我的手。但老实说,我不确定这些东西,因为用于计算和深度学习的 Metal 语言是相当新的。

我知道有一个名为“CoreML”的库,但我的应用需要一些自定义内核。我的问题:在我的情况下,处理 Apple 设备低级 API 的最佳方法是什么?

【问题讨论】:

还有一个语言变体 Objective-C++ 支持完整的 c++ 并添加了用于处理 Foundation 类的 smalltalk 语法。如果您使用“Core”库,API 语法类似于 C 而不是 smalltalk,因此可能甚至不需要学习 swift 或 Objective-C。 【参考方案1】:

金属着色语言是 C++ 的一个版本。我在将 OpenCL 或 CUDA 内核移植到 Metal 时没有遇到太多麻烦。

Core ML 仅支持有限的一组层。您可以编写自己的自定义层,包括编写 CPU 版本和可选的 GPU 版本(使用 Metal 语言)。

我为此写了一篇博文:http://machinethink.net/blog/coreml-custom-layers/

【讨论】:

很高兴听到这个消息。非常感谢!

以上是关于将 OpenCL/CUDA 转换为金属的主要内容,如果未能解决你的问题,请参考以下文章

OpenCL (Cuda) 中的元素操作

GPGPU、OpenCL、CUDA、ATI 流

CMake+OpenCL+CUDA -> 运行时库可能被隐藏

NVIDIA OpenCL 设备版本

将 YUV 数据转换为 Image 格式 Opencl

从 ArrayFire 使用 OpenGL