《OpenCL实战》一1.3 类比:OpenCL处理和纸牌游戏

1.3 类比:OpenCL处理和纸牌游戏

在最开始学习OpenCL的时候,我经常会被那些奇怪的数据结构以及各式各样的术语所吓到。对于我而言,要记住这些术语所包含的内容以及相互间的关系并非易事,所以我采用了类比学习的方法,把OpenCL应用程序的运行过程比作打扑克牌。这看起来很奇怪,但个中缘由,由我慢慢道来。

扑克游戏的结构总是一张牌桌,一个庄家加上一个或多个玩家再配上一副纸牌。玩家之间并没有关系,他们只是向庄家要牌,或是增加赌注。庄家挨个询问玩家的请求,游戏结束之后,庄家便会查看手牌,判定胜负。

在这个类比中,庄家扮演的是OpenCL主机的角色,每个玩家则好比OpenCL兼容设备,而桌子就相当于是上下文,每副纸牌就相当于是一个内核程序。每个玩家的手牌就像是一个指令序列。表1.2更清楚地说明了纸牌游戏和OpenCL应用程序的运行过程间的类比关系。

为了让这个类比更直观,图1.2所示的是有4个玩家时的卡牌游戏的情景,每个人的手牌是4张。我希望通过图1.1和图1.2,让这个类比更加的直观、易懂。

在下面的几个章节里,我们还会回过头来再考察这个类比,并补充新的内容。这个类比虽然能让我们可以更直观地了解OpenCL的整个运行过程,但还是有些问题,下面仅列举出我所认为的六点最严重的不足:

  • 类比并没有提及平台。而平台指的是标识OpenCL不同实现的数据结构。平台也为访问设备提供了方法。例如,你可以通过Nvidia的平台来访问Nvidia设备。
  • 纸牌游戏中,庄家并不能选择牌桌上的玩家,但是OpenCL主机却要决定将哪些设备放入上下文之中。
  • 纸牌游戏中,庄家并不能给不同的玩家派发同样的纸牌,但是OpenCL主机却可以将同样的内核发送到不同设备的指令序列中。
  • 类比并没有提及数据以及如何针对OpenCL兼容设备进行数据划分。OpenCL兼容设备往往包含有很多个处理单元,每个处理单元只负责处理一部分数据。主机设定完数据的维度和处理单元的数量后,数据的划分便开始运行。
  • 纸牌游戏中,庄家分发纸牌给玩家,每个玩家各自负责整理自己的手牌。而在OpenCL中,主机完成内核和执行指令入指令序列之后,每个设备默认的任务执行顺序与内核入列的顺序一致。
  • 纸牌游戏中,庄家采用的是轮循调度的方法来发牌,而OpenCL对内核发送的方法并无限制。

如果你还是不大适应OpenCL的术语,别担心,第二章我们会深入地透过代码来了解这些数据结构。毕竟用这些东西编出代码才是王道。下一节我们来看看OpenCL代码究竟是何模样。

时间: 2024-12-02 09:33:22

《OpenCL实战》一1.3 类比:OpenCL处理和纸牌游戏的相关文章

《OpenCL实战》一 导读

前言 OpenCL实战 1997年的夏天,我被震惊了.除了能在自己的专业(微电子工程)做实习生,我所能找到的最好的工作就是在一个专门研究高速信号处理的实验室做事,负责用C和MPI(Message Passing Interface,消息传递接口)编程实现二维快速傅里叶变换(fast Fourier transform,FFT).好消息是这个实验室有16台新的SPARC计算机,坏消息是我对MPI和FFT一无所知. 在当时还是新奇古怪的Amazon.com上,我购买了一些相关书籍,然后才费力弄清楚M

《OpenCL实战》一第一部分 OpenCL编程基础

第一部分 OpenCL编程基础 OpenCL实战 第一部分展示的是OpenCL语言,我们将详细讨论OpenCL的数据结构和函数,并通过例子来了解它们在应用程序中的作用. 第1章先介绍OpenCL有何用处以及工作原理.第2章和第3章将介绍如何编写主机应用程序,第4章和第5章将讨论内核编程,第6章和第7章将讨论OpenCL编程的高级话题,图像处理和事件处理. 第8章和第9章将讨论如何用C以外的语言(例如C++.Java和Python)来编写OpenCL程序.最后,第10章将介绍如何用OpenCL来开

