2010-11-22 5 views
0

일반적인 개념이므로 코드를 사용하지 않을 것입니다.이 개념을 OpenMP로 최적화 할 수 있습니까?

너무 크거나 작지 않은 기능의 시나리오가 있고 OpenMP for 루프 최적화로 쉽게 최적화 될 수 없다고합니다 .

그러나 코드에서 몇 백 개의 관련이없는 상황에서 프로젝트가 실행되는 동안 수백만 번 호출되는 함수입니다.

+0

이것은 너무 일반적입니다. 대답은 함수에 따라 다르며 함수가 실제로 어떻게 호출되는지에 달려 있습니다. –

답변

0

때 [자체 인라인 및 중 평행하지 않은 상태에서 매크로에 그것을 만들기 (최적화 된 GCC 결과에 기본적으로에), 그것이 사업을 것이다 호환 될 수 있도록. 많은 일을하지 않는 것] 함수가 호출됩니다. 특히 루프에서 여러 번 호출됩니까? 질문은 다소 모호합니다. 예를 들어 수백 개의 서로 관련이없는 장소에서 수백만 번씩 또는 수천 개의 관련이없는 장소에서 한 번 호출되고 코드 섹션에 충돌했습니다. 수천 번 -> 수백만 번).

첫 번째 경우`예를 들어`map '을 병렬화하는 것, 즉 많은 경우에 독립적으로 함수를 적용하는 것입니다. OpenMP는 매우 쉽습니다.

두 번째 경우에는 함수가 백만 번이지만 한 번 호출 될 때마다 no. 거기에 반복 실행 거기에 있지만 노출이 동시성; 독립적으로 수행 할 수있는 작업 목록은 동시에 존재하지 않습니다. 반복 매개 변수를 사용하여 함수를 호출 할 가능성이있는 경우 수행 할 수있는 모든 작업은 병렬 처리 기술이 아닌 메모리/계산 시간 절충 인 메모 작성을 사용하는 것입니다.

두 번째 경우에는 코드를 재구성하여 한 번에 여러 함수 호출을 수행 할 수 있기 때문에 동시성이 노출되어 병렬 처리가 가능하지만 OpenMP (또는 모든 병렬 프로그래밍 모델)이 자동으로 수행 할 수 있습니다.

2

OpenMP는 에 대해 "작업을 병렬로 실행" - 일반적으로 for 루프 ...뿐만 아니라 OpenMP를 유용하게 사용하고 코드 속도를 높이기 위해 루프가 전혀 필요하지 않습니다.

유일한 문제는 다음과 같습니다. "개의 독립적 인 작업이 하나씩 실행되며 동시에 대신 작동 할 수 있습니까?". 그렇다면 OpenMP로 쉽게 최적화 할 수 있습니다.

관련 문제