EDN China > 设计实例 > 微处理器与DSP > CPU/GPU > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

Mali GPU编程特性及二维浮点矩阵运算并行优化

龚若皓?? 杨斌?? 西南交通大学 单片机与嵌入式系统应用?? 2015年07月29日 ?? 收藏0

2.Mali GPU的并行化计算模型构建

Mali-T600系列的GPU 对OpenCL 1.1 Full Profile标准进行了良好的支持,OpenCL是真正意义上的跨平台异构并行框架,能够真正挖掘出Mali GPU的并行计算特性。

2.1 Mali GPU在OpenCL框架下的并行任务抽象及线程规划

OpenCL是一个由编程语言规范,应用程序接口、库函数和运行时系统组成的跨平台异构并行计算框架,Mali-T604 GPU在OpenCL下的抽象层次如下面的图4所示:

图4 OpenCL针对Mali-T604的抽象层次
图4 OpenCL针对Mali-T604的抽象层次

OpenCL的并行基于SMT(同时多线程)的思想,由用户指定自定义数目的线程,并根据线程的标识符设计计算线程与数据关联的映射法则,SMT架构主要用于隐蔽访存的延时。OpenCL框架下,CPU主机端程序由OpenCL的API编写,实现计算平台的初始化,存储器的分配和交互的控制,并决定分配的计算线程的维度和每一维的数量。设备端的内核程序由OpenCL C语言编写,Mali GPU会根据内核对象创建主机端请求数量的线程实例,每个线程的运算工作都由图4中一个对应的PE进行处理,线程的工作逻辑决定了线程标识号和数据的关联关系。多个线程被组织为工作组的形式,每一个工作组固定分配到一个CU上进行处理,同一个工作组中的线程会在对应的CU上由Mali GPU的任务管理单元进行快速的切换和调度,保证一个CU上的PE最大限度保持忙碌。

2.2 Mali GPU多核环境下的存储器空间映像方法

如图4所示,Mali GPU和Cortex A15 CPU所共用的RAM在逻辑上被OpenCL框架切割成了四种不同的类型,Mali-T600系列的GPU使用统一存储器模型,四种类型的存储器都映射到片外RAM上,Cortex-A15 CPU和Mali-T604 GPU共享物理RAM,相对桌面GPU平台而言,在Mali平台上将数据从全局存储器拷贝到局部或者私有存储器并不能使访存性能得到提升,但相对地也不用像桌面GPU一样进行从主存到显存的数据拷贝。Mali GPU有三种访问RAM的方式,由传入clCreateBuffer函数中的不同参数决定,其示意图如下:

图5 OpenCL框架下Mali GPU对存储器的不同访问方式
图5 OpenCL框架下Mali GPU对存储器的不同访问方式

Cortex-A15 CPU和Mali-T604 GPU使用不同的虚拟地址空间,在主机端由malloc函数分配的缓存,Mali GPU无法访问。Mali GPU可以访问clCreateBuffer函数分配出的缓存,CPU借助OpenCL中的map映射操作也可实现对这类缓存的读写,图5中的方式2需要主机端的缓存进行数据拷贝来初始化,方式3和方式2类似,但只在OpenCL的内核函数首次使用该缓存时才进行数据拷贝,在CPU端进行map操作时GPU还会将数据拷贝回主机端的缓存,对于Mali GPU而言,多余的数据拷贝操作会降低访存效率。图5中的方式1是ARM官方建议的访存方式,CPU和GPU共享一块物理缓存,高速实现数据交互。

2.3 Mali GPU的向量处理特性

Mali-T604 GPU内部有128位宽度的向量寄存器,使用OpenCL C中的内建向量类型可以让数据自动以SIMD的形式在Mali GPU的ALU中进行并行计算,Mali GPU中将数据以16个字节对齐可以使得数据的长度和高速缓存适配,加快数据存取速度,Mali-T600系列GPU中加载一个128位的向量和加载一个单字节数据花费的时间是一样的。将数据以128位进行对齐,能够最大限度发挥Mali-T604 GPU的访存和运算效率。

【分页导航】


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

GPGPU? OpenCL?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