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
评论2
最新资源