AMD OpenCL
大学教程中文版
*
迈克老狼
@opengpu.org
?
January 10, 2012
目录
1
并行计算概述
3
1.1
并行计算概述
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 常用基于硬件和软件的并行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 OpenCL 概述 7
2.1 OpenCL 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 OpenCL 平台模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 OpenCL
编程的一般步骤
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1
命令队列
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 OpenCL
内存对象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.3 OpenCL
程序对象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.4 Kernel
对象
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.5 Kernel 执行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 GPU
架构
23
3.1 OpenCLspec
和多核硬件的对应关系
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2 一些关于 OpenCL 的特殊主题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3
传统的
CPU
架构
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4 现代的 GPGPU 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.5 AMD GPU 硬件架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.6 Nvdia GPU Femi 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.6.1 GTX480-Compute 2.0 capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.6.2 SIMT
和
SIMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.6.3 Nvida GPU
内存机制
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.7 Cell Broadband Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.8 OpenCL
编译系统
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9 Installable Client Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4 OpenCL buffer
使用及两个简单例子
33
4.1
创建
OpenCL
设备缓冲
(buffer) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2
图像旋转的例子
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3
一个矩阵乘法的例子
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 GPU memory 结构 37
5.1 GPU
总线寻址介绍
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2 合并内存访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.3 Global memory 的 bank 以及 channel 访问冲突 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4 Local memory
的
bank conflit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
*
英文原版地址: 点击这里 。
?
欢迎光临 OpenGPU 专业论坛: http://www.opengpu.org
1