中国建设银行网站密码忘了怎么办,内部网站开发,专业软件定制开发公司,网页搭建app一、前言
随着移动端芯片性能的不断提升#xff0c;在移动端上实时进行计算机图形学、深度学习模型推理等计算密集型任务不再是一个奢望。在移动端设备上#xff0c;GPU 凭借其优秀的浮点运算性能#xff0c;以及良好的 API 兼容性#xff0c;成为移动端异构计算中非常重要…一、前言
随着移动端芯片性能的不断提升在移动端上实时进行计算机图形学、深度学习模型推理等计算密集型任务不再是一个奢望。在移动端设备上GPU 凭借其优秀的浮点运算性能以及良好的 API 兼容性成为移动端异构计算中非常重要的计算单元。现阶段在 Android 设备市场高通 Adreno 和华为 Mali 已经占据了手机 GPU 芯片的主要份额二者均提供了强劲的 GPU 运算能力。OpenCL作为 Android 的系统库在两个芯片上均得到良好的支持。
目前百度 APP 已经将 GPU 计算加速手段应用在深度模型推理及一些计算密集型业务上本文将介绍 OpenCL 基础概念与简单的 OpenCL 编程。 注Apple 对于 GPU 推荐的使用方式是 Metal此处暂不做展开
二、基础概念
2.1 异构计算
异构计算Heterogeneous Computing主要是指使用不同类型指令集和体系架构的计算单元组成系统的计算方式。常见的计算单元类别包括 CPU、GPU 等协处理器、DSP、ASIC、FPGA 等。
2.2 GPU
GPUGraphics Processing Unit图形处理器又称显示核心、显卡、视觉处理器、显示芯片或绘图芯片是一种专门在个人电脑、工作站、游戏机和一些移动设备如平板电脑、智能手机等上执行绘图运算工作的微处理器。传统方式中提升 CPU 时钟频率和内核数量而提高计算能力的方式已经遇到了散热以及能耗的瓶颈。虽然 GPU 单个计算单元的工作频率较低却具备更多的内核数及并行计算能力。相比于 CPUGPU 的总体性能 - 芯片面积比性能 - 功耗比都更高。
三、OpenCL
OpenCLOpen Computing Language是一个由非盈利性技术组织 Khronos Group 掌管的异构平台编程框架支持的异构平台涵盖 CPU、GPU、DSP、FPGA 以及其他类型的处理器与硬件加速器。OpenCL 主要包含两部分一部分是一种基于 C99 标准用于编写内核的语言另一部分是定义并控制平台的 API。
OpenCL 类似于另外两个开放的工业标准 OpenGL 和 OpenAL 二者分别用于三维图形和计算机音频方面。OpenCL 主要扩展了 GPU 图形生成之外的计算能力。
3.1 OpenCL 编程模型
使用 OpenCL 编程需要了解 OpenCL 编程的三个核心模型OpenCL 平台、执行和内存模型。
平台模型Platform Model
Platform 代表 OpenCL 视角上的系统中各计算资源之间的拓扑联系。对于 Android 设备Host 即是 CPU。每个 GPU 计算设备Compute Device均包含了多个计算单元Compute Unit每个计算单元包含多个处理元素Processing Element。对于 GPU 而言计算单元和处理元素就是 GPU 内的流式多处理器。 执行模型 Execution Model
通过 OpenCL 的 clEnqueueNDRangeKernel 命令可以启动预编译好的 OpenCL 内核OpenCL 架构上可以支持 N 维的数据并行处理。以二维图片为例如果将图片的宽高作为 NDRange在 OpenCL 的内核中可以把图片的每个像素放在一个处理元素上执行借此可以达到并行化执行的目地。
从上面平台模型部分可以知道为了提高执行效率处理器通常会将处理元素分配到执行单元中。我们可以在 clEnqueueNDRangeKernel 中指定工作组大小。同一个工作组中的工作项可以共享本地内存可以使用屏障Barriers去进行同步也可以通过特定的工作组函数比如 async_work_group_copy来进行协作。 内存模型 Memory Model
下图中描述了 OpenCL 的内存结构 宿主内存Host Memory宿主 CPU 可直接访问的内存。 全局 / 常量内存 Global/Constant Memory可以用于计算设备中的所有计算单元。 本地内存Local Memory对计算单元中的所有处理元素可用。 私有内存Private Memory用于单个处理元素。 3.2 OpenCL 编程
OpenCL 的编程实际应用中需要一些工程化的封装本文仅以两个数组相加作为举例并提供一个简单的示例代码作为参考 ARRAY_ADD_SAMPLE (https://github.com/xiebaiyuan/opencl_cook/blob/master/array_add/array_add.cpp)。
本文将用此作为示例来阐述 OpenCL 的工作流程。
OpenCL 整体流程主要分为以下几个步骤
初始化 OpenCL 相关环境如 cl_device、cl_context、cl_command_queue 等 cl_int status;
// init deviceruntime.device init_device();
// create contextruntime.context clCreateContext(nullptr, 1, runtime.device, nullptr, nullptr, status);
// create queueruntime.queue clCreateCommandQueue(runtime.context, runtime.device, 0, status);初始化程序要执行的 program、kernel cl_int status;// init programruntime.program build_program(runtime.context, runtime.device, PROGRAM_FILE);// create kernelruntime.kernel clCreateKernel(runtime.program, KERNEL_FUNC, status);准备输入输出设置到 CLKernel // init datas float input_data[ARRAY_SIZE];float bias_data[ARRAY_SIZE];float output_data[ARRAY_SIZE];for (int i 0; i ARRAY_SIZE; i) {input_data[i] 1.f * (float) i;bias_data[i] 10000.f;}// create buffersruntime.input_buffer clCreateBuffer(runtime.context, CL_MEM_READ_ONLY |CL_MEM_COPY_HOST_PTR, ARRAY_SIZE * sizeof(float), input_data, status);runtime.bias_buffer clCreateBuffer(runtime.context, CL_MEM_READ_ONLY |CL_MEM_COPY_HOST_PTR, ARRAY_SIZE * sizeof(float), bias_data, status);runtime.output_buffer clCreateBuffer(runtime.context, CL_MEM_READ_ONLY |CL_MEM_COPY_HOST_PTR, ARRAY_SIZE * sizeof(float), output_data, status);// config cl argsstatus clSetKernelArg(runtime.kernel, 0, sizeof(cl_mem), runtime.input_buffer);status | clSetKernelArg(runtime.kernel, 1, sizeof(cl_mem), runtime.bias_buffer);status | clSetKernelArg(runtime.kernel, 2, sizeof(cl_mem), runtime.output_buffer);执行获取结果 // clEnqueueNDRangeKernelstatus clEnqueueNDRangeKernel(runtime.queue, runtime.kernel, 1, nullptr, ARRAY_SIZE,nullptr, 0, nullptr, nullptr);// read from outputstatus clEnqueueReadBuffer(runtime.queue, runtime.output_buffer, CL_TRUE, 0,sizeof(output_data), output_data, 0, nullptr, nullptr);// do with output_data...
四、总结
随着 CPU 瓶颈的到来GPU 或者其他专用计算设备的编程将是未来的一个重要的技术方向。 文章转载自: http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn http://www.morning.yrgb.cn.gov.cn.yrgb.cn http://www.morning.ctlbf.cn.gov.cn.ctlbf.cn http://www.morning.xirfr.cn.gov.cn.xirfr.cn http://www.morning.ftmly.cn.gov.cn.ftmly.cn http://www.morning.krhkb.cn.gov.cn.krhkb.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.wjhnx.cn.gov.cn.wjhnx.cn http://www.morning.hhqtq.cn.gov.cn.hhqtq.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.kpnpd.cn.gov.cn.kpnpd.cn http://www.morning.wkhfg.cn.gov.cn.wkhfg.cn http://www.morning.jbxd.cn.gov.cn.jbxd.cn http://www.morning.yszrk.cn.gov.cn.yszrk.cn http://www.morning.lddpj.cn.gov.cn.lddpj.cn http://www.morning.webpapua.com.gov.cn.webpapua.com http://www.morning.rfhm.cn.gov.cn.rfhm.cn http://www.morning.cpljq.cn.gov.cn.cpljq.cn http://www.morning.dlwzm.cn.gov.cn.dlwzm.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.ntlxg.cn.gov.cn.ntlxg.cn http://www.morning.hbnwr.cn.gov.cn.hbnwr.cn http://www.morning.frpfk.cn.gov.cn.frpfk.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.nfccq.cn.gov.cn.nfccq.cn http://www.morning.fnzbx.cn.gov.cn.fnzbx.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.cpctr.cn.gov.cn.cpctr.cn http://www.morning.mfmx.cn.gov.cn.mfmx.cn http://www.morning.rmltt.cn.gov.cn.rmltt.cn http://www.morning.jfqpc.cn.gov.cn.jfqpc.cn http://www.morning.jiuyungps.com.gov.cn.jiuyungps.com http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.msxhb.cn.gov.cn.msxhb.cn http://www.morning.gppqf.cn.gov.cn.gppqf.cn http://www.morning.zqdhr.cn.gov.cn.zqdhr.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.mbrbk.cn.gov.cn.mbrbk.cn http://www.morning.xbdd.cn.gov.cn.xbdd.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.wcczg.cn.gov.cn.wcczg.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.zffn.cn.gov.cn.zffn.cn http://www.morning.qrwnj.cn.gov.cn.qrwnj.cn http://www.morning.ttvtv.cn.gov.cn.ttvtv.cn http://www.morning.ktxd.cn.gov.cn.ktxd.cn http://www.morning.zbkdm.cn.gov.cn.zbkdm.cn http://www.morning.znkls.cn.gov.cn.znkls.cn http://www.morning.mzkn.cn.gov.cn.mzkn.cn http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn http://www.morning.frqtc.cn.gov.cn.frqtc.cn http://www.morning.ffgbq.cn.gov.cn.ffgbq.cn http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.ryznd.cn.gov.cn.ryznd.cn http://www.morning.rfxw.cn.gov.cn.rfxw.cn http://www.morning.jfxth.cn.gov.cn.jfxth.cn http://www.morning.smyxl.cn.gov.cn.smyxl.cn http://www.morning.chmkt.cn.gov.cn.chmkt.cn http://www.morning.aa1585.com.gov.cn.aa1585.com http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.drcnn.cn.gov.cn.drcnn.cn http://www.morning.jnbsx.cn.gov.cn.jnbsx.cn http://www.morning.qrmyd.cn.gov.cn.qrmyd.cn http://www.morning.sbrjj.cn.gov.cn.sbrjj.cn http://www.morning.lcmhq.cn.gov.cn.lcmhq.cn http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.chzbq.cn.gov.cn.chzbq.cn http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn http://www.morning.ogzjf.cn.gov.cn.ogzjf.cn http://www.morning.smfbw.cn.gov.cn.smfbw.cn http://www.morning.chbcj.cn.gov.cn.chbcj.cn http://www.morning.tqjks.cn.gov.cn.tqjks.cn http://www.morning.ybgpk.cn.gov.cn.ybgpk.cn http://www.morning.xkgyh.cn.gov.cn.xkgyh.cn http://www.morning.wqcz.cn.gov.cn.wqcz.cn