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);
参数
参数名 |
类型 |
描述 |
输入/输出 |
|---|---|---|---|
graph |
kpccl_graph_h |
需要向其中添加task的kpccl graph |
输入 |
task_desc |
kpccl_task_desc_t * |
需要添加的task的描述,具体见下表 |
输入 |
task |
kpccl_task_h |
需要被赋值的task任务对象;当不需要获取特定task的状态时,可以设置为nullptr |
输入/输出 |
参数名 |
类型 |
描述 |
|---|---|---|
field_mask |
uint32_t |
掩码,用于指定结构体中哪些值有效,不设置掩码情况下仅func、args参数生效,其他需要设置掩码。 具体可设置的掩码:
|
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。