鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

kpccl_graph_add_task

向kpccl图中添加task,即提交执行task任务。

接口定义

int kpccl_graph_add_task(kpccl_graph_h graph, kpccl_task_desc_t *task_desc, kpccl_task_h task);

参数

表1 参数定义

参数名

类型

描述

输入/输出

graph

kpccl_graph_h

需要向其中添加task的kpccl graph

输入

task_desc

kpccl_task_desc_t *

需要添加的task的描述,具体见下表

输入

task

kpccl_task_h

需要被赋值的task任务对象;当不需要获取特定task的状态时,可以设置为nullptr

输入/输出

表2 kpccl_task_desc_t的数据结构

参数名

类型

描述

field_mask

uint32_t

掩码,用于指定结构体中哪些值有效,不设置掩码情况下仅func、args参数生效,其他需要设置掩码。

具体可设置的掩码:

  • KPCCL_TASK_DESC_FIELD_PRIORITY:priority生效
  • KPCCL_TASK_DESC_FIELD_NAME:name生效
  • KPCCL_TASK_DESC_FIELD_FLAG:flag生效

func

kpccl_task_func_t

task的函数,task任务需要执行的具体函数

args

void *

func函数需要传入的参数

priority

int

需要配置掩码KPCCL_TASK_DESC_FIELD_PRIORITY后才生效;task任务的优先级,数值越大,优先级越高

name

const char *

需要配置掩码KPCCL_TASK_DESC_FIELD_NAME后才生效;task任务的名字

flag

uint32_t

需要配置掩码KPCCL_TASK_DESC_FIELD_FLAG后才生效;task任务的flag,可设置为KPCCL_TASK_FLAG_IMM,表示直接执行task,不需要调度

返回值

  • 成功:返回KPCCL_OK
  • 失败:返回KPCCL_ERROR

示例

#include <stdio.h> 
 #include "kpccl.h" 

 static inline void task_str(void *args)
 {
         printf("graph task test.\n");
 }

 int main() 
 { 
         int executor_num = kpccl_get_num_executors(); 
         int executors[executor_num]; 
         for (int i =0; i < executor_num; i++) {
             executors[i] = i;
         } 
         kpccl_egroup_h egroup = kpccl_egroup_create(executors, executor_num);
         kpccl_graph_h graph = kpccl_graph_create(egroup); 
         kpccl_task_desc_t task_desc = {
             .field_mask = KPCCL_TASK_DESC_FIELD_FLAG, 
             .func = task_str,
             .args = nullptr, 
             .flag = KPCCL_TASK_FLAG_IMM,
         };
         kpccl_graph_add_task(graph, &task_desc, nullptr); 
         kpccl_graph_synchronize(graph);
         kpccl_graph_destroy(graph);
         kpccl_egroup_destroy(egroup);
         return 0;         
 }

运行结果如下。

graph task test.

上述示例演示了向graph图提交task的流程。上述kpccl_graph_add_task函数提交的task的函数为task_str,函数不需要参数,task设置了flag生效且flag值设置为KPCCL_TASK_FLAG_IMM;不需要获取特定的task。