C++ 循环未矢量化:未标识循环控制变量

C++ 循环未矢量化:未标识循环控制变量,c++,intel,C++,Intel,遗憾的是,“英特尔编译器”无法矢量化以下i和j循环: #pragma ivdep #pragma vector always for ( i = 1 ; i < N ; i++ ){ // <- not vectorized for ( j = 0 ; j < i ; j++ ){ // <- not vectorized // Matrix multiplication on C = x(i) * x(j) cblas_dge

遗憾的是,“英特尔编译器”无法矢量化以下i和j循环:

#pragma ivdep
#pragma vector always
for (  i = 1 ; i < N ; i++ ){ // <- not vectorized
    for (  j = 0 ; j < i ; j++ ){ // <- not vectorized
        // Matrix multiplication on C = x(i) * x(j)
        cblas_dgemm(...,&x[i*BLOCKSIZE*D],... , &x[j*BLOCKSIZE*D],..., c);
        int accum=0;

        // following loop gets vectorized well
        #pragma omp parallel for reduction(+:accum) collapse(2)
        for ( int k = 0 ; k < BLOCKSIZE ; k++ ){
            for ( int l =0 ; l < BLOCKSIZE ; l++ ){                    
                    accum +=  C[k * NRC + l] + p[j*BLOCKSIZE + l] + p[i*BLOCKSIZE+k];
            }
        }

        total += accum;
    }
}

我真的很困惑,因为我认为控制变量
I
j
很明显,我认为我有OpenMP规范中的cannonical循环形式。顺便说一下,
k
-和
l
-循环工作正常。猜猜看?

什么是
N
?它是编译时常量吗?你能给我们看一下定义和初始化吗?不,编译时不知道。我通过命令行选项传递它。什么是
N
?它是编译时常量吗?你能给我们看一下定义和初始化吗?不,编译时不知道。我通过命令行选项传递它。
LOOP BEGIN at i-th loop:
   remark #15521: loop was not vectorized: loop control variable was not identified. Explicitly compute the iteration count before executing the loop or try using canonical loop form from OpenMP specification

   LOOP BEGIN at j-th loop:
      remark #15521: loop was not vectorized: loop control variable was not identified. Explicitly compute the iteration count before executing the loop or try using canonical loop form from OpenMP specification
   LOOP END
LOOP END