使用OpenGL ES 2.0的线性代数库,适用于iOS。

10

有没有人知道一个在iOS下使用OpenGL ES 2.0的线性代数库?

具体来说,我正在寻找一种方法,在iOS设备上使用GPU进行矩阵乘法运算,可以处理任意大小的矩阵(例如,远大于4x4,更像是5,000 x 100,000)。


我相信OpenGL使用CPU来执行简单的矩阵运算,因为这些矩阵只有9*9。而显卡着色器则处理更大的东西。 - Jesus Ramos
3
@JesusRamos,是的,但如果您将帧缓冲区视为一个巨大的值矩阵(而不是颜色集合),则可以编写着色器将乘法结果写入新的帧缓冲区。cklin正在询问是否有人已经编写了库来实现这一点。 - benzado
1
据我所知,iOS不支持浮点纹理,有限的精度可能会导致在GPU上实现所需功能时出现一些问题。 - harism
如果是这样,那我就改口了。 - harism
1
@JesusRamos glReadPixel是从GPU内存传输数据到主内存的一种方式。还有另一种方法,可以通过指定缓存纹理作为渲染目标来实现。请参见我的更具体的问题这里 - cklin
显示剩余2条评论
3个回答

0

你询问“在底层使用OpenGL ES 2.0”的具体原因是什么?还是只想要一个快速的、硬件优化的线性代数库,比如内置于iOS中的BLAS


2
好的,Accelerate框架很好,但是(1)我想把工作从CPU转移到GPU上,(2)我想看看GPU实现是否更快。 - cklin

0

MetalPerformanceShaders.framework提供了一些经过调整的类似BLAS的函数。它不是GLES,而是基于GPU的Metal技术。请参见MetalPerformanceShaders/MPSMatrixMultiplication.h。


-1

iOS上的OpenGL可能不是正确的选择。如果你要使用GPU,那么iOS上的Metal支持将是更好的选择。

Metal

您可以使用苹果公司对Metal计算着色器的支持。我在我的博士学位中编写了高性能代码。我曾经用Metal计算一些分形图像,这可能会给您一些启示。

总的来说,这个问题太过宽泛。您打算用这个库做什么,或者您打算如何使用它?这是一次性的乘法吗?您是否已经测试了当前的库,并发现性能太慢了?如果是这样,那么差距有多大?

通常情况下,您可以在CPU vs. GPU vs. 专用硬件上运行教育性或纯信息性实验,以测试算法X的性能,但最常见的情况是遇到Amdahl's law和您的代码与该领域的专家团队之间的比较。

Accelerate

您还可以查看加速框架,该框架提供BLAS。

根据WWDC 2014的演讲加速框架中的新功能,苹果已经手动调整了针对其当前一代硬件的线性代数库。它们不仅快速,而且节能。还有更新的演讲。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接