---
title: kupl::graph_submit(task)
description: "向kupl图中添加动态图task，即提交执行task任务。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_039.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/KunpengHPCKit_developer_039.html
indexId: 386a19dbaafa8b1d8e19f649190160b5564f5f233b7ff1667fc355e896a5c6be67
---
# kupl::graph_submit(task)

向kupl图中添加动态图task，即提交执行task任务。

相较于kupl_graph_submit接口而言，该接口通过lambda函数特性捕获kupl_graph_submit提交任务回调函数的入参， 避免用户入参封装行为，提高接口易用性。

#### 接口定义

int kupl::graph_submit(kupl_graph_h graph, kupl_task_desc_t *desc, const std::function<void(void)> &func);


#### 参数


**表1 参数定义**

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| graph | kupl\_graph\_h | 需要向其中添加动态图task的kupl graph | 输入 |
| desc | kupl\_task\_desc\_t \* | 需要添加的动态图task的描述，具体见下表 | 输入 |
| func | std::function<void(void)> | task的函数，task任务需要执行的具体函数 | 输入 |


**表2 kupl_task_desc_t的数据结构**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| field\_mask | uint64\_t | 掩码，用于指定结构体中哪些值有效，参数生效需要设置掩码。 具体可设置的掩码： KUPL\_TASK\_DESC\_FIELD\_NAME：name生效 KUPL\_TASK\_DESC\_FIELD\_DEP：dep生效 KUPL\_TASK\_DESC\_FIELD\_PRIORITY：priority生效 KUPL\_TASK\_DESC\_FIELD\_FLAG：flag生效 |
| name | const char \* | 需要配置掩码KUPL\_TASK\_DESC\_FIELD\_NAME后才生效；task任务的名字 |
| priority | int | 需要配置掩码KUPL\_TASK\_DESC\_FIELD\_PRIORITY后才生效；task任务的优先级，数值越大，优先级越高 |
| ndep | size\_t | 需要配置掩码KUPL\_TASK\_DESC\_FIELD\_DEP后才生效；动态图task中dep\_list中的depends数量，即任务传入的用于任务间依赖的参数数量 |
| dep\_list | kupl\_task\_dep\_t \* | 需要配置掩码KUPL\_TASK\_DESC\_FIELD\_DEP后才生效；动态图task中的depends 的列表，即任务传入的用于任务间依赖的参数列表 |
| flag | uint32\_t | 需要配置掩码KUPL\_TASK\_DESC\_FIELD\_FLAG后才生效；task任务的flag，可设置为KUPL\_TASK\_FLAG\_IMM，表示直接执行task，不需要调度 |


**表3 kupl_task_dep_t的数据结构**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| base\_addr | const void \* | dep参数的地址 |
| type | kupl\_task\_dep\_type\_t | dep的具体类型，可以设置为： KUPL\_TASK\_DEP\_TYPE\_IN：作为任务的输入参数 KUPL\_TASK\_DEP\_TYPE\_OUT：作为任务的输出参数 KUPL\_TASK\_DEP\_TYPE\_INOUT：作为任务的输入输出参数 KUPL\_TASK\_DEP\_TYPE\_ALL：该参数依赖之前的所有任务 |


#### 返回值

- 成功：返回KUPL_OK
- 失败：返回KUPL_ERROR


#### 示例

```
#include <stdio.h> 
#include "kupl.h" 
#include <assert.h>

int main() 
{ 
    int executor_num = kupl_get_num_executors(); 
    int executors[executor_num]; 
    for (int i = 0; i < executor_num; i++) {
        executors[i] = i;
    } 
    kupl_egroup_h egroup = kupl_egroup_create(executors, executor_num);
    kupl_graph_h graph = kupl_graph_create(egroup); 
    kupl_task_desc_t task_desc = {
        .field_mask = KUPL_TASK_DESC_FIELD_FLAG,
        .flag = KUPL_TASK_FLAG_IMM,             
    };          
    int ret = kupl::graph_submit(graph, &task_desc, []() {
        printf("graph task test\n");
    }); 
    assert(ret == KUPL_OK);

    kupl_graph_wait(graph);
    kupl_graph_destroy(graph);
    kupl_egroup_destroy(egroup);
    return 0;
}
```

运行结果如下。

```
graph task test
```

上述示例演示了向graph图提交task的流程。上述kupl::graph_submit函数提交task的函数，打印对应信息。
