0

OpenMP タスクを使用して 2 つの行列を乗算しようとしています。これは基本的なコードです:

long i, j, k;

   for (i = 0; i < N; i ++)
      for (j = 0; j < N; j ++)
         for (k = 0; k < N; k ++)
            c[i * N + j] += a[i * N + k] * b[k * N + j];

したがって、列レベルでタスクを使用したいので、次のようにコードを変更しました。

   long i, j, k;
#pragma omp parallel 
{
   #pragma omp single
   {
   for (i = 0; i < N; i ++)
     #pragma omp task private(i, j, k)
     {
      for (j = 0; j < N; j ++)
         for (k = 0; k < N; k ++)

            c[i * N + j] += a[i * N + k] * b[k * N + j];
      }
    }
  }

プログラムを実行すると、次のようなメッセージが表示されます。

セグメンテーション違反 (コアダンプ)

今、私はいくつかのピースが欠けていることを知っていますが、それが何であるかわかりません. 何か案が?

4

1 に答える 1