正在加载图片...
第1期 丁科,等:GPU通用计算及其在计算智能领域的应用 ·7 计算单元1 计算单元M OpenCL的核函数启动后,每个工作项都会执行 私有内相 私有内存 私有内宿 私有内存 核函数中指令,这一点也与CUDA相同。由于 工作项1 工作项W 工作项1 工作项N OpenCL是与具体硬件无关的,因此,核函数的启动 相对CUDA要复杂一些。(CUDA中,复杂的维护工 局部内存 局部内存 作由运行时负责,用户也可以通过Driver API来显 全局/常量缓存 示的管理和查询。由于CUDA是针对专用硬件平 全局内存 台,因此,一般而言没有这样做的必要。) 如图10,OpenCL首先需要创建一个上下文 图8 OpenCL内存模型 Fig.8 OpenCL memory model (context)来管理设备,不同类型的硬件对应不同类 如图8所示,OpenCL规范还定义了内存的层级 型的上下文。上下文对硬件设备进行了封装,为主 结构和可见性:远离计算单元的全局内存(global 机调用设备的提供了统一的接口。主机启动核函数 memory)和常量内存(constant memory)是全局可见 后,核函数被放在一个命令队列(CMD queue)中,等 待执行。当设备完成一个核函数的执行后,会取出 的,片上的局部内存(local memory)、计算单元内部 的私有内存(private memory)则是局部可见的。 队列中的第一个核函数继续执行。关于OpenCL更 4.2数据并行模型 详细的说明,可以参考[B,5);关于基于AMD GPU OpenCL定义了程序的执行模式。图9给出了 的编程开发,可以参见16] OpenCL抽象的数据并行模型。在OpenCL的概念 命令队列 应用程序 一核函数 中,执行单元也同是以层级结构进行组织的:工作项 (work item)组成工作组(work group),工作组进而 核函数 命令队列 构成索引空间一NDRange。OpenCL的工作项,相 当于CUDA的线程,是核函数执行的最小单元;工 OpenCL上下文 OpenCL设备 OpenCL设备 作组对应于CUDA的线程块,工作组内的项有更加 方便的数据共享和同步机制,便于彼此协作。工作 图10 OpenCL通过命令队列和上下文管理核函数执行 组又被置于更大的索引空间NDRange中,它发挥着 Fig.10 OpenCL manages the kernels through com- CUDA中线程格的作用,为工作组和工作项提供全 mand queue and context 局索引。 4.4函数库 全局大小(0) 工作组 OpenCL的生态系统也提供了大量的函数库,方 组ID 0.1 便开发者利用。开源的数学函数库clMath实现了 0.0 工作项 1.0 1.1 快速傅里叶变换(F℉T)和基础线性代数全程库 (BLAS)。其中,FFT支持1~3维的实数和复数变 换:BLAS支持全部1~3级别的代数运算。在 clMath的基础上,MAGMA提供了矩阵的LU、QR和 局部大小(0) Chokesky分解、特征值计算等重要的矩阵操作的 图9 OpenCL并行执行模型 OpenCL实现。 Fig.9 OpenCL execution model 4.5调试和性能工具 同CUDA一样,工作项除了拥有在工作组内的 目前已有许多优秀的工具,用于OpenCL程序的 坐标外,也具有工作组内的唯一的索引和唯一的全 调试和优化。AMD APP SDK中的CodeXL包含了一 局索引:工作组也有着类似的索引结构。 整套软件工具,帮助开发者最大限度地发掘GPU的 4.3设备管理与核函数启动 计算潜力。CodeXL包括功能强大的调试器,能够对 OpenCL的核函数的基本结构同CUDA完全相 CPU和GPU端的代码进行细致的监测,同时还能对 同,只是在具体编写时所使用的关键字不同。 OpenCL的kernel函数进行表态分析。CodeXL可以图 愿摇 韵责藻灶悦蕴 内存模型 云蚤早援愿摇 韵责藻灶悦蕴 皂藻皂燥则赠 皂燥凿藻造 如图 愿 所示袁韵责藻灶悦蕴 规范还定义了内存的层级 结构和可见性院远离计算单元的全局内存渊 早造燥遭葬造 皂藻皂燥则赠冤和常量内存渊 糟燥灶泽贼葬灶贼 皂藻皂燥则赠冤 是全局可见 的袁片上的局部内存渊造燥糟葬造 皂藻皂燥则赠冤 尧计算单元内部 的私有内存渊 责则蚤增葬贼藻 皂藻皂燥则赠冤则是局部可见的遥 源援圆摇 数据并行模型 韵责藻灶悦蕴 定义了程序的执行模式遥 图 怨 给出了 韵责藻灶悦蕴 抽象的数据并行模型遥 在 韵责藻灶悦蕴 的概念 中袁执行单元也同是以层级结构进行组织的院工作项 渊憎燥则噪 蚤贼藻皂冤 组成工作组渊 憎燥则噪 早则燥怎责冤 袁工作组进而 构成索引空间要要要晕阅砸葬灶早藻遥 韵责藻灶悦蕴 的工作项袁相 当于 悦哉阅粤 的线程袁是核函数执行的最小单元曰工 作组对应于 悦哉阅粤 的线程块袁工作组内的项有更加 方便的数据共享和同步机制袁便于彼此协作遥 工作 组又被置于更大的索引空间 晕阅砸葬灶早藻 中袁它发挥着 悦哉阅粤 中线程格的作用袁为工作组和工作项提供全 局索引遥 图 怨摇 韵责藻灶悦蕴 并行执行模型 云蚤早援怨摇 韵责藻灶悦蕴 藻曾藻糟怎贼蚤燥灶 皂燥凿藻造 同 悦哉阅粤 一样袁工作项除了拥有在工作组内的 坐标外袁也具有工作组内的唯一的索引和唯一的全 局索引曰工作组也有着类似的索引结构遥 源援猿摇 设备管理与核函数启动 韵责藻灶悦蕴 的核函数的基本结构同 悦哉阅粤 完全相 同袁只是在具体编写时所使用的关键字不同遥 韵责藻灶悦蕴 的核函数启动后袁每个工作项都会执行 核函数中指令袁 这一点也与 悦哉阅粤 相 同遥 由 于 韵责藻灶悦蕴 是与具体硬件无关的袁因此袁核函数的启动 相对 悦哉阅粤 要复杂一些遥 渊悦哉阅粤 中袁复杂的维护工 作由运行时负责袁用户也可以通过 阅则蚤增藻则 粤孕陨 来显 示的管理和查询遥 由于 悦哉阅粤 是针对专用硬件平 台袁因此袁一般而言没有这样做的必要遥冤 摇 摇 如图 员园袁 韵责藻灶悦蕴 首先需要创建一个上下文 渊糟燥灶贼藻曾贼冤来管理设备袁不同类型的硬件对应不同类 型的上下文遥 上下文对硬件设备进行了封装袁为主 机调用设备的提供了统一的接口遥 主机启动核函数 后袁核函数被放在一个命令队列渊悦酝阅 择怎藻怎藻冤中袁等 待执行遥 当设备完成一个核函数的执行后袁会取出 队列中的第一个核函数继续执行遥 关于 韵责藻灶悦蕴 更 详细的说明袁可以参考咱 员猿袁员缘 暂 曰关于基于 粤酝阅 郧孕哉 的编程开发袁可以参见咱员远 暂 遥 图 员园摇 韵责藻灶悦蕴 通过命令队列和上下文管理核函数执行 云蚤早援 员园 摇 韵责藻灶悦蕴 皂葬灶葬早藻泽 贼澡藻 噪藻则灶藻造泽 贼澡则燥怎早澡 糟燥皂鄄 皂葬灶凿 择怎藻怎藻 葬灶凿 糟燥灶贼藻曾贼 源援源摇 函数库 韵责藻灶悦蕴 的生态系统也提供了大量的函数库袁方 便开发者利用遥 开源的数学函数库 糟造酝葬贼澡 实现了 快速傅里叶变换 渊 云云栽冤 和基础线性代数全程库 渊月蕴粤杂冤 遥 其中袁云云栽 支持 员耀猿 维的实数和复数变 换曰月蕴粤杂 支持全部 员耀猿 级别的代数运算遥 在 糟造酝葬贼澡 的基础上袁酝粤郧酝粤 提供了矩阵的 蕴哉尧匝砸 和 悦澡燥噪藻泽噪赠 分解尧特征值计算等重要的矩阵操作的 韵责藻灶悦蕴 实现遥 源援缘摇 调试和性能工具 目前已有许多优秀的工具袁用于 韵责藻灶悦蕴 程序的 调试和优化遥 粤酝阅 粤孕孕 杂阅运 中的 悦燥凿藻载蕴 包含了一 整套软件工具袁帮助开发者最大限度地发掘 郧孕哉 的 计算潜力遥 悦燥凿藻载蕴 包括功能强大的调试器袁能够对 悦孕哉 和 郧孕哉 端的代码进行细致的监测袁同时还能对 韵责藻灶悦蕴 的 噪藻则灶藻造 函数进行表态分析遥 悦燥凿藻载蕴 可以 第 员 期摇摇摇摇摇摇摇摇摇摇摇摇摇摇 丁科袁等院郧孕哉 通用计算及其在计算智能领域的应用 窑苑窑
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有