MKL과 openBLAS
on
호기심 때문에 10분 정도 소모해서 누가누가 빠를까 잠시 테스트해봤다. 이 역시 누구 차가 더 빠른가 달려보기와 별 다를 바 없다. 어차피 빨라봐야 매우 작은 비율로 빠르고, 이 차이가 드러날만큼의 일을 컴퓨터에게 시키지도 않을 뿐더러 그럴 일도 없다.
실제로 엄청난 시간이 소모되는 일들 (칩설계가 끝나서 미친 듯이 검증하는 경우?)은 오래된 컴퓨터들이 낡은 OS 위에서 덜 최적화된 소프트웨어를 사용해서 돌린다. 아주 간단하게 gcc에 optimization 옵션 하나만 올려줘도 속도가 비약적으로 빨라지는데다 gcc 버전까지 올려버리면 훨씬 더 빨라지는데, 아직 산업계에서는 4.8 근처에서 왔다갔다하고 있다. 이미 9.2가 보편화된 시점인데도 말이다.
본론으로 돌아와서 MKL은 intel CPU에 가장 최적화되어있다고 해서 안들어가는 곳 없이 다 들어가고 이것 때문에 AMD CPU와 제법 유의미한 성능차를 보이고 있다.
실험 환경:
- i7 8700 (AVX2까지 지원됨)
- MATLAB 2018a (on MacOS)
- MKL (in matlab) + openBLAS (AVX2, x86_64용으로 빌드)
결과만 대충 정리한다.
- MATLAB의 bench를 여러 번 돌렸을 때 유의미한 성능차 없다.
그러니까, 쉽게 말해서 BLAS/LAPACK library가 인텔에 맞게 너무 좋아서 인텔 CPU가 빠르다기 보단 겉으로는 알 수 없지만 뭔가 분명히 빠른 구석이 있기에 빠르다. LU와 Sparse를 풀어낼 때의 속도가 AMD CPU 대비 유의미하게 빠르다. 전체 성능상 동급으로 치는 (그러나 가격은 두배인) CPU쌍을 놓고 보면 intel CPU의 LU/Sparse 속도가 2배가량 빠른 것으로 나타난다.
일반 사람들의 생활에서 LU/Spare linear system 문제를 풀어야 할 이유는 그렇게 많지 않으니까 CPU의 성능차가 두드러지지 않을 뿐이지 한다. 들리는 말로는 AMD도 floating point 연산속도가 인텔보다 빨라졌다는데 막상 실험해보면 별로 그렇지 않다. 아직까진 core 개수로 (core당 단가가 상대적으로 싸니까) 승부를 보는 processor라고 봐야지 싶은데, 여러 가지를 종합해볼 때 인텔이 너무 무지막지하게 받는다고 보기도 뭐하고 AMD가 박리다매를 한다고 보기도 뭐한게
- 대개의 intel CPU는 GPU를 내장한다. GPU안에 QuickSync라는 영상 코덱도 있다.
- intel CPU의 최근 버전에는 AVX512라는 확장 버전의 SIMD 명령어 셋이 있다 (불행히도 …X 버전의 CPU가 아니라 테스트 못해봤다)
- 싱글코어 성능은 항상 intel이 좀 더 빠른 것으로 나온다.
그런데, 대개 데스크탑을 맞추는 사람들은 GPU를 같이 구입하는 게 보통이고 (내장 GPU의 성능이 아직 게임을 하긴 미달한다고 봐서) QuickSync라는 것은 영상 압축/복원시에 쓰이는 코덱이라 대부분의 영상 작업(영상필터링/이동/확대 등등 linear transform 등등)은 CPU 아니면 GPU를 이용하게 되는 것이라 내장 GPU의 쓰임새가 사실 별로 없어진다. GPU와 CPU의 모든 코어를 총동원해서 일을 빨리 마치는 게 동영상 작업에서 선호되는 방식인데, 분명이 이 경우엔 AMD CPU가 이득을 누리게 된다.
어차피 구입한 GPU, 거기에 많은 수의 코어까지 받쳐주게 되니까 말이다. 살짝 빠른 intel CPU의 싱글코어 속도는 single core에 보다 강조되어 돌아가는 게임에서 성능 우위를 보이는데, 그 성능차를 유의미하다고 보긴 뭐한 것이 5%를 넘지못한다. 물론 동급으로 취급되는 CPU들 간에 그렇단 말이다.
MATLAB에서 연산속도 차도 사실 무의미하다. 머리를 약간 더 써서 알고리즘을 크게 개선한다든가 몸의 피로도를 낮춰서 산뜻한 머리로 실수 없이 일을 마치면 CPU의 성능차 따위는 의미가 없어진다. 서둘러서 안해도 될 일을 여러 번하게 만든다든가 빨리 해치울 수 있는 일을 느리게 해치운다든가. 이 좋은 시절에도 컴퓨터를 멍청하게 쓰는 사람들 천지다. CPU가 빨라봐야 이 경우엔 전혀 의미가 없다.