《OpenCL实战》一 导读

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


fengmian

前言

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

相关文章
|
存储 缓存 安全
高并发编程之阻塞队列
高并发编程之阻塞队列
205 1
|
网络协议
iptables配置tcp端口转发
iptables配置tcp端口转发
338 1
|
编解码 计算机视觉
OpenCV(三十六):霍夫直线检测
OpenCV(三十六):霍夫直线检测
475 0
|
10天前
|
存储 数据采集 JavaScript
开源MES系统源码,助力中小企业快速实现车间数字化
MES系统是面向制造企业车间执行层的信息化管理平台,覆盖订单到交付的全流程。通过数据采集与集成,实现生产可视化、质量可追溯、多系统协同及资源优化配置。
128 2
|
6月前
|
存储 编解码 并行计算
《3D山地场景渲染进阶:GPU驱动架构下细节与性能平衡的6大技术实践》
本文围绕3D开放世界山地场景渲染,分享GPU驱动架构下平衡地形细节与性能的实践经验。针对传统CPU驱动架构的负载失衡问题,重构Tile-Sector-Patch三级数据结构,将地形计算迁移至GPU,降低CPU耗时;通过自适应压缩与裂缝修复优化四叉树,减少显存占用;设计融合距离与地形复杂度的LOD模型,兼顾细节与效率;借ID Map与三平面渲染优化材质混合,降低带宽消耗;采用Chunk位图与视差贴图实现轻量化动态地形交互;最后通过统一LOD阈值与设备定制参数,实现多系统协同适配。
677 8
|
SQL 关系型数据库 MySQL
MySQL 8.0:filesort 性能退化的问题分析
用户将 RDS MySQL 实例从 5.6 升级到 8.0 后,发现相同 SQL 的执行时间增长了十几倍。本文就该问题逐步展开排查,并最终定位根因。
|
SQL Java 数据库连接
MyBatis-Plus高级用法:最优化持久层开发
MyBatis-Plus 通过简化常见的持久层开发任务,提高了开发效率和代码的可维护性。通过合理使用条件构造器、分页插件、逻辑删除和代码生成器等高级功能,可以进一步优化持久层开发,提升系统性能和稳定性。掌握这些高级用法和最佳实践,有助于开发者构建高效、稳定和可扩展的企业级应用。
902 13
|
索引
USB3.2 摘录(二)
USB3.2 摘录(二)
395 0
|
敏捷开发 安全 测试技术
阿里云云效产品使用合集之如何删除用例库
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
存储 XML 数据安全/隐私保护
PyMuPDF 1.24.4 中文文档(八)(2)
PyMuPDF 1.24.4 中文文档(八)
1523 1