Parallel processing OpenMP:如何使循环分布仅取决于阵列大小?

Parallel processing OpenMP:如何使循环分布仅取决于阵列大小?,parallel-processing,openmp,Parallel Processing,Openmp,考虑以下代码块: int array[30000] #pragma omp parallel { for( int a = 0; a < 1000; a++ ) { #pragma omp for nowait for( int i = 0; i < 30000; i++ ) { /*calculations with array[i] and also other array entries happen

考虑以下代码块:

int array[30000]

#pragma omp parallel
{
   for( int a = 0; a < 1000; a++ )
   {
       #pragma omp for nowait
       for( int i = 0; i < 30000; i++ )
       {
           /*calculations with array[i] and also other array entries happen here*/
       }
   }
}
int数组[30000]
#pragma-omp并行
{
对于(int a=0;a<1000;a++)
{
#nowait的pragma omp
对于(int i=0;i<30000;i++)
{
/*使用数组[i]和其他数组项的计算在此处进行*/
}
}
}
竞争条件在我的应用程序中不是一个问题,但我想强制执行并行区域中的每个线程在每次运行内部for循环时都会处理完全相同的数组块

据我所知,schedule(static)根据线程数和数组长度分配for循环项。但是,对于不同的循环或同一循环的不同重复(即使线程数和长度相同),分布是否会发生变化尚不清楚

标准对此有何规定?时间表(静态)是否足以强制执行这一点?

我相信这一引用提供了这样的保证:

如果满足以下条件,
静态
调度的兼容实现必须确保在两个工作共享循环区域中使用相同的逻辑迭代编号分配给线程:1)两个工作共享循环区域具有相同的循环编号迭代次数,2)两个工作共享循环区域都指定了相同的区块大小值两个工作共享循环区域都未指定区块大小,3)两个工作共享循环区域都绑定到相同的并行区域,4)两个循环都不与SIMD构造相关联