병렬 내부 동기화 I이의 OpenMP : 1) 스레드 정량 스폰 :
void h(particles *p) {
#pragma omp parallel for
for (int i = 0; i < maxThreads; ++i) {
int id = omp_get_thread_num();
for (int j = 0; j < dtnum; ++j) {
f(p, id);
if (j % 50 == 0) {
if (id == 0) {
g(p);
}
#pragma omp barrier
}
}
}
}
void f(particles *p, int id) {
for (int i = id * prt_thread; i < (id + 1)*prt_thread; ++i) {
x(p[i]);
}
}
기본적 원하는 작업 같이 판독하는 코드를 갖는다. 각 스레드는 스레드의 id에 따라 p 척을 처리합니다 2) p의 각 요소는 dtnum 번 처리해야합니다. 처리가 임의의 이벤트를 포함 함 3) 50 회 반복마다 하나의 스레드가 다른 작업을 수행해야하며 다른 스레드는 대기해야합니다.
문제점 : gcc는 경고 : 작업 영역 공유, 중요 명령, 정렬 순서 , 마스터 또는 명시 적 작업 영역
어떻게해야합니까?
스레드 ID가 f로 전달됩니다. id는 배열 p를 같은 크기의 청크로 나눌 때 사용됩니다. f는 무엇과 관련이 없지만 샘플을 추가하겠습니다. – Patrik