《OpenCL实战》一 导读

前言

OpenCL实战
1997年的夏天,我被震惊了。除了能在自己的专业(微电子工程)做实习生,我所能找到的最好的工作就是在一个专门研究高速信号处理的实验室做事,负责用C和MPI(Message Passing Interface,消息传递接口)编程实现二维快速傅里叶变换(fast Fourier transform,FFT)。好消息是这个实验室有16台新的SPARC计算机,坏消息是我对MPI和FFT一无所知。

在当时还是新奇古怪的Amazon.com上,我购买了一些相关书籍,然后才费力弄清楚MPI的基本处理过程:应用程序将一系列指令部署到多台计算机上,每台计算机根据它的ID访问数据。在每台处理器完成相应的任务之后,将结果返回给ID为0的处理器。

又过了些日子,我才对MPI有了更进一步的认识(阻塞和非阻塞数据传输,同步和异步通信)。在编程学习过程中,我发现自己爱上了分布式计算。我喜欢16台庞然大物锁步处理数据,它们就像是同场竞赛的运动员。我感觉自己就像是一名编舞,悉心策划一出精彩的舞蹈演出,亦或是一名作曲家,为整个乐团创作交响乐。实习结束时,我已经能用MPI编写出多个版本的二维快速傅里叶变换了,但最后因为网络延时的关系,实验室的研究人员否决了这个不太可行的方案。

那个暑假之后,我就对高性能计算倾注了极大的热情,全心投身于数字信号处理器、FPGA(Field-Programmable Gate Arrays,现场可编程门阵列)以及Cell处理器(它可是Sony PS3的“大脑”)的应用之中。但我想说的是,所有这些都不能够替代用OpenCL对GPU(Graphics Processing Unit,图像处理单元)的编程体验。现在的超级计算机设计也已经说明,没有哪块CPU可以提供和GPU相并论的“计算处理能力/功耗”的性能。同时,也没有哪门语言能够像OpenCL一样,得到如此广泛的设备支持。

当AMD在2009年发布它的OpenCL开发工具时,我就已经爱上了OpenCL。不仅仅是因为OpenCL能提供新的数据类型(向量数据类型)以及众多的数学函数,还因为它在很多方面都和MPI很像。两个工具集都免费、开源,也都可以用C或C++来编写应用程序。同时,应用程序也都是将指令发送到多个设备上,其中处理单元根据ID来确定访问相应的数据。MPI和OpenCL也都允许使用相似的阻塞/非阻塞传输和同步/异步通信来进行数据传输。

OpenCL在高性能计算领域还很新,也许很多程序员都还不知道它的存在。因此,为了帮助扩大这门语言的影响,我决定编写OpenCL in Action这本书。我很享受写书的过程,也希望它能帮助初学者了解、认识OpenCL和分布式计算。

在2011年的夏天,我开始写作此书的时候,我不禁有种周而复始的感觉。昨天晚上,我将本书收官在第14章的FFT应用程序上。它让我回想起了和MPI打交道的日子,但我还是惊讶于这些年的技术变迁。1997年,我实验里的16台SPARC机器花了将近1分钟的时间才完成32k FFT的运算。而到了2011年,300美元的显卡就能在几秒之内完成上百万个数据点的FFT变换。

技术在变化,但是编程的乐趣不变。也许现如今,分布式计算的学习曲线越来越陡,但回报的甘饴,而非补偿,也胜过以往。

目 录

