OpenMP는 병렬 섹션 내에서 선언 된 데이터를 어떻게 처리합니까? C99 이전에 private() 절을 사용하여 스레드 로컬 데이터를 지정했습니다.OpenMP 및 C99 데이터
int i, x;
#pragma omp parallel for private(x)
for (i=0; i<n; i++) {
x=i;
}
이제 C99에서는 데이터와 코드를 혼합 할 수 있으므로 변수를 사용하기 직전에 변수를 선언하는 것이 좋습니다. 루프의 범위 내에서 데이터를 선언하면 스레드가 비공개로 보장됩니까? 예를 들어, 다음은 유효한가?
#pragma omp parallel for
for (int i=0; i<n; i++) {
int x=i;
}
나는 단지의 경우 개인 (X)를 추가했지만, 내 컴파일러 객체는 (아마도 X 있기 때문에 아직 선언되지 않았습니다).
Google에서 빠른 검색은 이것이 사실임을 나타냅니다. C++에는이 속성이있었습니다. –
btw : C90 예제 코드에서 C99 스타일의 for for-loop를 사용하고 있습니다 ... – Christoph
아마도 C99 예제도 유효한 C90입니다. ANSI C에서 복합 문 ('{...}'블록)의 시작 부분에 변수를 선언 할 수 있습니다. – Juliano