关于OpenMP Fortran工作共享/SIMD循环关联的Fortran循环限制问询
OpenMP工作共享do/simd循环对Fortran关联循环的限制说明
无控制循环、DO WHILE循环的限制变化
OpenMP 4.5标准的2.7.1节(工作共享Do构造)确实明确禁止关联无控制循环或DO WHILE循环。在OpenMP 5.2版本中,这个限制并没有被移除,只是调整了表述方式和章节位置:
- 针对工作共享do循环,5.2标准的2.15.1节明确要求关联的Fortran循环必须是计数型DO循环(即带有明确起始值、终止值、步长的
DO i = start, end[, step]形式),间接排除了无控制循环和DO WHILE; - 针对SIMD循环,5.2标准的2.15.3节同样要求关联循环为计数型DO循环,因为SIMD构造需要确定的迭代次数来实现向量化,无控制循环和DO WHILE无法满足这一需求。
DO CONCURRENT作为关联循环的限制
OpenMP 5.2标准明确禁止将DO CONCURRENT作为工作共享do循环或SIMD循环的关联循环:
- 在2.15.1节(工作共享Do构造)的约束条款中,直接排除了DO CONCURRENT作为关联循环的可能;
- 在2.15.3节(SIMD构造)中,同样不允许关联DO CONCURRENT循环;
- 另外,2.17节(DO CONCURRENT构造)提到,DO CONCURRENT本身支持与部分OpenMP构造结合,但由于它自身带有Fortran标准定义的并发执行语义,与OpenMP工作共享/simd的并行模型存在冲突,因此不能作为这类构造的关联循环。
内容的提问来源于stack exchange,提问作者kiran
相关产品推荐
相关产品推荐

