OpenMP резко замедляет цикл

Я пытаюсь ускорить это для цикла с распараллеливанием OpenMP. У меня сложилось впечатление, что это должно разделить работу на несколько потоков. Однако, возможно, накладные расходы слишком велики, чтобы ускорить процесс.

Я должен упомянуть, что этот цикл происходит много-много раз, и каждый экземпляр цикла должен быть распараллелен. Число итераций цикла, newNx, может быть как 3, так и 256. Однако, если я условно распараллеливаю его только для newNx> 100 (только самые большие циклы), оно все равно значительно замедляется.

Есть ли здесь что-нибудь, что могло бы сделать это медленнее, чем предполагалось? Я должен также упомянуть, что векторы A, v, b ОЧЕНЬ велики, но я считаю, что доступ к O (1).

    #pragma omp parallel for private(j,k),shared(A,v,b)
    for(i=1;i<=newNx;i+=2) {
      for(j=1;j<=newNy;j++) { 
        for(k=1;k<=newNz;k+=1) {

          nynz=newNy*newNz; 

          v[(i-1)*nynz+(j-1)*newNz+k] = 
          -(v[(i-1)*nynz+(j-1)*newNz+k+1 - 2*(k/newNz)]*A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + kup+offA] + 
          v[(i-1)*nynz+(j-1)*newNz+ k-1+2*(1/k)]*A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + kdo+offA] + 
          v[(i-1)*nynz+(j - 2*(j/newNy))*newNz+k]*A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + jup+offA] + 
          v[(i-1)*nynz+(j-2 + 2*(1/j))*newNz+k]*A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + jdo+offA] + 
          v[(i - 2*(i/newNx))*nynz+(j-1)*newNz+k]*A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + iup+offA] + 
          v[(i-2 + 2*(1/i))*nynz+(j-1)*newNz+k]*A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + ido+offA] - 
          b[(i-1)*nynz + (j-1)*newNz + k])
          /A[((i-1)*nynz + (j-1)*newNz + (k-1))*spN + ifi+offA];}}}

Ответы на вопрос(1)

Ваш ответ на вопрос