前言
关于本书
致谢
第一部分 OpenCL编程基础
第1章 OpenCL简介
1.1节   OpenCL的来临
1.2节  为什么是OpenCL
1.3节   类比:OpenCL处理和纸牌游戏
1.4节   OpenCL应用程序的第一印象
1.5节   OpenCL标准和扩展
1.6节   框架和SDK
第2章 主机编程:基本的数据结构
第3章 主机编程:数据传输和数据划分
第4章 内核编程:数据类型和设备内存
第5章 内核编程:运算符和函数
第6章 图像处理
第7章 事件、性能分析及同步化
第8章 用C++开发
第9章 用Java和Python来开发
第10章 通用编程原则
第二部分 用OpenCL来编程实现实际的算法
第11章 归并与排序
第12章 矩阵和QR分解
第13章 稀疏矩阵
第14章 信号处理和快速傅里叶变换
第三部分 用OpenCL来加速OpenGL
第15章 将OpenCL和OpenGL结合
第16章 纹理和渲染缓存
附录A 安装和使用软件开发包
附录B 用OpenGL作实时渲染
附录C 面向Windows和OpenCL的最简GNU
附录D Appendix D移动设备上的OpenCL

时间: 2024-08-18 14:04:04

《OpenCL实战》一 导读的相关文章

《构建实时机器学习系统》一第2章 实时监督式机器学习 2.1 什么是监督式机器学习

第2章 实时监督式机器学习 2.1 什么是监督式机器学习 监督式机器学习旨在利用训练集数据,建立因变量和自变量之间的函数映射关系.如果用X 代表自变量,Y 代表因变量,f 代表映射函数,b 代表映射函数的参数,那么监督式机器学习的任务就是找到恰当的函数f 和参数 ,让下面的映射尽量符合要求: y=f (x;b,e) 这里e为实际情况中的随机扰动项. 下面就来具体看看在监督式机器学习中,因变量.自变量和预测函数的含义. (1)因变量 因变量是我们试图通过机器学习模型预测的变量,在实际应用中它往往无

《构建实时机器学习系统》一3.4 数据分析的三个要点

3.4 数据分析的三个要点 本书后面的章节中将会以前面发现的均值回归的性质为依托,设计实时机器学习交易策略进行交易.好多读者看到这里可能已经跃跃欲试,等不及要开始搭建服务器开始赚他一个亿了.但是在这之前我们需要总结一下在开展机器学习工作前期关于数据分析的几个原则. 3.4.1 不断验证假设 验证假设是否正确是机器学习前期数据分析最重要的目的.这里的假设包括但不限于:数据的格式.变量的数量.数据是否缺失.是否有极端值.采样是否均衡等.上面这些假设,如果稍有差错,就会让在后面得到的机器学习模型无用武

《构建实时机器学习系统》一 导读

前 言 机器学习从业人员的艰难选择 作为机器学习从业人员,如果今天突然被公司或学校开除,你能养活自己吗?邻居老大妈买土鸡蛋不买神经网络模型,东门老大爷认识郭德纲不认识朴素贝叶斯,面容姣好的"翠花"只认房产证不认 Zookeeper.即使你身怀绝技,有着远大的抱负,机器学习应用难以变现也是事实.为了能维持生计,众多机器学习从业人员只能进入大公司.大组织.但限于流程和已有的体制,在这样的工作环境下,他们很难完全发挥自己的潜能. 太多的好朋友,在脱离体制和大公司的时候豪情万丈,吃散伙饭时和战

《构建实时机器学习系统》一2.2 怎样衡量监督式机器学习模型

2.2 怎样衡量监督式机器学习模型 本章前面对一个好的实时机器学习模型的衡量只提到了"优秀" "合适"这样的字眼,本节将会详细展开,讨论监督式实时机器学习模型的衡量标准. 在实际应用中,监督式实时机器学习效果的好坏可以分为统计量是否优秀和应用业绩是否优秀两个方面.下面将按照这两部分分别进行介绍. 在讨论技术细节之前,先进行一下符号的定义: 给定 n 组已知的自变量和因变量{(Yi, Xi)}ni=1作为测试数据集,对于任意i,我们通过自变量Xi和模型f(Xi; b)

《构建实时机器学习系统》一1.4 实时是个“万灵丹”

