다른 for 루프 내 for 루프를 병렬 처리하고 싶습니다. 필자는 단순히 "#pragma omp parallel for"명령을 내부 루프에서 직접 사용할 수 있지만 매번 새로운 세트의 스레드를 생성하는 것은 불가능한 일이 아닌가하는 두려움이 있습니다. 외부 루프 (내부 루프 이전)에는 할당 및 단일 스레드에서 수행해야 할 다른 명령어가 있습니다 (내부 루프에서 공유 할 수 있도록 매트릭스를 할당하므로 모든 스레드가 액세스 할 수 있어야합니다). 나는 다음과 같이하려고 시도했다 :Openmp : 중첩 된 루프 및 할당
#pragma omp parallel
{
for (auto t=1;t<=time_step;++t){
#pragma omp single {
Matrix<unsigned int> newField(rows,cols);
//some instructions
}
unsigned int j;
#pragma omp for
for (unsigned int i = 2;i<=rows-1;++i){
for (j = 1;j<=cols;++j){
//Work on NewField (i,j)
}
}
#pragma omp single {
//Instruction
}
}
}
이 코드는 작동하지 않는다. 매번 스레드를 생성하는 것보다 (작업하게 만들면)이 방법이 더 효율적입니까? 내가 뭘 잘못하고 있니?
감사합니다.
외부 루프를 t 이상으로 병렬화하지 않는 이유는 무엇입니까? 매 단계마다 새로운 행렬을 생성한다면 각 스레드는 행렬의 비공개 버전에 쓸 것입니다. –
코드가 작동하지 않는다는 것은 무엇을 의미합니까? 구문 오류가 발생합니까? –
'single' 대신'#pragma omp master'를 사용할 것입니다. 그런 식으로 스레드는 코드를 실행하는 코드를 협상 할 필요가 없습니다. –