iOS - GPU加速矩阵转置,乘法和特征分解困境

 手机用户2502902237 发布于 2023-01-30 14:43

我正在开发一个需要在iOS平台上使用向量和矩阵的库.我决定研究OpenGLES,因为我计划进行的矩阵和矢量操作(主要是转置,矩阵乘法和特征分解)肯定会受益于GPU加速.

问题是我不熟悉OpenGLES,老实说可能不是最好的选择.如果我要使用OpenGLES,我是否必须手动编写执行矩阵转置,乘法和特征分解的算法?或者是否有另一个Apple或第三方框架可以帮助我完成这些任务.

然而,主要的分歧是我希望这些操作是GPU加速的.


我将使用Accelerate Framework和矢量化算法实现我的程序,然后测试它是否足够快以达到我的目的,如果不是,那么尝试GPU实现.

Brad Larson.. 5

作为组合状态,Accelerate使用SIMD来加速其许多功能,但它是基于CPU的.对于较小的数据集,它绝对是可行的方法,但在GPU上运行可以显着地超越它,以获得足够大的数据集,并且可以轻松实现并行化操作.

为了避免必须自己编写所有OpenGL ES交互代码,您可以查看我的GPUImage框架,该框架封装了Objective-C中的片段着色器操作.特别是,您可以使用GPUImageRawDataInput和GPUImageRawDataOutput类将原始字节数据提供给GPU,然后使用自定义片段着色器对其进行操作.

矩阵转置操作将很快实现,因为所有矩阵元素彼此独立.通过常数或小矩阵进行矩阵乘法也很容易,但我不确定如何正确地缩放两个大矩阵的乘法.同样地,我没有一个很好的特征分解实现,我可以指出我的头脑.

处理片段着色器处理的缺点是默认情况下OpenGL ES接收并输出每个像素的4字节RGBA值.您可以在较新的设备上将其更改为半浮动,我知道其他人已使用此框架完成此操作,但我自己并未尝试过.您可以将单个浮点值打包为RGBA字节并在最后解压缩,这是将此数据输入和输出GPU的另一种方法.

最新的A7设备上的OpenGL ES 3.0支持提供了一些处理浮点数据的机会.您可以使用顶点数据而不是纹理输入,这允许您为每个顶点提供四个浮点数并最终提取这些浮点数.Bartosz Ciechanowski 在他的博客上对此进行了非常详细的描述.对于GPGPU操作来说,这可能是一种更好的通用方法,但是如果你可以让你的操作在片段着色器中对纹理数据运行,你会看到最新硬件上的巨大加速(iPhone 5S可以快〜100-1000倍)在这方面,iPhone 4的顶点处理和CPU速度几乎没有快速提升.

1 个回答
  • 作为组合状态,Accelerate使用SIMD来加速其许多功能,但它是基于CPU的.对于较小的数据集,它绝对是可行的方法,但在GPU上运行可以显着地超越它,以获得足够大的数据集,并且可以轻松实现并行化操作.

    为了避免必须自己编写所有OpenGL ES交互代码,您可以查看我的GPUImage框架,该框架封装了Objective-C中的片段着色器操作.特别是,您可以使用GPUImageRawDataInput和GPUImageRawDataOutput类将原始字节数据提供给GPU,然后使用自定义片段着色器对其进行操作.

    矩阵转置操作将很快实现,因为所有矩阵元素彼此独立.通过常数或小矩阵进行矩阵乘法也很容易,但我不确定如何正确地缩放两个大矩阵的乘法.同样地,我没有一个很好的特征分解实现,我可以指出我的头脑.

    处理片段着色器处理的缺点是默认情况下OpenGL ES接收并输出每个像素的4字节RGBA值.您可以在较新的设备上将其更改为半浮动,我知道其他人已使用此框架完成此操作,但我自己并未尝试过.您可以将单个浮点值打包为RGBA字节并在最后解压缩,这是将此数据输入和输出GPU的另一种方法.

    最新的A7设备上的OpenGL ES 3.0支持提供了一些处理浮点数据的机会.您可以使用顶点数据而不是纹理输入,这允许您为每个顶点提供四个浮点数并最终提取这些浮点数.Bartosz Ciechanowski 在他的博客上对此进行了非常详细的描述.对于GPGPU操作来说,这可能是一种更好的通用方法,但是如果你可以让你的操作在片段着色器中对纹理数据运行,你会看到最新硬件上的巨大加速(iPhone 5S可以快〜100-1000倍)在这方面,iPhone 4的顶点处理和CPU速度几乎没有快速提升.

    2023-01-30 14:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有