제목이 불명확하면 죄송합니다. 나는이 말을하는 방법을 모른다. 다음 작업을 수행 할 수있는 방법이 있는지OpenMP 반복 루프 병렬 영역
궁금 해요 :
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
}
}
같은 루프에 대한 민간 지정자를 생략하는 등의 일을 무시하고, 내 외부의 외부 스레드를 포크 할 수있는 방법이있다 루프를 사용하여 내부 루프를 병렬화 할 수 있습니까? 내 이해 (제발 내가 틀렸다면 정정 해주세요)에서 모든 스레드가 외부 루프를 실행합니다. 내부 루프의 동작에 대해서는 확신 할 수 없지만, for
은 발생하는 각 스레드에 청크를 배포합니다.
내가 원하는 것은 외부 루프에서 iterations
번을 포크/조인 할 필요가 없지만 한 번만 수행하면됩니다. 이것이 올바른 전략인가?
병렬 처리하면 안되는 다른 외부 루프가 있다면 어떻게 될까요? 즉 누군가가 큰 응용 프로그램의 예에 나를 가리 키도록했다 내가 더 잘 OpenMP를 사용시 사용하는 전략을 이해할 수 있도록 OpenMP의를 사용하여 병렬 경우
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
for(int k = 0; k < innerIterations; k++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
// Do something else
}
}
}
그것은 좋은 것입니다 .... 나는 아무 것도 찾을 수없는 것 같습니다.
설명 : 루프 순서를 변경하지 않거나 차단, 캐싱 및 일반적인 성능 고려 사항을 포함하는 솔루션을 찾고 있습니다. 루프 구조에서 OpenMP로이 작업을 수행하는 방법을 알고 싶습니다. // Do something
은 의존성을 가질 수도 있고 가지지 않을 수도 있으며, 의존성이 있다고 가정하고 주위를 움직일 수는 없다고 가정합니다.
아마도 당신이하고 싶은 것을 보여줄 수 있습니다. 나는 코드를 작성하는 것을 의미합니다 // 뭔가를하십시오 –
@raxman, 그건 도움이되지 않습니다. 이것은 특정 문제에 대한 해결책이 아니라 그러한 문제에 대한 일반적인 해결책을 요구하기위한 것입니다. – Pochi
당신은 앞으로 가서 어떤 대답을 upvote/accept 수 있습니다. 사람들이 약간의 노력을 기울이고 모든 것을위한 최소한의 upvotes를 얻은 것처럼 보입니다. –