![]() |
1
1
pgi编译器将选择如何在编译时分解工作,但通常会在运行时确定帮派的数量。帮派本质上是可伸缩的并行性,因此决定多少可以推迟到运行时。向量的长度和工作线程的数量影响底层内核的生成方式,因此通常在编译时选择它们以最大化优化机会。在这样的循环中,如果在编译时边界不是很清楚,编译器必须在内核中生成一些额外的代码,以确保执行正确的迭代次数。 |
![]() |
2
0
根据OpenACC 2.6规范[1]第1357和1358行:
似乎是这样,所以你的代码是有效的。 然而,注意,它是定义了如何在帮派和工作者之间分配工作的实现,并且可能是PGI编译器只是简单地执行迭代的一些简单划分。 您可以手动地使用多语言和多语言定义帮会/工人的值,并且传递给这些子句的整数表达式可以依赖于函数的值(参见规范中的)。 〔1〕 https://www.openacc.org/sites/default/files/inline-files/OpenACC.2.6.final.pdf |