---
title: kpccl_graph_add_task
description: "向kpccl图中添加task，即提交执行task任务。"
url: https://www.hikunpeng.com/document/detail/zh/hpchistory/hpckit/develop2400/KunoengHPCKit_developer_037.html
sourcePath: /source/zh/hpchistory/hpckit/develop2400/KunoengHPCKit_developer_037.html
indexId: 2ff04aad3796b580c8b457ca4751f23b9aff4e0d75ff5e664523237ce2ea516c73
---
# 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。