1.4 实时是个"万灵丹" 成长会解决一切问题.如果一个企业正在飞速成长,大家步调一致.同心齐力,那么内斗或管理混乱等问题将是难以出现的.而当企业的成长受到了制约,停滞不前的时候,往往就会出现众多非技术性原因造成的悲剧. 我们强调机器学习的实时性,就是为了保证应用机器学习的企业能够利用机器学习的资源大踏步向前,而不会被早早地制约,徘徊不前.机器学习就已经够有挑战性的了,为什么还要采用实时机器学习?根据我们的经验,实时机器学习上马应该越早越好,原因具体有以下三点. 1.实时架构稳定性可以

《构建实时机器学习系统》一1.5 实时机器学习的分类

1.5 实时机器学习的分类 按照实际应用中采用的方式不同,实时机器学习可以分为硬实时.软实时和批实时三种模式,下面将分别进行介绍. 1.5.1 硬实时机器学习 硬实时的定义是:响应系统在接收到请求之后,能够马上对请求进行响应反馈,做出处理.硬实时机器学习的主要应用场景是网页浏览.在线游戏.高频交易等对时效性要求非常高的领域.在这些领域中,我们往往需要将相应延迟控制在若干毫秒以下.对于高频交易等场景,更是有不少计算机软件.硬件专家,开发出了各种专有模块以在更短的时间内完成交易,获得超额利润. 在本

《构建实时机器学习系统》一1.8 实时机器学习模型的生存期

1.8 实时机器学习模型的生存期 进行实时机器学习开发必须考虑生存期.生存期是指一个系统从提出.设计.开发. 测试到部署运用.维护.更新升级或退役的整个过程.若在生存期设计上出现了数据,那么在后面的使用中就会出现各种各样的瓶颈阻碍应用产生价值. 从软件工程的角度上讲,开发实时机器学习也遵从构思.分析.设计.实现和维护五个步骤,这五个步骤可能会循环往复,随着业务的发展进行多次迭代.实时机器学习模型的应用由于其技术的特殊性,也具有自己的小型生存期,其中包括数据收集.数据分析.离线手工建模评测.上线自

《构建实时机器学习系统》一1.6 实时应用对机器学习的要求

1.6 实时应用对机器学习的要求 现今每年都会发表成千上万的机器学习相关的论文,其中不乏表现突出的方法论,但是并不是所有的机器学习模型在实际应用中都适用.实时机器学习的应用主要有以下几个方面的要求. 1.模型可扩展性 模型可扩展性需要整个机器学习应用的各个部分均可以轻易地根据实际需要进行扩展.这里的扩展可能是增加新的预测变量,也可能是在新的市场. 人群和用户界面中进行使用,还有可能是加入新的架构部件,进行可视化等操作. 2.模型运用低延迟性 低延迟性是实时机器学习应用区别于其他机器学习应用的核心

《构建实时机器学习系统》一1.7 案例:Netflix在机器学习竞赛中学到的经验

1.7 案例:Netflix在机器学习竞赛中学到的经验 美国领先的付费视频公司 Netflix 在机器学习.系统推荐方面都做出了卓越的贡献, 早在 2007 年,Netflix 就率先提出了百万美元大奖,奖励在 Netflix Prize 竞赛中优胜的队伍.Netflix Prize通过为期三年的竞赛,积累了机器学习宝贵的第一手资料,成为了机器学习中的经典案例,这里我们介绍以下两个方面. 1.7.1 Netflix 用户信息被逆向工程 Netflix Prize进行影片推荐预测时,使用的数据包括

《构建实时机器学习系统》一3.3 利用 Pandas 分析实时股票报价数据

3.3 利用 Pandas 分析实时股票报价数据 熟悉一项软件的最好方法就是通过示例来亲自使用它.这里将会通过分析苹果公司 2015 年 8 月 3 日秒级股票价格的数据来熟悉 Pandas 的用法.建议通过Python 笔记本或交互式窗口的方法来进行下面的操作. 首先,需要导入相关的模块,在导入Pandas模块的同时,我们还用到了Datetime模块.Datetime模块的主要功能是对时间.日期等数据进行处理,导入命令如下: import pandas as pd from datetime