OpenCL中platform、context、kernel、program、command queue的理解

0. 以下理解是读《OpenCL in Action》后总结的,一些图也是从该书中引用。

1. OpenCL中的platform可以理解为不同的(vendor的)OpenCL实现,比如你的电脑中装有AMD显卡和NVIDIA显卡,那么如果在电脑中安装了AMD的OpenCL SDK和NVIDIA的OpenCL SDK的话,那么你的电脑中就包含了两个platform。

2. OpenCL中的context对象是管理同一platform下的devices,所以不能创建一个context同时包含AMD和NVIDIA的设备。可以为不同的platform创建context对象。但是呢,你也可以为同一个platform上的devices创建多个context。


3. OpenCL中的kernel对象是运行在device上一个函数,通常这些kernel函数写在.cl文件中。

4. program对象是kernel容器,和context联系在一起的。在创建program对象前,需要将cl文件中代码内容读到内存中,然后通过clCreateProgrammWithSource(或者使用kernel的二进制代码通过clCreateProgramWithBinary)来创建program对象。

5. OpenCL程序中先由cl文件创建program对象,然后利用program对象再创建kernel对象,创建kernel时不需要指定device,因为kernel可以被送往context中的任何一个device。

6. command指的是host 告诉device要进行的操作(device不可以向host发送command)。注意,操作不光是kernel函数的执行,还有一些数据传输(data transfer,host->device,device->host)等工作。

7. command queue负责将command从host发送给device(负责context与device之间的通讯),每个command queue对象和context与device是对应的(创建时指定)。一个command queue中可以包含多个command,一般情况下是command顺序进行执行的(FIFO),在创建comamnd queue对象时也可以设置command queue的属性CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,让其执行的顺序是乱序的(比如说,一个kernel还没执行完,device就开始了另一个kernel函数的执行)。


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值