두 개의 중첩 된 for 루프가있는 코드 조각이 있습니다. 첫 번째 단계에는 몇 단계가 있고 두 번째 단계에는 많은 단계가 있고 다른 단계는 주변에 있습니다. 독립적으로 지시문에 대해 omp를 사용하여 루프를 실행할 수 있으며 일관된 결과 (및 속도 향상 속도)를 얻을 수 있습니다. 그러나 내가 좋아하는 것까지 :Openmp 스케줄링
- 실행 병렬 첫 번째는 16 단계 이상의 그렇지
- 병렬로 두 번째 (그러나 그것은 8 단계를 경우에도 첫 번째)를 실행 이있는 경우
하나의 루프가 병렬이거나 다른 루프이므로 중첩 된 병렬 처리가 아닙니다. 독립적으로 실행하고 스레드를보기 위해 -H를 실행하면 때로는 단 하나의 스레드 만 관찰하고 때로는 더 많은 스레드를 관찰하여 수행하려는 작업을 이해하고 실제로 성능을 향상시킬 수 있습니까?
지금까지이 같은 짓 : 컴파일되지 않습니다
#pragma omp parallel
{
#pragma omp for schedule(static,16)
for(...){
/* some declarations */
#pragma omp for schedule(static,16) nowait
for(...){
/* ... */
}
}
}
이 (업무 공유 영역 밀접하게 작업 공유의 안에 중첩되지 않을 수, 중요, 주문, 마스터 또는 명시 적 작업 영역) 및 내가 어쨌든 묘사 한 것처럼 행동하지 않을 것이다. 나는 또한 붕괴 시도했지만 "/ * 일부 선언 * /"및 openmp3.0 이후 나는 그것을 피하고 싶습니다 및 대상 하드웨어 컴파일러가 지원할 것입니다 확실하지 않은 문제가있었습니다.
아이디어가 있으십니까?
안녕하세요. 사실 나는 당신이 말한 것처럼 if() {} else {} 내에 두 개의 다른 평행 영역을 작성했습니다. 못생긴하지만 꽤 효율적입니다. 내가 뭔가를 찾고있을 때 당신의 해결책을 시도해 보겠습니다. – Emilien