Visual Studio에서는 OpenMP 외에도 자동 병렬화(Auto-Parallelizer)를 지원한다.

OpenMP보다는 좀 더 사용하기는 쉬운 편이고, 사용 가능 범위는 좀 더 제한적인 느낌.


OpenMP는 아래와 같이 적용할 수 있고,


#pragma omp parallel for
for (int i = 0; i < 256; i++) {
    iP[i] = i;
}


자동 병렬화는 아래와 같이 적용할 수 있다.


#pragma loop(hint_parallel(0))
for (int i = 0; i < 256; i++) {
    iP[i] = i;
}


즉, 사용 자체는 그리 어렵지 않다.

사용할 수 없는 조건들을 배제하는 게 좀 번잡할 뿐.


이미지 20장을 일괄적으로 리샘플링하는 코드를 통해서 둘의 성능을 비교해봤다.



테스트에 사용한 CPU는 AMD A8-3870 (쿼드 코어).

사용하지 않은 경우에 비교해서 대략 40% 안팎의 성능 향상을 보여준다.

그리고, 병렬화와 OpenMP 간에는 유의미한 성능 차이는 없다. 이건 생각해보면 당연한 결과.


위의 표를 그래프로 보면 아래와 같다.



역시 당연한 결과지만, CPU 이용률도 상당한 수준으로 올라간다.

참고로, 적용하지 않았을 때의 CPU 이용률은 35% 내외였음.




  1. ppp 2019.06.01 21:50

    제가 비주얼 스튜디오 2010을 쓰고 있는데
    2010 버전에서 Auto-Parallelizer를 사용할 수 없나요?

+ Recent posts