使用swift在GPU上运行函数

使用swift在GPU上运行函数,swift,metal,Swift,Metal,我有一个可以长时间运行的函数,处理一个有几个内部循环的作业。我假设在GPU而不是CPU上运行这个会更快 有没有办法在GPU上运行任意函数 苹果公司表示,金属: 金属2提供接近直接访问图形处理单元GPU,使您能够最大限度地提高。。。计算应用程序的潜力 我看到过使用金属进行游戏和图形渲染的示例,但是有没有任何示例或链接可以帮助我运行常规功能?GPU对于某些类型的纯计算非常有用 任务必须是高度并行的 它不需要来自系统库或框架的任何API。金属有自己的库,只具有计算功能。没有磁盘访问。数组/缓冲区之外没

我有一个可以长时间运行的函数,处理一个有几个内部循环的作业。我假设在GPU而不是CPU上运行这个会更快

有没有办法在GPU上运行任意函数

苹果公司表示,金属:

金属2提供接近直接访问图形处理单元GPU,使您能够最大限度地提高。。。计算应用程序的潜力


我看到过使用金属进行游戏和图形渲染的示例,但是有没有任何示例或链接可以帮助我运行常规功能?

GPU对于某些类型的纯计算非常有用

任务必须是高度并行的

它不需要来自系统库或框架的任何API。金属有自己的库,只具有计算功能。没有磁盘访问。数组/缓冲区之外没有数据结构

系统允许计算着色器运行的时间有一个上限,因为它可能是一个无限循环,没有其他方法可以停止它。因此,根据您所说的长时间处理的含义,它可能不适合,或者只适合分解成大块的工作


如果任务适合GPU,则必须为GPU显式编程。您不能只是透明地或自动地将普通代码迁移到GPU。它必须被重写。

GPU对于某些类型的纯计算非常有用

任务必须是高度并行的

它不需要来自系统库或框架的任何API。金属有自己的库,只具有计算功能。没有磁盘访问。数组/缓冲区之外没有数据结构

系统允许计算着色器运行的时间有一个上限,因为它可能是一个无限循环,没有其他方法可以停止它。因此,根据您所说的长时间处理的含义,它可能不适合,或者只适合分解成大块的工作


如果任务适合GPU,则必须为GPU显式编程。您不能只是透明地或自动地将普通代码迁移到GPU。它必须重写。

您的假设不完全正确。任意函数?不,请看下面肯的答案。您必须为Metal编写自定义代码,只使用它们提供的API。这不是小事。你的假设并不完全正确。任意函数?不,请看下面肯的答案。您必须为Metal编写自定义代码,只使用它们提供的API。这不是小事。除了Ken在其优秀答案中概述的内容外,GPU实际上只适用于单指令多数据SIMD问题,即在锁步中对所有计算单元运行相同的指令流,但每个计算单元对不同的数据进行操作。将变换矩阵应用于一组顶点就是此类操作的一个很好的例子。就我所能确定的而言,系统允许计算着色器运行的时间上限不到一秒。除了Ken在其优秀答案中概述的内容外,GPU实际上只适用于单指令多数据的SIMD问题,即在锁步中对所有计算单元运行相同的指令流,但每个计算单元对不同的数据进行操作。将变换矩阵应用于一组顶点就是此类操作的一个很好的例子。就我所能确定的而言,系统允许计算着色器运行的时间上限不到一秒。整个着色器大约10秒。