저는 병렬 프로그래밍과 openmp의 세계에 익숙하지 않으므로 이것은 쓸데없는 질문 일 수 있습니다. m 경험하기 때문에 누군가가 문제에 관해 밝힐 수 있기를 바랍니다.C/OpenMP - threadprivate 및 포인터 벡터 문제
달성하려고하는 것은 다음 병렬 섹션을 처리 할 모든 스레드에 대해 dinamically 할당 된 행렬 (정수)의 개인 복사본을 갖는 것입니다.하지만 실행 흐름이 해당 영역에 들어가 자마자 기발한 private 행렬은 null 값을 가지고 있습니다.
이 지시어에는 제한이 있습니까? 모든 것이 1 차원 동적 배열로 잘 작동하는 것처럼 보입니다.
코드의 조각은 다음 중 하나입니다...에 관한 OpenMP documentation에서
#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);
}
....
대단히 감사합니다. 나는 그것을 간과했다. – c3900