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

kupl::graph_submit

向kupl图中添加taskloop,即提交执行taskloop任务。相较于kupl_graph_submit接口而言,该接口通过lambda函数特性捕获kupl_graph_submit提交任务回调函数的入参, 避免用户入参封装行为,提高接口易用性。

接口定义

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

参数

表1 参数定义

参数名

类型

描述

输入/输出

graph

kupl_graph_h

需要向其中添加taskloop的kupl graph

输入

desc

kupl_taskloop_desc_t *

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

输入

func

std::function<void(const kupl_nd_range_t *)>

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

输入

表2 kupl_taskloop_desc_t 的数据结构

参数名

类型

描述

field_mask

uint64_t

结构体中有效字段的掩码,使用

kupl_taskloop_desc_field

中的位标识。此掩码中未指定的字段将被忽略。当前所有字段都为必填项。

具体可设置的掩码:

  • KUPL_TASKLOOP_DESC_FIELD_RANGE:range生效
  • KUPL_TASKLOOP_DESC_FIELD_EGROUP:egroup生效
  • KUPL_TASKLOOP_DESC_FIELD_DEFAULT:上述字段都生效

range

kupl_nd_range_t *

taskloop 范围,详细使用方式见 kupl_parallel_for 章节

egroup

kupl_egroup_h

执行 taskloop 任务的 egroup,即能在哪个 egroup 中的 executor 执行器上执行

返回值

  • 成功:返回KUPL_OK
  • 失败:返回KUPL_ERROR

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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_nd_range_t range;
    KUPL_1D_RANGE_INIT(range, 0, executor_num);
    kupl_taskloop_desc_t taskloop_desc = {
        .field_mask = KUPL_TASKLOOP_DESC_FIELD_DEFAULT,
        .range = &range,
        .egroup = egroup
    };
    int ret = kupl::graph_submit(graph, &taskloop_desc, [](const kupl_nd_range_t *nd_range) {
        printf("graph taskloop test\n");
    }); 
    assert(ret == KUPL_OK);

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

运行结果如下。

graph taskloop test.
graph taskloop test.
graph taskloop test.
graph taskloop test.

上述示例演示了向graph图提交taskloop的流程。上述kupl_graph_submit函数提交的taskloop的函数,函数不需要参数。