内存优化是最重要也是最有效的OpenCL性能优化技术.大量的应用程序是内存限制而不是计算限制.所以,掌握内存优化的方法是OpenCL优化的基础.在这章中,将会回顾OpenCL的内存模型,然后是最优的实践方法. 7.1 在Adreno GPU中的OpenCL内存模型 OpenCL定义了四种内存类型——也就是,global(全局的),local(本地的),constant(常量的),和private(私有的)内存,理解这些内存的不同点是基本要求.图7-1展示了四种内存概念上的设计图. 图7-1 Op…
在这一章中,将会用一些例子来展示如何使用之前章节中讨论的技术来进行优化.除了一些小的简单代码片段的展示外,还有两个熟知的图像滤波处理,Epsilon滤波和Sobel滤波,将会使用之前章节中讨论的方法进行一步一步地优化. 9.1 应用程序的代码样本 9.1.1 提升算法 这个例子说明了如何简化代码来提升性能.给定一张图片,对它进行8x8的box模糊滤波. 优化前的原始kernel代码: __kernel void ImageBoxFilter(__read_only image2d_t sourc…
这章提供了一个OpenCL应用程序优化的总体概述.更多的细节将会在接下来的章节中找到. 注意:OpenCL程序的优化是具有挑战性的.相比初始的程序开发工作,经常需要做更多的工作. 5.1 性能移植性 就像在2.4.2节中讨论的那样,在不同的架构之间,OpenCL一般都没有很好的性能移植性.针对某一个平台,特别是针对某个GPU优化的OpenCL应用程序,移植到Adreno GPU上后可能没有相同的性能.编程指南和其他OpenCL厂商的最佳做法,可能对Adreno GPU完全不适用.因此,针对在Ad…
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在Android开发中遇到关于内存问题,或者马上要参加面试,或者就是单纯的学习或复习一下内存相关知识,都欢迎阅读.(本文最后我会尽量列出所参考的文章). 内存简介:   RAM(random a…
3 在骁龙上使用OpenCL 在今天安卓操作系统和IOT(Internet of Things)市场上,骁龙是性能最强的也是最被广泛使用的芯片.骁龙的手机平台将最好的组件组合在一起放到了单个芯片上,这样保证了基于骁龙平台的设备将带来极致的功耗效率和集成的解决方案,从而带来最新的手机用户体验. 骁龙是一个多处理器系统,包含比如多模解调器(multimode modem),CPU,GPU,DSP,位置/GPS,多媒体,电源管理,RF,针对软件和操作系统的优化,内存,可连接性(Wi-Fi,蓝牙)等.…
作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益匪浅,为了让自己印象更深刻点,决定作此文,当做学习笔记也好,知识总结也罢,总归看过的东西要让自己很好地掌握很好地运用起来才是王道.在解读这些规则的同时,我会用我一年半多的移动网站开发经历提出一些针对移动网站的优化建议. 规则01:尽量减少HTTP请求 前端优化的黄金准则指导着前端页面的优化策略:只有10%-2…
这章将会说明一些kernel优化的小技巧. 8.1 kernel合并或者拆分 一个复杂的应用程序可能包含很多步骤.对于OpenCL的移植性和优化,可能会问需要开发有多少个kernel.这个问题很难回答,因为这涉及到很多的因素.下面是一些准则: 内存和计算之间的平衡. 足够多的wave来隐藏延迟. 没有寄存器溢出. 上面的要求可以通过执行以下操作实现: 如果这样做能够带来更好的数据并行,将一个大的kernel拆分成多个小的kernel. 如果内存的流量能够减少而且同样能保证并行性,可以将多个ker…
对于许多kernels来说,工作组大小的调整会是一种简单有效的方法.这章将会介绍基于工作组大小的基础知识,比如如何获取工作组大小,为什么工作组大小非常重要,同时也会讨论关于最优工作组大小的选择和调整的一般方法. 6.1 获取最大的工作组尺寸 在运行完clBuildProgram后,使用下面的API函数可以查询设备的最大工作组尺寸. size_t maxWorkGroupSize; clGetKernelWorkGroupInfo(myKernel, myDevice, CL_KERNEL_WOR…
2  Opencl的简介 这一章主要讨论Opencl标准中的关键概念和在手机平台上开发Opencl程序的基础知识.如果想知道关于Opencl更详细的知识,请查阅参考文献中的<The OpenCL Specification>.对于已经有OpenCL的基础知识和经验的开发者可以跳过这一章,直接跳到下一章阅读即可. 2.1 OpenCL背景和概述 Opencl是由Khronos group开发和维护的一个开源的和完全免费的标准,针对是如何在异构系统上进行跨平台的程序并行.OpenCL设计理念是帮助…
这章将简要讨论一些开发Adreno OpenCL应用程序的基本要求,下面将会介绍如何调试和统计程序性能. 4.1  安卓平台上开发OpenCL程序 目前,Adreno GPU主要是在安卓操作系统和在部分Linux系统上支持OpenCL.为了开发带OpenCL的安卓app,开发者必须熟悉android软件开发套件(SDK)和本地开发套件(NDK 用来运行C/C++的).更多关于Android SDK和NDK的信息,可分别参考https://developer.android.com/index.h…