私は並列プログラミングとopenmpの世界に慣れていないので、これは無駄な質問かもしれませんが、私が経験していることに対する良い答えを思いつくことができないので、誰かが光を当てることができることを願っています.問題について。
私が達成しようとしているのは、次の並列セクションを処理するすべてのスレッドに動的に割り当てられた (整数の) マトリックスのプライベート コピーを用意することですが、実行フローがその領域に入るやいなや、おそらくプライベート マトリックスへの参照です。 null 値を保持します。
私が認識していないこのディレクティブの制限はありますか? 一次元の動的配列では、すべてがうまく機能しているようです。
コードのスニペットは次のとおりです...
#define n 10000
int **matrix;
#pragma omp threadprivate(matrix)
int main()
{
matrix = (int**) calloc(n, sizeof(int*));
for(i=0;i<n;i++) matrix[i] = (int*) calloc(n, sizeof(int));
AdjacencyMatrix(n, matrix);
...
/* Explicitly turn off dynamic threads */
omp_set_dynamic(0);
#pragma omp parallel
{
// From now on, matrix is NULL...
executor_p(matrix, n);
}
....