首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于ompss的fork-join算法

基于ompss的fork-join算法
EN

Stack Overflow用户
提问于 2016-11-08 19:47:12
回答 1查看 68关注 0票数 0

openMP/ompSs允许定义具有特定输入和输出的任务,以便可以定义不同任务之间的依赖关系。

然而,大多数示例都将不同的功能作为通过依赖关系相互连接的任务。那么基于for的标准并行程序呢?是否有可能定义依赖关系,即在连续“并行”区域的迭代之间?

EN

回答 1

Stack Overflow用户

发布于 2016-11-25 04:16:34

您不需要函数来定义依赖关系。

让我们以非交换操作为例,比如连接,这里的inout依赖关系将确保任务总是按顺序执行。

代码语言:javascript
复制
char buf_n[11] = {0}, buf_l[11] = {0}, buf_u[11] = {0};
#pragma omp parallel
{
#pragma omp single
    {
        int i;
        for (i=0; i < 10; i++)
        {

#pragma omp task depend(inout:buf_n) firstprivate(i)
            {
                char add[] = {'0' + i};
                strncat(buf_n, add, 1);
            }

#pragma omp task depend(inout:buf_l) firstprivate(i)
            {
                char add[] = {'a' + i};
                strncat(buf_l, add, 1);
            }

#pragma omp task depend(inout:buf_u) firstprivate(i)
            {
                char add[] = {'A' + i};
                strncat(buf_u, add, 1);
            }

        }

#pragma omp task depend(in:buf_n)
        {
            printf("buf (numbers) is %s\n", buf_n);
        }
#pragma omp task depend(in:buf_l)
        {
            printf("buf (lowercase) is %s\n", buf_l);
        }
#pragma omp task depend(in:buf_u)
        {
            printf("buf (uppercase) is %s\n", buf_u);
        }
    }
}

这将始终返回类似如下的内容:

代码语言:javascript
复制
buf (lowercase) is abcdefghij
buf (uppercase) is ABCDEFGHIJ
buf (numbers) is 0123456789

行的顺序可能会改变,但是连接总是按顺序发生的(即字母和数字的顺序总是正确的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40486137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档