正在加载图片...
智能系统学报 第10卷 核函数 是一个由微软倡导的开放标准,旨在直接利用C++ 指® 数据 语言实现数据的并行化编程9]。 相比于常规的C++代码,C++AMP只需要按规 SIMD 定格式对数据进行绑定,然后应用并行原语启动数 用 田 用 据操作(核函数)的运行。因此,C++AMP完全隐 结果 输出流 藏了硬件的细节。开发者只需要预先绑定数组和数 图3流处理与SMD 组元素上的操作,并行化由C++AMP负责完成。C Fig.3 Stream processing and SIMD ++AMP能够根据实际的硬件情况(GPU或CPU, 流(stream)和核函数(kernel)是流处理模式中 计算核心算数等),决定并行化策略。当实际硬件 最重要的2个概念。流是一个数据集合,包含待处 不支持并行化时,代码还可以串行执行。 理的数据元素,并且这些数据的处理方式是相同或 2.5高级编程平台 相似的。核函数是由若干操作(指令)组成的操作 在OpenACC和C++AMP这2种异构编程模式 序列,它决定着要对每个数据做何种操作和处理。 下,硬件对开发者而言完全是透明的。一方面,这简 对GPU平台而言,纹理单元充当了流的角色,待处 化了并行程序的开发一串行代码只需要少量的改 理数据需要作为2维的纹理信息被流处理器读取和 动,便可以利用GPU等多核计算设备的并行计算能 操作。许多问题也可以很自然的映射为2维的纹 力。但这种简化并非没有代价,它使得并行化的过 理,如矩阵代数、物理仿真等等:而可编程着色器则 程不能被程序员显示地加以控制。而在很多情况 起着核函数的作用。 下,根据硬件和程序的具体情况,对负载和并行粒度 2.2 Brook 进行调整,对于充分利用计算设备能力、提高程序性 Book是一种基于标准C语言的流编程语言。 能是至关重要的。 它旨在基于流编程模式,对图形API进行封装,将 正如前文所述,CUDA和OpenCL是当前基于 GPU视为能够进行并行计算的协处理器,从而简化 GPU的异构编程的主流平台。它们的共同特点是, GPU通用计算的编程[8】」 既对硬件的计算和存储单元进行了很好的抽象,同 Book使人们看到了将GPU用于通用计算的巨 时又对计算设备的计算核心数量这一重要参数,加 大潜力,对GPU通用计算的发展有着深远的影响。 以适度地暴露,并且对并行粒度和并行方式也给予 Book将GPU封装为通用的并行处理器的思想及语 了更大的控制可能。这样便对完全隐藏硬件这一极 言规范更是为现在主流的GPU编程平台CUDA和 端情况的进行了良好的折衷。同时,这2种平台为 OpenCL所借鉴,而这两者正是现在GPU编程的主 GPU通用提供了从编程到调试再到性能测试的完 流开发平台。 整解决方案。 2.3 OpenACC OpenACC是一个异构并行计算标准。与 3统一计算设备架构 OpenMP类似,OpenACC定义了一套编译器指令,这 统一计算设备架构(compute unified device ar- 些指令应用于C、C++和Fortran代码,以指导编译器 chitecture,CUDA)是由NVIDIA公司于2006年11 将指定的循环或代码块,从主机CPU转移到相连的 月发布的基于NVIDIA GPU的并行程序开发架 加速设备(例如GPU)上进行运算。 构1o)。它包括一个SDK(NVCC编译器、调试器、函 简言之,OpenACC提供了一种简洁的利用并行 数库等)、一套API,以及添加了少量扩展的C/C++ 硬件的开发方式。目前,OpenACC已经在多种操作 语言(CUDA C/C++)。由它开发的程序能够在所有 系统下实现,并支持NVIDIA、AMD和Intel的多种 支持CUDA的NVIDIA GPU上运行。CUDA的推出 硬件计算设备[2。未来,OpenACC可能会并入 大大简化了对GPU进行并行编程的难度。图3示 OpenMP标准,形成一个同时支持多核与众核并行 意了NVIDIA GPU的主要计算和存储部件。接合图 编程的统一标准。 3,对CUDA开发平台的核心逐一进行简要介绍。 2.4 C++AMP 3.1核函数 C++accelerated massive parallelism(C++AMP) CUDA允许使用C/C++为CUDA计算核心图 猿摇 流处理与 杂陨酝阅 云蚤早援猿摇 杂贼则藻葬皂 责则燥糟藻泽泽蚤灶早 葬灶凿 杂陨酝阅 摇 摇 流渊 泽贼则藻葬皂冤和核函数渊 噪藻则灶藻造冤是流处理模式中 最重要的 圆 个概念遥 流是一个数据集合袁包含待处 理的数据元素袁并且这些数据的处理方式是相同或 相似的遥 核函数是由若干操作渊指令冤 组成的操作 序列袁它决定着要对每个数据做何种操作和处理遥 对 郧孕哉 平台而言袁纹理单元充当了流的角色袁待处 理数据需要作为 圆 维的纹理信息被流处理器读取和 操作遥 许多问题也可以很自然的映射为 圆 维的纹 理袁如矩阵代数尧物理仿真等等曰而可编程着色器则 起着核函数的作用遥 圆援圆摇 月则燥燥噪 月则燥燥噪 是一种基于标准 悦 语言的流编程语言遥 它旨在基于流编程模式袁对图形 粤孕陨 进行封装袁将 郧孕哉 视为能够进行并行计算的协处理器袁从而简化 郧孕哉 通用计算的编程咱愿暂 遥 月则燥燥噪 使人们看到了将 郧孕哉 用于通用计算的巨 大潜力袁对 郧孕哉 通用计算的发展有着深远的影响遥 月则燥燥噪 将 郧孕哉 封装为通用的并行处理器的思想及语 言规范更是为现在主流的 郧孕哉 编程平台 悦哉阅粤 和 韵责藻灶悦蕴 所借鉴袁而这两者正是现在 郧孕哉 编程的主 流开发平台遥 圆援猿摇 韵责藻灶粤悦悦 韵责藻灶粤悦悦 是一个异构并行计算标准遥 与 韵责藻灶酝孕 类似袁韵责藻灶粤悦悦 定义了一套编译器指令袁这 些指令应用于 悦尧悦垣垣和 云燥则贼则葬灶 代码袁以指导编译器 将指定的循环或代码块袁从主机 悦孕哉 转移到相连的 加速设备渊例如 郧孕哉冤上进行运算遥 简言之袁韵责藻灶粤悦悦 提供了一种简洁的利用并行 硬件的开发方式遥 目前袁韵责藻灶粤悦悦 已经在多种操作 系统下实现袁并支持 晕灾陨阅陨粤尧粤酝阅 和 陨灶贼藻造 的多种 硬件计算设备咱圆员暂 遥 未 来袁 韵责藻灶粤悦悦 可能会并入 韵责藻灶酝孕 标准袁形成一个同时支持多核与众核并行 编程的统一标准遥 圆援源摇 悦垣垣粤酝孕 悦垣垣 葬糟糟藻造藻则葬贼藻凿 皂葬泽泽蚤增藻 责葬则葬造造藻造蚤泽皂渊悦垣垣 粤酝孕冤 是一个由微软倡导的开放标准袁旨在直接利用 悦垣垣 语言实现数据的并行化编程咱怨 暂 遥 相比于常规的 悦垣垣代码袁悦垣垣 粤酝孕 只需要按规 定格式对数据进行绑定袁然后应用并行原语启动数 据操作渊核函数冤 的运行遥 因此袁悦垣 垣 粤酝孕 完全隐 藏了硬件的细节遥 开发者只需要预先绑定数组和数 组元素上的操作袁并行化由 悦垣垣 粤酝孕 负责完成遥 悦 垣垣 粤酝孕 能够根据实际的硬件情况渊 郧孕哉 或 悦孕哉袁 计算核心算数等冤 袁决定并行化策略遥 当实际硬件 不支持并行化时袁代码还可以串行执行遥 圆援缘摇 高级编程平台 在 韵责藻灶粤悦悦 和 悦垣垣 粤酝孕 这 圆 种异构编程模式 下袁硬件对开发者而言完全是透明的遥 一方面袁这简 化了并行程序的开发要要要串行代码只需要少量的改 动袁便可以利用 郧孕哉 等多核计算设备的并行计算能 力遥 但这种简化并非没有代价袁它使得并行化的过 程不能被程序员显示地加以控制遥 而在很多情况 下袁根据硬件和程序的具体情况袁对负载和并行粒度 进行调整袁对于充分利用计算设备能力尧提高程序性 能是至关重要的遥 正如前文所述袁悦哉阅粤 和 韵责藻灶悦蕴 是当前基于 郧孕哉 的异构编程的主流平台遥 它们的共同特点是袁 既对硬件的计算和存储单元进行了很好的抽象袁同 时又对计算设备的计算核心数量这一重要参数袁加 以适度地暴露袁并且对并行粒度和并行方式也给予 了更大的控制可能遥 这样便对完全隐藏硬件这一极 端情况的进行了良好的折衷遥 同时袁这 圆 种平台为 郧孕哉 通用提供了从编程到调试再到性能测试的完 整解决方案遥 猿摇 统一计算设备架构 统一计算设备架构渊 糟燥皂责怎贼藻 怎灶蚤枣蚤藻凿 凿藻增蚤糟藻 葬则鄄 糟澡蚤贼藻糟贼怎则藻袁悦哉阅粤冤 是由 晕灾陨阅陨粤 公司于 圆园园远 年 员员 月发布的基于 晕灾陨阅陨粤 郧孕哉 的并行程序开发架 构咱员园 暂 遥 它包括一个 杂阅运渊晕灾悦悦 编译器尧调试器尧函 数库等冤 尧一套 粤孕陨袁以及添加了少量扩展的 悦辕悦垣垣 语言渊悦哉阅粤 悦 辕 悦垣垣冤 遥 由它开发的程序能够在所有 支持 悦哉阅粤 的 晕灾陨阅陨粤 郧孕哉 上运行遥 悦哉阅粤 的推出 大大简化了对 郧孕哉 进行并行编程的难度遥 图 猿 示 意了 晕灾陨阅陨粤 郧孕哉 的主要计算和存储部件遥 接合图 猿袁对 悦哉阅粤 开发平台的核心逐一进行简要介绍遥 猿援员摇 核函数 悦哉阅粤 允许使用 悦辕悦 垣 垣为 悦哉阅粤 计算核心 窑源窑 智 能 系 统 学 报摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇摇 第 员园 卷
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有