Ios8 使用金属进行64位数字运算

Ios8 使用金属进行64位数字运算,ios8,accelerate-framework,metal,Ios8,Accelerate Framework,Metal,有一种说法称,对于使用大型数字阵列的计算,金属可能比加速框架更快 在阅读了Metal着色器语言的文档后,我意识到不支持双精度浮点或64位整数数组。我是不是忽略了什么?我以为Metal是为64位A7处理器设计的?A7上的CPU支持64位整数和双精度浮点运算。GPU没有。金属着色器在GPU上运行,而不是在CPU上运行 另一方面,这篇博文中的基准极为可疑。它正在以惊人的低效方式使用Accelerate。虽然编写良好的Metal当然有可能比正确使用Accelerate接口更快,但这不是基准测试真正显示的

有一种说法称,对于使用大型数字阵列的计算,金属可能比加速框架更快


在阅读了Metal着色器语言的文档后,我意识到不支持双精度浮点或64位整数数组。我是不是忽略了什么?我以为Metal是为64位A7处理器设计的?

A7上的CPU支持64位整数和双精度浮点运算。GPU没有。金属着色器在GPU上运行,而不是在CPU上运行


另一方面,这篇博文中的基准极为可疑。它正在以惊人的低效方式使用Accelerate。虽然编写良好的Metal当然有可能比正确使用Accelerate接口更快,但这不是基准测试真正显示的。

我认为64位A7使用需要双精度浮点或64位整数数组?@RobertHarvey:我只是对此感到困惑,由于处理器具有执行64位算术的能力,着色器语言不支持它。我只是想知道我是否忽略了什么。抱歉,如果这听起来像是咆哮;它不是一个。64位并不总是意味着64位端到端。处理器内部可以是64位,但仍然使用较小的数字输入和输出;这种事经常发生。我对着色器一无所知,但在我看来,最终数字的分辨率不需要高于,比如说,最高像素数乘以颜色数,可能是数十亿,而不是万亿。如何编写更有效的加速方法?我很乐意运行新的基准测试。我在写这篇博文时提到,关于这篇博文我注意到的一点是,纯Swift实现使用溢出检查运算符。Metal和accelerate不执行溢出检查,在Swift中使用已检查运算符可防止自动矢量化。使用未选中的运算符代替&+,&*。。。。还可以使用UnsafeMutablePointer,因为它不执行边界检查。另外,不要在加速代码中使用1或负的向量。使用vDSP_uu标量向量函数。