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);
参数
参数名 |
类型 |
描述 |
输入/输出 |
|---|---|---|---|
graph |
kupl_graph_h |
需要向其中添加taskloop的kupl graph |
输入 |
desc |
kupl_taskloop_desc_t * |
需要添加的taskloop的描述,具体见下表 |
输入 |
func |
std::function<void(const kupl_nd_range_t *)> |
taskloop的函数,taskloop任务需要执行的具体函数 |
输入 |
参数名 |
类型 |
描述 |
|---|---|---|
field_mask |
uint64_t |
结构体中有效字段的掩码,使用 kupl_taskloop_desc_field 中的位标识。此掩码中未指定的字段将被忽略。当前所有字段都为必填项。 具体可设置的掩码:
|
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的函数,函数不需要参数。