CLExecute

此函数运行一个 OpenCL程序。有三个版本的函数:

1. 用一个内核启动内核函数

bool  CLExecute(
   int          kernel                    // 处理一个OpenCL程序的内核
   );

2. 启动几个内核副本 (OpenCL函数) 与任务空间描述

bool  CLExecute(
   int          kernel,                   // 处理一个OpenCL程序的内核
   uint         work_dim,                 // 任务空间维度
   const uint&  global_work_offset[],     // 在任务空间初始偏移
   const uint&  global_work_size[]        // 任务总数
   );

3. 启动几个内核副本 (OpenCL函数) 与任务空间描述以及集合本地任务子集大小规范

bool  CLExecute(
   int          kernel,                   // 处理一个OpenCL程序的内核
   uint         work_dim,                 // 任务空间维度
   const uint&  global_work_offset[],     // 在任务空间初始偏移
   const uint&  global_work_size[],       // 任务总数
   const uint&  local_work_size[]         // 在本地集合中的任务数
   );

参数

kernel

[in]  处理OpenCL内核.

work_dim

[in]  任务空间维度.

global_work_offset[]

[in]  在任务空间初始偏移.

global_work_size[]

[in]  任务子集大小.

local_work_size[]

[in]  集合本地任务子集大小.

返回值

如果成功则返回true, 否则返回false. 有关错误信息, 使用 GetLastError() 函数.

注意

以下例子中要考虑参数的使用:

  • work_dim 指定 work_items[] 描述任务的阵列维度. 如果work_dim=3,三维阵列work_items[N1, N2, N3] 将被使用.
  • global_work_size[] 包含设定 work_items[]阵列大小的值. 如果 work_dim=3, global_work_size[3] 阵列将是 {40, 100, 320}. 然后我们将得到 work_items[40, 100, 320]. 所以,任务总数是 is 40 x 100 x 320 = 1 280 000.
  • local_work_size[] 设定任务的子集将由OpenCL程序的指定内核来执行. 其维度等于 work_items[] 维度并允许共同任务子集精确分割成更小的子集. 事实上,应当选择 local_work_size[] 从而使全局任务设定分割成更小的子集. local_work_size[3]={10, 10, 10} 将适合当前的例子, 比如work_items[40, 100, 320] 能被 local_items[10, 10, 10] 阵列毫无剩余的收集起来.