Hardware, ICT, Software

다운폴 취약점의 주범, AVX-512

제목에는 주범… 이라고 적긴 했습니다만, [다운폴 취약점 문서]를 읽어보면 단순히 특정 명령어 하나 만의 문제는 아니라는 것을 알 수 있습니다.
[작년 8월에 보고된 이후 1년 동안 엠바고 상태]였는데, 명령어 하나 문제였으면 1년이나 걸릴 이유가 없죠.
[저번 글]에서 다운폴 취약점에 대한 대략적인 개념을 훑어보았습니다.
이번 글에서는 AVX-512에 대해 이야기합니다.
조금 곁다리이자 사실 몰라도 그만 알아도 그만인 내용이지만 재미있을지도 모르니🙄 한 번 읽어보시죠.


AVX-512

AVX2, AVX-512 명령어 세트에서 제공하는 Gather 명령어로 인한 보안 취약점, “다운폴”은 [저번 글]에서 설명 하였습니다.
AVX에 대해서는 최대한 단순하게 적어 보겠습니다.

당신이 컴퓨터에게 1 더하기 1을 명령합니다.
컴퓨터는 더하기(+) 명령을 수행해서 2라는 답을 내놓을 겁니다.
그런데 어떤 필요에 의하여 (1+1)+(1+1)이라는 명령을 시킨다고 칩시다.
정직하게 한다면 1+1을 두 번 계산한 다음, 2+2를 계산해서 4가 나오겠죠.
더하기를 세 번이나 합니다.
그런데 (1+1)+(1+1)이라는 작업을 자주 반복하게 되는 경우, (1+1)를 아예 명령어로 만들어 넣어 버린다면?
결과는 똑같은데 계산이 한 번으로 줄었습니다!
이 비스무리하게 작동하는 것이 AVX입니다.
명령어 여러 개를 묶어 처리하여, 줄어든 일만큼 다른 일을 할 수 있으니 CPU가 더 빨라지는 것처럼 보이는 눈속임(CPU 자체의 속도가 빨라지는 건 아닙니다) 효과가 있습니다.
이런 식의 옥상옥을 쌓다보면 CPU 성능 개선 없이도 계산 속도가 빨라 집니다.

인텔이 딩둥댕둥~ 하던 시절 MMX(MultiMedia eXtension), SSE(Streaming SIMD Extensions)를 거쳐 명령어 세트가 점점 늘어나면서, 최근에 와서는 명령어가 512bit까지 확장된 것이 AVX-512입니다.
실제로는 우리가 PC에 기대하는 계산은 1+1 따위는 아닐 것이고… 훨씬 더 복잡한 것들을 시킬 겁니다.
위에서는 이해를 돕기 위해 더하기를 예로 들었지만, 당연히 덧셈만 하는 건 아니고… AVX-512는 벡터 연산에 유리합니다.
AVX(Advanced Vector Extensions)라는 이름에서 알 수 있듯, 여러 명령어를 묶어 벡터 연산을 재빠르게 처리 해주는 것.
벡터 연산은 대규모 시뮬레이션(코로나 한창일 때 TV에서 기침하면 비말이 날아다니는 이미지 다들 보신 적 있을 겁니다)이나, 딥러닝(요즘 사람들이 AI라고 부르고 있는 그것)에 있어 유용합니다.
현대 컴퓨팅 산업에서 AI는 화두 정도가 아니라, 업계 자체가 AI를 중심으로 재편중이기 때문에 AVX-512는 유용 할 수…도 있는 기술입니다.

대충 살펴보니 명령어만 묶어주는 식으로 성능 향상을 노릴 수 있으니, 이쯤되면 뭐 만능인 것 같지만…
세상 모든 일이 그렇게 쉽게 풀리면 재미없는 법이죠.


치명적인 단점들

AVX-512에 들어가는 명령어 조합이 복잡 다단 해 질수록…
당연히도 그만큼 더 많은 트렌지스터를 배열해야 합니다.
CPU 면적에는 한계가 있으므로 AVX를 위한 트렌지스터가 많아지면 자연히 CPU 자체 성능이 떨어집니다.

여러 명령 조합해서 만든 복잡한 AVX-512 명령어 세트가 그리 자주 쓰이지 않을 것이란 것도 쉽게 예상 할 수 있습니다.
단순한 계산(PC가 수행하는 대부분의 작업)을 할 때, AVX-512는 자리만 차지하고 아무 일도 안 합니다.

AVX-512가 작동해도 문제입니다.
이미 하던 작업에 더해, AVX-512가 움직이며 발생하는 열이 CPU 전체에 부담을 더합니다.
CPU가 뜨거워지면 성능이 떨어지고, 결국 AVX-512 때문에 시스템 전체 성능이 저하됩니다.
때문에 대부분의 범용 메인보드 회사들은 AVX-512 ON/OFF 및 AVX-512가 작동 할 때 CPU 클록을 얼마나 떨어뜨릴지 결정 할 수 있는 옵션(Offset)을 제공합니다.

