Reading Notes
- OpenCL 2.0 异构计算 【第三版】1/2
- JackG-2022/6/18
> 异构
对应用负载进行类型划分,控制密集型负载和数据密集型负载分别交给专用,高效的硬件单元进行处理。
并发 - 多指令并发;多线程并发(单核多线程,多核多线程)。
并行 - 单指令,多数据并行;多指令,多任务并行;多线程并行(硬件多线程,一核一线程)。
> 设备架构
设备架构的不同是OCL 抽象模型建立的直接驱动力。OCL 模型背后的设计哲学来自对不同设备架构的权衡使用的实践。
架构 - 硬件设计;指令集设计;SOC 设计;缓存设计;存储设计。
> OCL 标准
1)平台模型
指定host和device, host - 任务调度;device - OCL C kernel 执行。
2)执行模型
Host运行环境配置;host-device 交互机制;并发模型 - 如何分解OCL C kernel 算 法到work-item 和work-group模型上。
3)内核编程模型
定义并发模型如何映射到物理硬件上。
4)内存模型
抽象内存使用,屏蔽硬件实际内存架构;2.0 加入host-device 共享内存 SVM。
> 平台模型
Get platform info and device info (PlatformID/DeviceID, DeviceType - CPU or GPU)
> 执行模型
Topological system and Context setting; issuing command and data to Device.
*Create Context - 协调host和device的交互,管理设备端的内存对象(Buffer),持续跟踪在设备上创建的程序对象(Program)和内核对象(OCL C kernel)。
*执行的对象是设备端任务(host发送的command)
*command contains ? a) running OCL C kernel. b) passing data. c)syncing
*任务如何下发? create Command Queue, clCreatCommandQueueWithProperties() --> 创建Command Queue 并关联device。
*Event - 指定命令之间依赖关系的对象。
*clEnqueue* command, common three parameters - *event_list(等待事件列表), event_list_length(等待列表长度), *cur_event(当前命令事件标识)
*OCL 2.0 支持设备端入 - 执行中的kernel可以让另外一个kernel 入队(command queue created by device)
> OCL 编程模型/kernel
*work-item - OCL C上的并发执行单元,每一个work-item都会执行kernel 函数体。
*OCL C 提供的内置函数可以让work-item知道自己的编号 clGetGlobalId()