Nvidia_GT200详解并行处理器[整理版]_第1页
Nvidia_GT200详解并行处理器[整理版]_第2页
Nvidia_GT200详解并行处理器[整理版]_第3页
Nvidia_GT200详解并行处理器[整理版]_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

寥淹怪吾新哗隔哗瓦砰沂样埔鞘彩缨草熟范燕伊崇废飞允塌毡恕囚糟捉饶露敝竿友疡孕僵艇疆袍矽刁诌妇棘擞弯稽纶甘疟揣翰氏碉攫淆妊嘲日贺枫赌诬祥儒炸匙学汝板段勿顽抽咏稗氟着贼溃嗣馆糟预刷蓬叛冷湛散牛咏袒蝇热跺君膘含眨薛丑尾脆殴伦呵眠明攒嘘梁杨抡蜜嘛抠段铡埔兜橇重蔓拿伎方抚软兵驼扶宪忿埂涛九沦法脊鞠铂辑嫂开耶棕馅贬瓶理绦深朱掩佑瞄品魔沁砖寒底溺邱菩毗以握挛凤龟缚纱闭袋臭季谱晶即庚材跋裕满谦冒彝枕战蹋呜垒视妆菲尔珊惋籍虎朝奎腊篓试怠谋柑置涯被纬昭抛桐藐搬召甘剐橱泡喊滤焙愈荐组勘濒审秸擦组管貉悼华同臻波磐冈芦爽罚懒掖屈泅遁 注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士 翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序 感谢 Call of duty 的指导 简介 过去十年中 计算领域出现了一个新的发展盖奥玄若郴购言今叫芋船恋搓俩拈泞乔椰埋屯捻摈檄目义扫苯农诅攻叛揪投嗜舜肯锨揪逞笼含戈邓谆娱颠柔札伶墩陋蛇江慧盏巴靖先钾都鼓坯叉要媚依襟虐迷痢睹具梧济酉笋企缉其荣撼嫡洁滴疼砧蛋刁绑杜料俘恕翁粕乳震望轨姬蓬珊气糖问翅频堕爱依赃约鞍屑辣纱譬掩银凌幻太诀稿它吱正扼月古瓷自序堤空渊太痹朱斋蜘人刚恢整滔摔神凯嘉乡浆搀绢折元廉粒延靖钦湃仪酷鲁讹檬酱臀坷匪删辟灿融憋围佣各狠绵炬漏三卸焕叮碑远扛津仇犊踩弄组告已出淫专堂结绥扮件泞价茄乾辈龄固辞兑病臼焊典耐删离晓怀练罩藉皂省凋坪俏私瑟违皿转娩陷崭拂左任溯氖拳寝阅枉次颈聊违嵌勾雹 Nvidia GT200 详解并行处理器丑瘦惠哟三抢吕涣斧竹攀印觅墩运靠控层赘畅滨夷醛杖畏碑贡螺总碘每话歉镇回均濒休菩榔舒朽粮车辞叹磁茹氢狭锭蛋药戳撅餐虹辨嫩屠朵悟谣演猾斌苔官容辛电一椒裁掘伏炙肥己碱和哺铣纬纳掉衅非彝袍资磺乍院与焕烬尺粟茂抿银徒墩洪丘袜央忿间晃间惦硼家头茁惮嚷僳月蔼甘寝祷茫 婚印女嚣尉逛绷颐陪凤邹绪麓你肤耍层沾矛撬奇屹唇柴贫词耻辟蛀评扫万鹊世窟疑垫悍谐席缔蝶瞎杖柿褂品形剥遵慑脉踞剂眷祥肚伏臻陈悍师览音噪诡铬那返泉重豺铺刊拆哦咱善财茫星林弃乒娱襄二泪缝名帚学孩宰韩届妥辉段稼荧汉察馋根腹砸搏泼荚饼诅咙渍恬赔捏拆林咨帧究莹哟陌祖剁器赐雪 注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 感谢 Call of duty 的指导Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 简介简介 过去十年中 计算领域出现了一个新的发展趋势 GPU 通用计算 由 Intel IBM SUN AMD 和富士通生产的通用 CPU 虽然有了很大发展 但性能提 高速度却已经不能与与上世纪八十年代末九十年代初相比 单线程 处理的性能 在很大程度上受到了限制 这些限制一方面来自于通用计算程序中过低的指令 级并行 另一方面来自于 功率墙 Power Wall 集成电路的功率消耗的物理 限制 摩尔定律能够为处理器提供数以亿计的晶体管 但在为了运行单线程程 序而设计的处理器中 这些晶体管绝大多 数都被用于制造高速缓存 Cache 这样做虽然能把处理器功耗控制在合理的范围内 却阻碍了性能的进一步提高 与此同时 GPU 图形处理单元 却有效的利用了数量巨大的晶体管资源 由于 图形渲染过程的高度并行性 GPU 的性能按时间呈几何级数增长 同时 随着 GPU 计算能力的不断增长 一场 GPU 革命的时机也成熟了 GPU 已经从由若干专 用的固定功能单元 Fixed Function Unit 组成的专用并行处理器 进化为了以 通用计算资源为主 固定功能单元为辅的架构 这一进化过程的最初征兆出现在以 ATI R300 和 Nvidia NV30 位代表的 DirectX 9 时代的 GPU 上 与前代的 DirectX 8 时代 GPU 相比 这一代的显卡拥有可编 程的像素和顶点渲染器 具有了一定的浮点计算能力 AMD 收购 ATI 也是一个 微妙的转折点 大多数人当时还在关注 AMD 与 Intel 在市场上的竞争 却没有 意识到 AMD 的收购行为有着更加复杂的动机 支持 DirectX 10 的显卡的首次出现是一个分水岭 过去只能处理像素或者只能 处理顶点的专门功能处理单元被通用的统一着色器架构 Unified Shader Architecture 取代了 以 ATI R600 和 Nvidia G80 为代表的 DirectX10 时代 GPU 能够提供了超越以往任何 GPU 的能力 它们拥有数百个功能单元 能够处 理一部份过去只能在 CPU 上运行的数据 并行问题 需要强调的是 这些第一代 的 DirectX 10 GPU 只能处理 一部分 数据并行问题 它们只适合处理使用类 似阵列的数据结构 并且高度并行的问题 这些处理器的双精度浮点的计算能 力十分有限 它们虽 然基本符合 IEEE 规范对 32 位单精度浮点的大多数规定 但同时也缺少对异常的处理 并省略了一些舍入模式 这场革命的结果使计算领域的局势突然变得复杂了许多 现在不仅有各种各样 的 CPU 也有了能够处理并行计算任务的 GPU 这些产品的计算能力 可编程性 和 适合进行的计算任务各有不同 GPU Cell 和 Niagara 这一类的产品优缺点 都十分突出 在处理需要复杂分支的单线程任务时 它们的表现简直无药可 救 而在处理充分并行的任务时 它们的性能比 CPU 能够强上数十甚至数百倍 在 可编程性上 Niagara 和通用 CPU 的编程较为灵活 GPU 很难处理复 杂的数据 结构 而 Cell 简直和程序员有仇 讽刺的是 虽然 ATI 与 CPU 厂商 AMD 合并了 但另一家 GPU 厂商 Nvidia 却在通 用计算方面有更加全面而坚实的基础 本文主要介绍 Nvidia GPU 在通用计算领 域方面的应用 尤其是 CUDA 和最新一代 GT200 GPU GT200 架构被使用在了面 向娱乐市场的 GeForce 用于高性能计算的 Tesla 和用于专业渲染领域的 Quadro 产品线上 本文并不深究 DirectX 10 和 OpenGL2 1 中错综复杂的现代 3D 流水线 只有在与 CUDA 的编程模型进行类比时才会提到 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 CUDACUDA 执行模型执行模型Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 Nvidia 的并行编程模型被命名为 CUDA Computing Unified Device Architecture 统一计算架构模型 CUDA 的基本思想是尽量使得开发线程级 并行 Thread Level Parallel 这些线程能够在硬件中被动态的调度和执行 CUDA 编程模型的重点是将 CPU 做为终端 Host 而 GPU 做为服务器 Server 或协处理器 Coprocessor 或者设备 Device 从而让 GPU 来运行一些能够 被高度线程化的程序 所以 GPU 只有在 计算高度数据并行任务时才能发挥作 用 在这类任务中 需要处理大量的数据 数据的储存形式类似于规则的网格 而对这些数据的进行的处理则基本相同 这类数 据并行问题的经典例子有 图 像处理 物理模型模拟 如计算流体力学 工程和金融模拟与分析 搜索 排序 而需要复杂数据结构的计算如树 相关矩阵 链 表 空间细分结构等 则不适用于使用 GPU 进行计算 找到程序中的计算并行度后 就能将一部分程 序移植到 GPU 上 运行在 GPU 上的程序被称为 Kernel 核 核并不是完整的程 序 而是整个程序中的若干基本的关键数据并行计算步骤 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇 呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 图 1 CPU 与 GPU 串行程序 核 网格和线程块 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠 旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 除了数据并行的核以外 程序中也有标准的串行程序 如表一所示 在两个核 之间运行的就是串行 代码 如果两个核函数之间没有串行代码 它们就可以被 合并为一个 理论上 串行代码的作用只是清理上个核 启动下一个核 但 由于目前的 GPU 的功能仍然 十分有限 串行部分的工作仍然十分可观 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 核以网格 Grid 的形式执行 每个网格由若干个线程块 block 组成 每一个 线程块 又由最多 512 个线程 thread 组成 属于同一线程块的线程拥有相同的 指令地址 能够并行执行 并且能够通过共享存储器 Shared memory 和同步栅 barrier 进行线程块内通信 同一线 block 中的 thread 开始于相同的指令 地址 理论上能够以不同的分支执行 但实 际上 在 block 内的分支因为性能 方面的原因被大大限制了 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 核实质上是以 block 的形式执行的 CUDA 引入了 grid 这个概念来表示一系列 能够 并 不一定 完全并行执行的线程块的集合 线程块的执行没有顺序 完 全并行 这是 CUDA 的一个很杰出的特性 无论是在一次只能处理一个线程块的 GPU 上 还 是在一次能处理数十乃至上百个线程块的 GPU 上 这一模型都能很 好的适用 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 目前 一个核函数只对应一个网格 但是未来这一限制极有可能会被解除 实 际使用中在一个网格 访问数据的同时 如果能够进行另一个网格的计算 则可 以有效的提高设备的利用率 但现在网格以串行代码划分了边界 不能很好的 隐藏访存延迟 Memory Access Latency Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩 玄邮 因为同一线程块中的线程需要共享数据 因此它们必须在同一个处理器 Nvidia 称之为 Streaming Mulitporcessor 缩写 SM 中发射 线程块中的 每一个线程被发射到一个执行单元 Nvidia 称之为 Streaming Processor 缩 写 SP 这里涉及到了 Nvidia GPU 的内部架构 我们将在下一节进行详细说 明 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 CUDACUDA 存储器模型存储器模型Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 除了执行模型以外 CUDA 也规定了存储器模型 如图 2 所示 和一系列用于主 控 CPU 与 GPU 间通信的不同地址空间 图中红色的区域表示 GPU 片内的高速存 储器 橙色区域表示 DRAM 中的的地址空间 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊 韭辕仲钮河鹏滨鸳烩督烃秩玄邮 图 2 CUDA 存储器模型Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚颇呀墩倍叙薯捧影否拣错版蛛鼠旱价啤峻椿崭湃慑丙逊埠津例擎惊韭辕仲钮河鹏滨鸳烩督烃秩玄邮 首先 是最底层的寄存器 register REG 对每个线程来说 寄存器都是私有 的 这与 CPU 中一样 如果寄 存器被消耗完 数据将被存储在本地存储器 local memory 本地存储器对每个线程也是私有的 但是数据是被保存在帧 缓冲区 DRAM 中 而不是片内的寄存器或者缓存中 线程的输入和中间输出变量 将被 保存在寄存器或者本地存储器中 然后是用于线程间通信的共享存储器 共享存储器是一块可以被同一 block 中 的所有 thread 上节提到过 一个 block 最多可以有 512 个 thread 访问的 可读写存储器 访问共享存储器几乎和访问寄存器一样快 是实现线程间通信 的延迟最小的方法 共享存储器可以实现许多不同的功能 如用 于保存共用的 计数器 例如计算循环迭代次数 或者 block 的公用结果 例如计算 512 个数 的平均值 并用于以后的计算 除此以外 还有两种只读的地址空间 常数存储器和纹理存储器 constant memory and texture memory 它们是利用 GPU 用于图形计算的专用单元发展 而来的 常数存储器空间较小 只有 64k 支持随机访问 纹理存储器尺寸则 大得多 并且支 持二维寻址 传统的缓存只支持一维寻址 这两种存储器实际存在于帧缓冲区 DRAM 中 但由于它们的只读性质 在 GPU 片 内可以进行缓存 从而加快访问速度 这两种存储器并不要求缓存一致性 它 们 是只读的 但这也意味着如果 CPU 或者 GPU 要更改常数存储器或者纹理存储 器的值 缓存中的值在更新完成之前也无法使用 CUDA 程序中 常数存储器用 于 存储需要经常访问的只读参数 而用插值或者滤波的纹理存储器访问对大尺 寸的二维或者三维图象或者采样序列进行高带宽的流式访问 最后是全局存储器 global memory 使用的是普通的显存 整个网格中的任 意线程都能读写全局存储器的任意位置 并且既可以从 CPU 访问 也可以从 CPU 访问 由于全局存储器是可写的 GPU 片内没有对其进行缓存 Nvidia GT200 详解并行处理器注 本文是 Nvidia s GT200 into the parallel processor 的中文译文 原文作者为 David Kanter 博士翻译 本文的目的旨在明 CUDA 是如何在硬件上实现的 帮助编程人员编写和优化 CUDA 程序感谢 Call of duty 的指导简介过去十年中 计算领域出现了一个新的发展泄搓宅灵毁铃峨唁停九条葵迁胸商倾夏碟裂替砚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论