(충격!) OpenCV 빌드 벤치마크 - M1 (ARM) vs Workstation CPU (x86)

배경

지난 글에서 M1 칩에서 OpenCV 빌드를 해봤다.

생각보다 빠르게 빌드가 되길래, x86 CPU와 비교해서 벤치마크를 해보았다.

 

Native CPU 가속 설정 빌드 시간

이 프로젝트에 대한 설정은 지난 글과 동일하다.

아래 커맨드를 이용해서 빌드하는데 걸린 시간을 측정하였다.

1
time ninja

x86 CPU와 비교하기 위해 귀가해서 x86 워크스테이션 급 CPU로도 빌드를 해봤다.

아래 테이블에 사용한 장비들의 스펙을 작성해놨다.

2021 MacBook Pro M1 Max
10 코어 CPU (8코어 메인, 2코어 보조)
64GB RAM
기본 스왑 메모리

데스크탑 워크스테이션
CPU - AMD Threadripper 2950X - 16코어 32쓰레드. 모든 코어 4.8GHz 오버클럭
RAM - 64GB, DDR4 3200 MHz (3400 MHz 오버클럭), 16-18-18-38 타이밍. 램카드 4개 모두 동일 타이밍.

동일한 셋팅으로, 뒤에 크롬 탭 몇개 켜있는거 빼고는 다른 작업은 하지 않았다.

결과는 다음과 같이 나왔다.

1
2
3
4
5
# M1 Max
ninja 1665.10s user 55.95s system 837% cpu 3:25.47 total

# x86 Workstation
ninja 7395.31s user 300.40s system 2793% cpu 4:35.47 total

M1 max는 실제 흐른 시간 56초. 전체 CPU 시간 1665초.
x86 워크스테이션은 실제 흐른시간 300초, 전체 CPU 시간 7395초.

…??????

노트북이 워크스테이션보다 빌드가 6배나 빠르게 나왔다.

물론 SSE/AVX의 종류도 많고 적용된 분야가 많아서 아무래도 빌드할 때 더 많은 링크가 들어갔겠고, ARM CPU에서는 이걸 빌드하지 않으니 절대적인 용량이 더 작을 수도 있겠다.

M1 Max에서 x86 크로스컴파일 빌드를 해보면 다른 결과가 나올 수도 있다는 점은 유의해둬야한다.

하지만 기본 빌드만 돌리는 단순 유저의 입장에서는 당연히 M1 맥북이 더 선호되겠다!!!

 


x86 CPU 빌드로 크로스컴파일 벤치마크

그렇다면 둘 다 동일 코드 베이스로 빌드를 하면 얼마나 차이가 날까?

이 방법만이 정확하게 CPU를 비교할 수 있지 않을까 생각이 들었다.

x86 빌드로 기준을 맞춰서 빌드를 해보았다.

M1 칩에서는 CMake 설정을 건드려서 강제로 SSE/AVX를 빌드하게 해야한다. 가능한 모든 옵션을 빌드하게 했다.

1
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../install_sse -GNinja -DCPU_BASELINE=SSE3 -DCPU_DISPATCH=SSE4_1,SSE4_2,FP16,AVX,AVX2,AVX512-SKX ..

…를 하면 될 줄 알았는데, 컴파일러가 SSE/AVX 관련을 지원하지 않는다고 다 스킵해버리네? ㅠㅠ… 아직까지 제대로 성공하지 못했다.

다음과 같은 로그가 나타난다. 심지어 x86 CPU를 에뮬레이션 하는 Rosetta 까지 사용해도 같은 로그가가 난다.

1
2
3
4
5
6
-- Optimization SSE3 is not available, skipped                                                                            
-- Dispatch optimization SSE4_1 is not available, skipped
-- Dispatch optimization SSE4_2 is not available, skipped
-- Dispatch optimization AVX is not available, skipped
-- Dispatch optimization AVX2 is not available, skipped
-- Dispatch optimization AVX512-SKX is not available, skipped