OMP Pragmas 嵌套是否有意义?
Does OMP Pragmas nesting have significance?
我正在查看如下代码(以 reviewer/auditor 身份)。下面显示的嵌套是在源代码中使用 TABS 创建的。
#pragma omp parallel
#pragma omp sections
{
#pragma omp section
p2 = ModularExponentiation((a % p), dp, p);
#pragma omp section
q2 = ModularExponentiation((a % q), dq, q);
}
嵌套是风格问题吗?或者它是否具有重要意义,比如 Python?
您可以将前两个编译指示合并为一个,它不会改变语义,因此您可以更改
#pragma omp parallel
#pragma omp sections
进入
#pragma omp parallel sections
但是,为了指定任务并行度,section pragma 必须嵌套在 sections pragma 内部。您可能希望将它们分开的一个例子是,如果您想一个接一个地做两个平行部分,中间有一道屏障,例如:
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{ ... }
#pragma omp section
{ ... }
}
#pragma omp sections
{
#pragma omp section
{ ... }
#pragma omp section
{ ... }
}
}
这不需要为第二组部分创建新的"team"
我正在查看如下代码(以 reviewer/auditor 身份)。下面显示的嵌套是在源代码中使用 TABS 创建的。
#pragma omp parallel
#pragma omp sections
{
#pragma omp section
p2 = ModularExponentiation((a % p), dp, p);
#pragma omp section
q2 = ModularExponentiation((a % q), dq, q);
}
嵌套是风格问题吗?或者它是否具有重要意义,比如 Python?
您可以将前两个编译指示合并为一个,它不会改变语义,因此您可以更改
#pragma omp parallel
#pragma omp sections
进入
#pragma omp parallel sections
但是,为了指定任务并行度,section pragma 必须嵌套在 sections pragma 内部。您可能希望将它们分开的一个例子是,如果您想一个接一个地做两个平行部分,中间有一道屏障,例如:
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{ ... }
#pragma omp section
{ ... }
}
#pragma omp sections
{
#pragma omp section
{ ... }
#pragma omp section
{ ... }
}
}
这不需要为第二组部分创建新的"team"