《OpenCL实战》一第1章 OpenCL简介

第1章 OpenCL简介 OpenCL实战 本章所含内容 了解OpenCL的设计初衷及其好处 介绍OpenCL的基本操作:主机和内核 编写OpenCL应用程序 2010年的10月,高性能计算领域诞生了一项革命性的作品.由中国国家超级计算天津中心建造的Tianhe-1A终于走出迷雾,站在了世界高性能计算机之巅.Tianhe-1A的最高计算速度可达2566TFLOPS(trillion floating-point operations per second, 兆亿浮点指令每秒),而这比第二名的Cr

《OpenCL实战》一1.6 框架和SDK

1.6 框架和SDK 尽管文件matvec.c和 文件matvec.cl中的代码让人眼前一亮,但如果没有经过编译.运行,这些代码就更像花拳绣腿,没有任何实际的作用.而为了能够编译.运行,你就必须要有一套兼容OpenCL的开发工具.正如OpenCL标准所述,框架包含如下三个部分. 平台层--通过它来访问设备,设定上下文 运行时--让主机应用程序将内核和指令队列发送到上下文中的设备上 编译器--构建含有可执行内核的程序 OpenCL工作组并没有提供自己的设计框架.这就要求每个OpenCL兼容设备的生

《OpenCL实战》一1.5 OpenCL标准和扩展

1.5 OpenCL标准和扩展 当你在通过网站www.khronos.org/opencl了解OpenCL时,你会看到一个名为opencl-1.1.pdf的重要文件.这其中包含了OpenCL1.1的标准,它所包含的是大量关于编程语言的内容.它不仅仅定义了OpenCL的函数和数据结构,还对厂商所提供的开发工具提出了功能上的要求.除此之外,它还设定了一系列的标准来判定设备的兼容性. 但是兼容软件和硬件所能提供的功能已经超出了标准所设定的内容.这些额外的特性需要通过扩展(extensions)的方式供

CLOGS 1.0.2发布 OpenCL C++ API的高级库

CLOGS是一款用于OpenC++L C++ API的高级库.其设计是为了集成到其他的OpenCL代码,包括同步使用OpenCL的事件.当前版本支持两个操作:基数排序和专业扫描.基数排序支持所有键的无符号整数类型,所有的内置标量和矢量类型可以作为值的缓冲区存储.扫描支持所有整数类型,还支持向量类型,有限的多功能扫描. CLOGS 1.0.2该版本修正了生成系统时的错误,从原始安装文件造成构建失败的问题. 软件信息:http://sourceforge.net/apps/trac/clogs/ 下

并行加速计算新标准:OpenCL 1.2正式发布

Khronos Group今天宣布,已经批准并公开发布了现代处理器的跨平台.并行计算编程标准"OpenCL 1.2",当然继续开放.免版税.OpenCL 1.1发布十八个月后,在三十多家行业领先企业的共同努力下,此新版本为并行编程带来了更强的性能和功能,并实现了向下兼容. Khronos同时也已经更新并扩展了OpenCL的综合符合性测试程序组,以保证新规范的执行为跨平台应用开发提供一个完整.可靠的平台. 通过下列的各项更新和附加项,OpenCL 1.2显著提升了并行编程的灵活性.功能和

通过 Autostereograms 案例学习 OpenGL 和 OpenCL 的互操作性 【已翻译100%】(2/3)

立体渲染 这最后一步的坐标"形象",并重复平铺图像作为输入,并简单地通过在合适的位置采样平铺图像最终渲染图像. 它会从输入的坐标"图像"得到水平纹理坐标.他将从输出的坐标"图像"中计算垂直坐标(只是简单的重复自身). 这个采样过程是在GPU上通过自定义着色器完成的. 一个屏幕对齐的四边形开始呈现,接下来的像素着色器则被用来计算最终的颜色渲染. #version 150 smooth in vec2 vTexCoord; out vec4 outC

通过 Autostereograms 案例学习 OpenGL 和 OpenCL 的互操作性 【已翻译100%】(3/3)

注意到所有平台都可以遍历确保正确的context 被创建.下面的代码演示了OpenCL context 的创建. cl_int lError = CL_SUCCESS; std::string lBuffer; // // Generic OpenCL creation. // // Get platforms. cl_uint lNbPlatformId = 0; clGetPlatformIDs( 0 , 0 , &lNbPlatformId ); if ( lNbPlatformId ==