ASUS BIOS. AVX를 제어 할 수 있는 옵션이 보입니다.
AVX가 작동하면 CPU 클럭을 떨어뜨리게 됩니다(AVX Ratio Offset).
AVX 자체를 아예 끌 수도 있습니다(AVX2는 512와는 달리 끄면 안 됩니다).
12세대 일부 CPU의 경우, 공식적으로는 AVX-512가 제거 되었지만,
CPU 내부에 트렌지스터는 그대로 남아있었습니다.
그래서 E코어를 끄는 대신 AVX-512를 켤 수 있는 옵션을 일부 메인보드들이 제공 했었습니다.
다만 그러면 클럭 조금 오른 11세대랑 다를 바가…

AVX-512가 마냥 만능은 아니고, 쓸 때는 CPU가 뜨거워지고, 안 쓸 때는 없느니만 못하다는 단점들은 그냥 지나치기에는 꽤 심각합니다.
때문에 리눅스의 아버지이자 역사상 가장 위대한 컴덕, 리누스 토발즈(Linus Torvalds)는 AVX-512를 [원색적으로 비난] 한 적이 있습니다.


I hope AVX512 dies a painful death, and that Intel starts fixing real problems instead of trying to create magic instructions to then create benchmarks that they can look good on.
(나는 AVX512가 고통스러운 죽음을 맞이하기를 바랍니다. 그리고 인텔이 벤치마크 점수에나 좋은 마법의 명령어를 만들어내기 보다는, 진짜 문제를 해결 하는데 나서기를 촉구합니다)

I hope Intel gets back to basics: gets their process working again, and concentrate more on regular code that isn’t HPC or some other pointless special case.
(나는 인텔이 기본으로 돌아가 예전처럼 일 하기를 바랍니다. HPC나 쓸데없이 특화된 영역에 치중하기보다는 보편적인 코드에 집중하는 것 말이죠)

(…중략…)

Yeah, I’m grumpy.
(맞아요. 나는 화가 났어요)

realworldtech.com 포럼, Linus Torvalds, 2020년 7월 11일.

아니 이 양반이 왜 이렇게 급발진 인가… 싶지만, AVX-512의 진실(?)을 알고 나면 이해가 됩니다.
애초 개인 PC로 대단위 시뮬레이션이나 딥러닝을 돌리는 경우가 많지도 않으며, 설령 한다고 해도 효율이 안 나옵니다.
AVX-512를 빼버리면, 512를 필요로 하지 않는(그리고 훨씬 더 자주 쓰는) 작업들이 더 빨라집니다.


장사치 인텔

물론 뭐… AVX-512가 마냥 쓸모없지는 않습니다.
(일반인들은 쓸 일이 거의 없는)일부 산업용 솔루션(카티아 같은…) 같은 경우 모델링 돌리면 AVX-512가 있는 CPU에서 더 빠르게 작동합니다.
y-cruncher 같은 걸로 테스트하면 비슷한 조건일 때 11세대 CPU에서 13세대 보다 성능이 잘 나오는 기이한 현상을 경험 할 수 있죠.
…아하! 이제 AVX-512가 벤치마크용이라는 리누스의 말이 이해가 되는군요.
일부 벤치마크에서 13세대보다 뛰어나니 “11세대 CPU가 짱입니다~!”라고 하면 아마도 큰 비웃음을 살 것입니다.
그런데 인텔은 실제 저런 식으로 말했었습니다.

인텔 11세대 CPU까지 AVX-512가 들어갔으나, 당시 AMD에서는 지원하지 않았습니다.
인텔은 AMD에 없는 AVX-512가 자기들 CPU에는 들어있기 때문에 더 좋다고 주장 했습니다.
일반인들이 AVX-512를 자주 활용 할 수 있는 것도 아니고, 성능 향상에도 별반 도움도 안 되는…
벤치마크 놀음에 불과한 AVX-512가 있으니 더 좋다는 이야기는 말도 안 되는 거짓말(에 가까운 과장)이었죠.
인텔은 11세대 까지 AVX-512 가지고 뻥튀기한 벤치마크 결과로 마케팅을 했습니다.

그리고선 12, 13세대 CPU 제품군에서 AVX-512 제공을 중단합니다.
AVX-512가 있어서 더 좋은 CPU라면, 아니 계속 제공을 했어야죠?
인텔의 결정은 AVX-512가 계륵을 넘어 없는 게 낫다는 자백이나 마찬가지입니다.
게다가 AVX-512가 제공하는 명령어 중 하나를 이용하고 있는 [다운폴 보안 취약점]이 드러났으므로, AVX-512에 대한 세간의 인식은 더욱 나빠질 것으로 보입니다.

