正在加载图片...
.6 智能系统学报 第10卷 所有线程可见的只读存储空间一常量内存(co 除了上面提到的Nsight可以用于性能分析外, stant memory)和纹理内存(texture memory)。常量 CUDA SDK还提供Visual Profiler工具,能够以可视 内存和纹理内存的访问延迟同全局内存相同,但前 化的方式展示程序各部分的运行时间,方便寻找性 者配备有缓存(cache),在数据局部性较好时,访问 能瓶颈,以便有针对性地进行优化。 延迟要小于全局内存(参见图6)。 4开放计算语言 流多理器SM) GPU端 主机端 流多处理器SM) CPU 开放计算语言(open computing language, 流多处理器(SM 纹理缓存 OpenCL)是一个完全开放和免费的异构计算编程 纹理内存 内存 标准,它由非盈利性技术组织Khronos Group负责维 常量缓君 常量内存 全局 护。OpenCL提供了一种跨平台、硬件无关的并行计 内存 算解决方案。由它编写的程序不仅能够在多核 CPU、APU及GPU上运行,还能运行在单核CPU甚 寄存器 至DSP和FPGA等硬件设备上。OpenCL获得了主 共享内存 要硬件厂商Intel、AMD和NVIDIA的积极支持。 图6 NVIDIA GPU主要结构简图 OpenCL的目标是提出一种跨硬件、跨平台的异 Fig.6 Diagram of NVIDIA GPU structure 构编程框架标准。OpenCL规范主要由平台模型、执 同一线程块内的线程可以通过共享内存 行模型、内存模型和编程模型[3]4部分组成,它在 (shared memory)(块中每个都可以读写共享内存中 硬件的抽象描述的基础上,制定了异构的并行编程 的数据)和同步机制来相互协作。具体而言,程序 模式。在制定OpenCL标准时,Khronos Group大量 员可以在核函数内调用内建函数来设置同步点,以 借鉴了CUDA4],因此,2种并行解决方案有很多相 使线程执行到该处后,停下来等待,直到同一块中的 似之处,其中,大部分关键概念都可以一一对应。 所有线程均达到同步点。 4.1设备的层级模型 3.4函数库 OpenCL定义了具有多级结构的异构并行体系 除了提供以C/C++为基础语言的高级编程平 模型。如图7所示,这一体系包括一个主机(host), 台,CUDA SDK还提供了许多函数库,高效实现常见 多个设备(device):每个设备中包括若干计算单元 操作,提高开发速度。例如,矩阵计算的cuBLAS和 (compute unit,.CU)。计算单元对应于AMD GPU cuSPARSE,实施快速傅里叶变换的cuFFT,用于批量 的计算单元(CU)或CUDA中的流多处理器(SM), 但它也可以是CPU核心,还可以是DSP和FPGA等 生成随机数的cuRAND,以及用于加速人工神经网络 的cuDNN2B]等。除了函数库外,还有大量第三方 运算设备。计算单元又由若干处理单元(processing element,PE)组成。图8给出了内存模型。 开源或商业函数库可供选择。这些函数库涵盖基本 代数运算、数值计算、统计、图像处理、机器视觉、视频 设备 设备 设备 设备 编码解码,GS等领域。这些函数的数量和范围也在 不断的增加,最新进展可以参见文献[11]。 CU 3.5调试与性能分析 PE 调试和优化是编程开发重要的环节,也是GPU PE 编程的一个难点。为简化调试和优化流程,提高开 PE 发效率,CUDA提供了一系列软件工具。 Parallel Nsight是集调试和性能测试于一体的 编程辅助工具。Nsight可以集成在Visual Studio PE (Windows下)和Eclipse(Linux下),实现交互式调 试。在Linux环境下,开发者还可以在cuda-gd在 主机 命令下进行调试,或将cuda-gdh同IDE配合使用。 此外,CUDA SDK还提供了cuda-memcheck程序,检 图7 OpenCL设备模型 查内存越界访问错误。 Fig.7 OpenCL device model所有线程可见的只读存储空间要要要常量内存渊 糟燥灶鄄 泽贼葬灶贼 皂藻皂燥则赠冤 和纹理内存渊 贼藻曾贼怎则藻 皂藻皂燥则赠冤 遥 常量 内存和纹理内存的访问延迟同全局内存相同袁但前 者配备有缓存渊 糟葬糟澡藻冤 袁在数据局部性较好时袁访问 延迟要小于全局内存渊参见图 远冤遥 图 远摇 晕灾陨阅陨粤 郧孕哉 主要结构简图 云蚤早援远摇 阅蚤葬早则葬皂 燥枣 晕灾陨阅陨粤 郧孕哉 泽贼则怎糟贼怎则藻 同一线程块内的线程可以通过共享内存 渊 泽澡葬则藻凿 皂藻皂燥则赠冤 渊块中每个都可以读写共享内存中 的数据冤和同步机制来相互协作遥 具体而言袁程序 员可以在核函数内调用内建函数来设置同步点袁以 使线程执行到该处后袁停下来等待袁直到同一块中的 所有线程均达到同步点遥 猿援源摇 函数库 除了提供以 悦辕悦垣垣为基础语言的高级编程平 台袁悦哉阅粤 杂阅运 还提供了许多函数库袁高效实现常见 操作袁提高开发速度遥 例如袁矩阵计算的 糟怎月蕴粤杂 和 糟怎杂孕粤砸杂耘袁 实施快速傅里叶变换的 糟怎云云栽袁用于批量 生成随机数的 糟怎砸粤晕阅袁以及用于加速人工神经网络 的 糟怎阅晕晕咱 员圆鄄 员猿 暂等遥 除了函数库外袁还有大量第三方 开源或商业函数库可供选择遥 这些函数库涵盖基本 代数运算尧数值计算尧统计尧图像处理尧机器视觉尧视频 编码解码尧郧陨杂 等领域遥 这些函数的数量和范围也在 不断的增加袁最新进展可以参见文献咱员员暂遥 猿援缘摇 调试与性能分析 调试和优化是编程开发重要的环节袁也是 郧孕哉 编程的一个难点遥 为简化调试和优化流程袁提高开 发效率袁悦哉阅粤 提供了一系列软件工具遥 孕葬则葬造造藻造 晕泽蚤早澡贼 是集调试和性能测试于一体的 编程辅助工具遥 晕泽蚤早澡贼 可以集成在 灾蚤泽怎葬造 杂贼怎凿蚤燥 渊宰蚤灶凿燥憎泽 下冤和 耘糟造蚤责泽藻 渊 蕴蚤灶怎曾 下冤 袁实现交互式调 试遥 在 蕴蚤灶怎曾 环境下袁开发者还可以在 糟怎凿葬鄄早凿遭 在 命令下进行调试袁或将 糟怎凿葬鄄早凿遭 同 陨阅耘 配合使用遥 此外袁悦哉阅粤 杂阅运 还提供了 糟怎凿葬鄄皂藻皂糟澡藻糟噪 程序袁检 查内存越界访问错误遥 除了上面提到的 晕泽蚤早澡贼 可以用于性能分析外袁 悦哉阅粤 杂阅运 还提供 灾蚤泽怎葬造 孕则燥枣蚤造藻则 工具袁能够以可视 化的方式展示程序各部分的运行时间袁方便寻找性 能瓶颈袁以便有针对性地进行优化遥 源摇 开放计算语言 开放计算语言 渊 燥责藻灶 糟燥皂责怎贼蚤灶早 造葬灶早怎葬早藻袁 韵责藻灶悦蕴 冤 是一个完全开放和免费的异构计算编程 标准袁它由非盈利性技术组织 运澡则燥灶燥泽 郧则燥怎责 负责维 护遥 韵责藻灶悦蕴 提供了一种跨平台尧硬件无关的并行计 算解决方案遥 由它编写的程序不仅能够在多核 悦孕哉尧粤孕哉 及 郧孕哉 上运行袁还能运行在单核 悦孕哉 甚 至 阅杂孕 和 云孕郧粤 等硬件设备上遥 韵责藻灶悦蕴 获得了主 要硬件厂商 陨灶贼藻造尧粤酝阅 和 晕灾陨阅陨粤 的积极支持遥 韵责藻灶悦蕴 的目标是提出一种跨硬件尧跨平台的异 构编程框架标准遥 韵责藻灶悦蕴 规范主要由平台模型尧执 行模型尧内存模型和编程模型咱员猿 暂 源 部分组成袁它在 硬件的抽象描述的基础上袁制定了异构的并行编程 模式遥 在制定 韵责藻灶悦蕴 标准时袁运澡则燥灶燥泽 郧则燥怎责 大量 借鉴了 悦哉阅粤咱员源 暂 袁因此袁圆 种并行解决方案有很多相 似之处袁其中袁大部分关键概念都可以一一对应遥 源援员摇 设备的层级模型 韵责藻灶悦蕴 定义了具有多级结构的异构并行体系 模型遥 如图 苑 所示袁这一体系包括一个主机渊 澡燥泽贼冤 袁 多个设备渊 凿藻增蚤糟藻冤 曰每个设备中包括若干计算单元 渊糟燥皂责怎贼藻 怎灶蚤贼袁 悦哉冤 遥 计算单元对应于 粤酝阅 郧孕哉 的计算单元渊悦哉冤或 悦哉阅粤 中的流多处理器渊 杂酝冤袁 但它也可以是 悦孕哉 核心袁还可以是 阅杂孕 和 云孕郧粤 等 运算设备遥 计算单元又由若干处理单元渊 责则燥糟藻泽泽蚤灶早 藻造藻皂藻灶贼袁 孕耘冤组成遥 图 愿 给出了内存模型遥 图 苑摇 韵责藻灶悦蕴 设备模型 云蚤早援苑摇 韵责藻灶悦蕴 凿藻增蚤糟藻 皂燥凿藻造 窑远窑 智 能 系 统 学 报摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇 第 员园 卷
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有