1.4 OpenCL应用程序的第一印象

简介: 现在,你应该对OpenCL的目标有了一个大致的了解。我还希望你能对OpenCL应用程序的运行过程有所认识。但如果想要更全面而深入地认识OpenCL,你还需要仔细阅读源代码。

本节书摘来异步社区《OpenCL实战》一书中的第1章,第1.4节,作者: 【美】Matthew Scarpino 译者: 陈睿 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 OpenCL应用程序的第一印象

现在,你应该对OpenCL的目标有了一个大致的了解。我还希望你能对OpenCL应用程序的运行过程有所认识。但如果想要更全面而深入地认识OpenCL,你还需要仔细阅读源代码。

这一节将看到两个OpenCL源代码文件,一个是针对主机,一个是针对设备。两个程序一起完成对44矩阵和41向量的矩阵乘积运算。这项操作对图像处理很重要。其中矩阵表示的是转换,而向量表示的是颜色或是空间中的点。图1.3所示的是矩阵-向量乘积的运算过程,以及运算结果。


t1_3

如果打开本书示例代码的路径,你会在Ch1文件夹中找到这两个源程序文件。第一个文件matvec.c是在主处理器上执行,它将创建一个内核,然后将其发送给找到的第一个设备。下面所示的主机上运行的程序代码。注意,源代码是用C语言编写的。

注意,下面的源文件代码已经略去了查错例程的内容,完整的代码参见本书的示例代码中的matvec.c文件。


q1
q2

源文件虽长,但并不复杂。代码的大部分都是在创建OpenCL的数据结构,其中的命名约定如下:cl_context是前面讨论的上下文,cl_platform_id是前面讨论的平台,cl_device_id是前面讨论的设备等。了解这些命名约定之后,代码在主机程序间的复制就显得很简单。

不同的是,cl_program和cl_kernel的创建则因应用程序的不同而不同。程序1.1中,应用程序通过文件matvec.cl里的函数来创建内核程序。更准确地讲,主机将matvec.cl以字符的形式读到一个字符数组中,通过这个字符数组创建出程序,编译整个程序。然后,通过其中的函数matvec_mult完成对内核的创建。

文件matvec.cl中的内核代码比文件matvec.c中的主机代码短很多,而且一个函数matvec_mult便完成了整个矩阵-向量相乘的算法(见程序1.2)。

第2章和第3章我们将讨论如何编写出程序1.1那样的主机应用程序。第4章和第5章我们将讨论如何编写出程序1.2那样的内核函数。

如果你已经迫不及待地想编译这两个应用程序,实现点乘算法,我建议你先看看附录A,里面讨论了如何获取、安装OpenCL开发工具。在此之前,我觉得对OpenCL标准有一个概括性的认识还是很有必要的,我们将在下一节来展开讨论。


q3

相关文章
|
11月前
|
网络协议 Unix Linux
有了协程库,开发DPDK应用程序第一次可以这么简单
使用PhotonLibOS协程库,以多执行单元并发的代码模型代替原先的异步回调模型,简化DPDK应用程序的开发。同时使用echo server验证了 用户态TCP/IP协议栈+轮询模式驱动 对比 内核原生协议栈+中断模式驱动 的性能优势
有了协程库,开发DPDK应用程序第一次可以这么简单
|
1月前
|
存储 量子技术
用DPU应用程序实现QRAM
用DPU应用程序实现QRAM
23 1
|
1月前
|
并行计算 API C++
GPU 硬件与 CUDA 程序开发工具
GPU 硬件与 CUDA 程序开发工具
49 0
|
2月前
|
Rust 安全 开发者
Rust在操作系统组件开发中的应用:设备驱动与系统服务
本文探讨了Rust在系统级开发中的潜力,特别是针对操作系统组件如设备驱动和系统服务的开发。我们将分析Rust为何适合这些任务,展示其在实际项目中的应用,并讨论其面临的挑战和未来的可能性。
|
9月前
|
存储 缓存 安全
Metal Petal框架
介绍的Metal Petal能力与最佳使用
208 0
|
机器学习/深度学习 人工智能 测试技术
利用 UMA 使硬件加速器可直接用于 TVM
利用 UMA 使硬件加速器可直接用于 TVM
115 0
|
并行计算 API C++
CUDA C/C++ 教程一:加速应用程序(下)
CUDA C/C++ 教程一:加速应用程序(下)
CUDA C/C++ 教程一:加速应用程序(下)
|
机器学习/深度学习 并行计算 数据可视化
CUDA C/C++ 教程一:加速应用程序(上)
CUDA C/C++ 教程一:加速应用程序(上)
CUDA C/C++ 教程一:加速应用程序(上)
|
openCL 开发工具 异构计算
《OpenCL实战》一1.5 OpenCL标准和扩展
当你在通过网站www.khronos.org/opencl了解OpenCL时,你会看到一个名为opencl-1.1.pdf的重要文件。这其中包含了OpenCL1.1的标准,它所包含的是大量关于编程语言的内容。
2364 0
|
openCL Java C++
《OpenCL实战》一1.2 为什么是OpenCL
你可能听说过这样的表述,OpenCL指的是一门独立的语言,但其实,这种表述其实并不准确。OpenCL标准只是在C和C++的基础之上,扩展定义了一些数据类型,数据结构以及函数罢了。尽管开发人员已经针对Java和Python设计了一系列的OpenCL接口库,但标准中只要求OpenCL框架提供C和C++编写的API。
4756 0