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

kupl_egroup_barrier

同步egroup中所有executor都到达该位置后,executor行为才继续执行。

接口定义

void kupl_egroup_barrier(kupl_egroup_h group);

参数

表1 参数定义

参数名

类型

描述

输入/输出

group

kupl_egroup_h

执行barrier操作的egroup对象

输入

示例

 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
#include <stdio.h>
#include <pthread.h>
#include "kupl.h"
static inline void task_int_loop(kupl_nd_range_t *nd_range, void *args, int tid, int tnum)
{
    printf("before barrier: tid %d \n", tid);
    kupl_egroup_barrier(nullptr);
    printf("after barrier: tid %d \n", tid);
}
int main()
{
    const int num_threads = kupl_get_num_executors();
    kupl_nd_range_t range;
    KUPL_1D_RANGE_INIT(range, 0, num_threads, 1);
    int executors[num_threads];
    for (int i = 0; i < num_threads; i++) {
        executors[i] = i;
    }
    kupl_egroup_h eg = kupl_egroup_create(executors, num_threads);
    kupl_parallel_for_desc_t desc = {
        .func = task_int_loop,
        .concurrency = num_threads,
        .egroup = eg
    };
    kupl_parallel_for(&range, &desc, KUPL_PARALLEL_FOR_POLICY_STATIC);
    kupl_egroup_destroy(eg);
}

运行结果如下。

before barrier: tid 2
before barrier: tid 0
before barrier: tid 1
before barrier: tid 3
after barrier: tid 1
after barrier: tid 0
after barrier: tid 2
after barrier: tid 3

上述示例演示了在omp并行区域中kupl_egroup_barrier函数的作用。根据运行结果,所有线程的before barrier打印完毕后,所有线程的after barrier才开始打印。由此,kupl_egroup_barrier函数此处的作用是同步egroup中所有executor都到达执行完毕before barrier的打印后,代码才继续执行。