…AVX-512가 일부 앱에서 더 빠르다는 것도 별 의미는 없습니다.
GPU(CUDA)를 이용하는 것이 대세로 자리잡았기 때문입니다.
nVIDIA가 괜히 잘 나가는게 아닙니다.
CPU를 이용한 대규모 벡터, 부동소수점 연산은 CPU만 덜렁 달려있는 경우 아니고서는 쓸모가 없습니다.
CUDA는 nVIDIA의 싸구려 보급형 GPU(이를테면 RTX 3060)에서도 지원하기 때문에 접근성도 높습니다.
저렴한 GPU 하나만 달아줘도 CPU로 10분 걸릴 계산이 1분이 되는 경험을 할 수 있습니다.
미래 컴퓨팅 산업의 대세인 AI 시장에서 인텔은 한참 뒤쳐져있습니다.
아주 손 놓고 있을 수는 없으니 AVX-512 같은 걸 넣어 생색을 내려 했을 수 있죠.
부랴부랴 ARC GPU를 내놓은 것은 이런 상황과 무관하지 않을 겁니다.


AVX-512 파편화 문제

…그런데 AVX-512를 AMD Zen 4부터 제공하기 시작 했습니다.
그러면 Zen 4 CPU가 다운폴 보안 취약점의 영향을 받는 거 아닐까요?
이 부분을 이해하기 위해서는, AVX-512 명령어 세트가 파편화되어 있다는 점을 이해 해야 합니다.

2019년 기준, AVX-512 파편화를 도식화.
다른 회사들 합친 것도 아니고 인텔 CPU에서만 이렇습니다.

2019년까지의(=다운폴 보안 취약점의 영향을 받는) 인텔 CPU AVX-512 지원 상황이 위 그림과 같습니다.
인텔 CPU들이 지원하는 AVX-512 명령어들이 제각각입니다.
자본주의 사회에서 기업의 지상목적은 이윤 창출이고, 이를 위해 일부러 제품간 성능에 차이를 둡니다.
이러면 더 고급 기능이 필요한 소비자는 어쩔 수 없이 더 비싼 CPU를 사야하죠.
그래서인지는 몰라도 세부 AVX-512 명령어 세트 지원 여부가 CPU마다 다릅니다.
기본적인 AVX512F는 모든 CPU 그룹이 지원하지만, 4FMAPS는 인텔의 AI용 빅칩 나이츠 밀(제온 파이 3세대. 대실패 후 단종. GPU 기술에서 뒤쳐진 인텔이 AI 시장에 대응하기 위해 만든 괴상한 CPU. 물론 병렬 연산 성능이 높아 다른 용도로도 쓸 수 있습니다만, 그럴바에야 GPU를 쓰지…)에서만 제공된다는 걸 알 수 있습니다.

여러분이 소프트웨어 만드는 사람이라고 가정 해 봅시다.
더 높은 성능을 위해 AVX-512를 도입하기로 합니다.
그런데 기술 문서를 살펴보니 CPU 마다마다 지원하는 명령어가 있고, 지원하지 않는 명령어가 있으며, 이 마저도 통일성이 없고 중구난방이라면…
결국 AVX-512 지원을 포기하는 것이 가장 합리적 선택입니다.
인텔이 저지른, 저지르고 있는 바보 짓이 한두개가 아니지만, “고통스러운 죽음”을 원하는 사람마저 나올 정도로 AVX-512는 답이 없는 상황입니다.

그러면 AMD가 Zen 4 CPU에서 넣은 AVX-512는 무엇인가?
AMD 쪽은 제가 자세히 몰라서 뭐라 말 하기 어렵지만, 일단 추측하기로는…
AMD에서 도입한 AVX-512는 256bit로 쪼개서 작동하는 식이라고 합니다.
인텔 것과 작동 방식이 다른, AVX-512의 변종 중 하나라고 해야 할 것 같습니다.
그래서 구조 자체가 다르기도 하고, 단순히 AVX-512가 들어갔다고 해서 무조건 다운폴 취약점에 해당하는 것은 아니므로, AMD CPU는 다운폴 취약점에서는 안전합니다.

그리고 AMD Zen 4 CPU의 경우 서버/워크스테이션용 EPIC과 소비자용 Ryzen(7000 시리즈)의 기본 설계는 동일하다고 합니다.
아마 서버용 EPIC을 설계 하면서 Ryzen도 동시 진행 했을 것이고, 같은 구조로 인해 서버에 있는 AVX-512가 그대로 일반 소비자용 Ryzen에도 들어간 것이 아닐까 싶습니다.
어떤 서버들은 물리적 공간이 부족하다든지 해서 GPU를 장착 할 수 없는데, 이런 경우 CPU의 AVX-512 지원이 필요 할 수도 있습니다.
설계 비용이 줄어드는 효과도 있고, 인텔이 했던 것 마냥 마케팅에 도움이 되는 부분도 있을 겁니다.
물론 일반 소비자가 AVX-512로 얻을 수 있는 실익이 거의 없다는 것은 AMD라 하더라도 변하지 않습니다.


지금까지 아주 간단히 AVX-512에 대해 알아봤습니다.
대세로 자리잡은 AI는 이제 GPU가 모두 가져가고 있는 상황이라, AVX-512는 앞으로도 설 자리가 없습니다.
범용성도 없고 파편화도 심해 소프트웨어 업체들도 외면하고 있고요.
AVX-512가 있으니 더 좋다! 같은 소리에 현혹되는 사람들이 더이상 없기를 바랍니다.


Leave a Reply

Your email address will not be published. Required fields are marked *