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장을 일괄적으로 리샘플링하는 코드를 통해서 둘의 성능을 비교해봤다.
![](https://t1.daumcdn.net/cfile/tistory/2737B33A56ECAD6C05)
테스트에 사용한 CPU는 AMD A8-3870 (쿼드 코어).
사용하지 않은 경우에 비교해서 대략 40% 안팎의 성능 향상을 보여준다.
그리고, 병렬화와 OpenMP 간에는 유의미한 성능 차이는 없다. 이건 생각해보면 당연한 결과.
위의 표를 그래프로 보면 아래와 같다.
![](https://t1.daumcdn.net/cfile/tistory/2751693856ECAD7716)
역시 당연한 결과지만, CPU 이용률도 상당한 수준으로 올라간다.
참고로, 적용하지 않았을 때의 CPU 이용률은 35% 내외였음.
![](https://t1.daumcdn.net/cfile/tistory/260EA74B56ED3D123D)