《AMD OpenCL 大学课程》.pdf

  1. 1、本文档共97页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《AMD OpenCL 大学课程》.pdf

AMD OpenCL 大学课程 (1) AMD OpenCL 大学课程是非常好的入门级 OpenCL 教程,通过看教程中的 PPT,我们能够很快的了解OpenCL 机制以及编程方法。下载地址: /zones/OpenCLZone/universities/Pages/d efault.aspx 教程中的英文很简单,我相信学 OpenCL 的人都能看得懂,而且看原汁原 味的英文表述,更有利于我们了解各种术语的来龙去脉。 我把这些教程翻译成自己的中文表述,主要是强化理解需要,其实我的英 文很烂。 一、并行计算概述 在计算机术语中,并行性是指:把一个复杂问题,分解成多个能同时处理的 子问题的能力。要实现并行计算,首先我们要有物理上能够实现并行计算的硬件 设备,比如多核 CPU,每个核能同时实现算术或逻辑运算。 通常,我们通过 GPU 实现两类并行计算: 任务并行:把一个问题分解为能够同时执行的多个任务。 数据并行:同一个任务内,它的各个部分同时执行。 下面我们通过一个农场主雇佣工人摘苹果的例子来描述不同种类的并行计算。  摘苹果的工人就是硬件上的并行处理单元(process elements)。  树就是要执行的任务。  苹果就是要处理的数据。 串行的任务处理就如下图所示,一个工人背着梯子摘完所有树上的苹果(一个 处理单元处理完所有任务的数据)。 数据并行就好比农场主雇佣了好多工人来摘完一个树上的苹果(多个处理单 元并行完成一个任务中的数据),这样就能很快摘完一颗树上的苹果。 农场主也可以为每棵树安排一个工人,这就好比任务并行。在每个任务内, 由于只有一个工人,所以是串行执行的,但任务之间是并行的。 对一个复杂问题,影响并行计算的因素很多。通常,我们都是通过分解问题的方 式来实施并算法行。 这又包括两方面内容:  任务分解:把算法分解成很多的小任务,就像前面的例子中,把果园按苹 果树进行划分,这时我们并不关注数据,也就是说不关注每个树上到底有 多少个苹果。  数据分解:就是把很多数据,分成不同的、离散的小块,这些数据块能够 被并行执行,就好比前面例子中的苹果。 通常我们按照算法之间的依赖关系来分解任务,这样就形成了一个任务关系 图。一个任务只有没有依赖任务的时候,才能够被执行。 这有点类似于数据结构中的有向无环图,两个没有连通路径的任务之间可以 并行执行。下面再给一个烤面包的例子,如果所示,预热烤箱和购买面粉糖两个 任务之间可以并行执行。 对大多数科学计算和工程应用来说,数据分解一般都是基于输出数据,例 如:  在一副图像中,对一个滑动窗口(例如:3*3 像素)内的像素实施滤波操 作,可以得到一个输出像素的卷积。  第一个输入矩阵的第 i 行乘以第二个输入矩阵的第 j 列,得到的向量和即 为输出矩阵第 i 行,第 j 列的元素。 这种方法对于输入和输出数据是一对一,或者多对一的对应关系比较有效。 也有的数据分解算法是基于输入数据的,这时,输入数据和输出数据一般是 一对多的关系,比如求图像的直方图,我们要把每个像素放到对应的槽中(bins, 对于灰度图,bin 数量通常是 256)。一个搜索函数,输入可能是多个数据,输 出却只有一个值。对于这类应用,我们一般用每个线程计算输出的一部分,然后 通过同步以及原子操作得到最终的值,OpenCL 中求最小值的kernel 函数就是典 型代表[可以看下 ATI Stream Computing OpenCL programming guide 第二章中 求最小值的 kernel 例子]。 通常来说,怎样分解问题和具体算法有关,而且还要考虑自己使用的硬件 和软件,比如 AMD GPU 平台和 Nvdia GPU 平台的优化就有很多不同。 二、常用基于硬件和软件的并行 在上个实际 90 年代,并行计算主要研究如何在 cpu 上实施指自动的指令级 并行。  同时发射多条指令(之间没有依赖关系),并行执行这些指令。  在本教程中,我么不讲述自动的硬件级并行,感兴趣的话,可以看看计算 机体系结构的教程。 高层的并行,比如线程级别的并行,一般很难自动化,需要程序员告诉计算 机,该做什么,不该做什么。这时,程序员还要考

您可能关注的文档

文档评论(0)

wyth + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档