← 최신 논문
💻 computer science

85.30 GFLOPS Single-Core FP32 Matrix Multiplication on AMD Zen 3: A Systematic Study of Cache Blocking, Register Blocking, FMA Chaining, and On-the-Fly Packing

이 논문은 캐시/레지스터 블로킹, FMA 체이닝, 온더플라이 패킹의 28가지 서로 다른 구성을 평가함으로써 단일 코어 FP32 행렬 곱셈에서 85.30 GFLOPS를 달 achievement하는 AMD Zen 3 마이크로아키텍처에 대한 체계적인 최적화 연구를 제시하며, 궁극적으로 이론적 최대 성능의 63.5%에 도달하는 챔피언 설계를 식별하고 향후 최적화를 위한 예측 모델을 도입한다.

원저자: Lucas Lima Freitag

게시일 2026-07-15
📖 4 분 읽기☕ 가벼운 읽기

원저자: Lucas Lima Freitag

원본 논문은 CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기

당신은 거대한 창고의 한쪽에서 다른 쪽으로 엄청난 양의 모래(데이터)를 옮기려 한다고 상상해 보세요. 하지만 당신은 아주 작고 빠른 로봇 팔(프로세서)만을 사용하여 이 일을 수행해야 합니다. 목표는 이 모래를 특수한 공식(행렬 곱셈)과 함께 최대한 빠르게 섞는 것입니다. 이 논문은 루카스(Lucas)라는 한 연구자가 특정 유형의 컴퓨터 칩인 AMD Zen 3에서 그 로봇 팔을 인간이 할 수 있는 한 가장 빠르게 움직이게 하려고 노력한 상세한 기록부입니다.

큰 목표: 얼마나 빨라야 빠른 것인가?

로봇 팔의 이론적 최고 속도는 134.4 GFLOPS(초당 134.4십억 번의 수학 연산)입니다. 이것을 고속도로의 제한 속도라고 생각하세요. 루카스는 새로운 차를 만드는 대신, 단순히 엔진을 튜닝하는 것만으로 이 속도 제한에 얼마나 가까워질 수 있는지 알고 싶었습니다.

28가지의 서로 다른 주행 전략을 테스트한 결과, 그는 (MX24라고 불리는) "챔피언" 설정을 찾아냈으며, 이는 85.30 GFLOPS를 기록했습니다. 이는 최대 속도의 약 **63.5%**에 해당합니다. 완벽한 100%는 아니지만, 단 1.51 GFLOPS로 느릿하고 서툴게 움직이던 시작점에서는 엄청난 도약입니다. 실제로 그의 최선책은 기본적이고 최적화되지 않은 버전보다 57배 더 빨랐습니다.

승리 전략: "4-행, 체인-4"의 춤

이 속도를 얻기 위해 루카스는 모래와 로봇의 움직임을 어떻게 조직할지 결정해야 했습니다. 그가 발견한 핵심 동작들은 다음과 같습니다.

1. "온더플라이(On-the-Fly)" 패킹 기술
모래가 격자 형태로 저장되어 있어서 다음 알갱이를 잡기 위해 대각선으로 걸어가야 한다고 상상해 보세요. 그것은 느리고 힘든 일입니다. 루카스는 로봇이 필요로 하기 직전에 모래의 작은 덩어리를 깔끔하고 직선적인 줄로 복사하는 것(온더플라이 패킹)이 마법 같은 움직임이라는 것을 발견했습니다. 이것은 마치 조력자가 로봇이 비틀거리지 않고 연속해서 집을 수 있도록, 로봇이 필요로 하기 전에 미리 달려가 벽돌을 완벽한 줄로 쌓아두는 것과 같습니다. 이 방식은 기존의 방식(그냥 있는 그대로 집는 방식)보다 나았으며, 창고 전체를 미리 재배치하는 것보다도 더 효과적이었습니다.

2. "4-행" 쌓기
로봇은 작업하는 동안 모래를 잡을 수 있는 한정된 수의 손(레지스터)을 가지고 있습니다. 루카스는 모래를 2줄, 4줄, 8줄씩 잡는 실험을 했습니다.

  • 2줄: 너무 적습니다. 로봇이 새 모래를 가져오기 위해 너무 자주 멈춰야 했습니다.
  • 8줄: 너무 많습니다! 로봇의 손이 너무 가득 차서 모래를 바닥(메모리)에 떨어뜨리고 다시 줍는 일이 끊이지 않았습니다. 이는 재앙이었습니다.
  • 4줄: 최적의 지점(Sweet spot)입니다. 비록 로봇이 모래를 몇 번 떨어뜨리고 다시 줍는 과정("스필링", spilling)을 거쳐야 했지만, 한 번에 더 많은 모래를 처리할 수 있었기에 그 추가 작업은 충분히 가치가 있었습니다. 이 단 하나의 변화가 로봇을 2-행 방식보다 59% 더 빠르게 만들었습니다.

3. "체인-4" 리듬
로봇 팔은 동일한 모래 조각에 대해 다음 수학 연산을 시작하기 전, 한 번의 연산을 마치는 데 4초(사이클)가 걸립니다. 만약 로봇이 한 번의 움직임만 하고 기다린다면, 3초 동안 아무것도 하지 못하고 놀게 될 것입니다.
루카스는 로봇이 손에 4개의 서로 다른 모래 더미를 들고 루프(loop)를 돌며 작업하게 하면 로봇의 팔을 계속 움직이게 할 수 있다는 것을 발견했습니다. 한 더미가 "익어가는" 동안, 로봇은 다른 더미들을 작업합니다. 이것은 로봇의 4초 조리 시간과 완벽하게 맞아떨어져 엔진이 풀 스피드로 돌아가게 유지해주었습니다.

무엇이 실패했는가 ( "하지 말아야 할 것" 목록)

때로는 당신이 옳다고 생각하는 것이 오히려 상황을 악화시키기도 합니다. 루카스는 몇 가지 인기 있는 아이디어들을 테스트했고, 이 특정 로봇에게는 형편없다는 것을 발견했습니다.

  • "프리페치(Pre-fetch)"의 실수: 사람들은 흔-히 로봇에게 다음 모래 알갱이가 필요하기 전에 미리 "앞을 내다보고" 잡으라고 지시합니다. 루카스는 이것을 시도했지만, 로봇의 내장된 눈은 이미 패턴을 보는 능력이 매우 뛰어나서 추가적인 "앞을 내다보는" 명령들이 오히려 방해가 되었습니다. 이로 인해 로봇의 속도가 약 8% 느려졌습니다.
  • "논-템포럴(Non-Temporal)" 덤프: 로봇에게 모래를 빈 통에 넣지 않고 바로 바닥에 쏟아버리라고 지시하는 기술이 있습니다. 이것은 쓰레기를 버릴 때는 아주 유용합니다. 하지만 여기서 로봇은 모래를 섞어야 하며, 이는 곧 모래를 다시 집어 들어야 함을 의미합니다. 직접 쏟아버리는 방식은 로봇이 자신의 발에 걸려 넘어지게 만들었고, 속도를 1.24 GFLOPS라는 형편없는 수준으로 떨어뜨렸습니다.
  • "8-행" 과부하: 언급했듯이, 8줄의 모래를 잡으려고 시도하면 로봇이 모래를 떨어뜨리는 데 너무 많은 시간을 소비하여, 모래를 옮기는 시간보다 줍는 데 더 많은 시간을 쓰게 됩니다.

얼마나 확신할 수 있는가?

이 논문의 수치들은 단순히 추측한 것이 아니라 측정된 것이기에 매우 신뢰할 수 있습니다. 루카스는 각 전략에 대해 코드를 15번 실행했고, 이상한 컴퓨터 오류를 피하기 위해 가장 빠르거나 느린 실행 결과는 제외한 뒤 나머지를 평균 냈습니다. 또한, 빠른 버전이 속임수를 쓰지 않았는지 확인하기 위해 단순하고 느린 버전과 수학적으로 대조했습니다.

그는 또한 실제 실행 전 전략의 속도를 예측할 수 있는 일종의 수정구슬 같은 수학적 "프리-필터(pre-filter)" 모델을 구축했습니다. 이 수정구슬은 꽤 성능이 좋아서 대부분의 전략에 대해 실제 속도와 11.3% 이내의 오차를 보였습니다. 이 모델은 다소 보수적인 경향이 있어, 최선의 전략을 78.1 GFLOPS로 예측했지만, 실제로 실행했을 때 결과는 85.30 GFLOPS에 도달했습니다.

결론

이 논문은 놀라운 속도를 얻기 위해 반드시 "어셈블리 언어"(로봇의 모국어)로 코드를 짜는 마법사가 될 필요는 없다는 것을 증명합니다. 표준 도구(C++ intrinsics)를 사용하고, "춤 동작"(블로킹, 체이닝, 패킹)을 세심하게 조정함으로써, 당신의 컴퓨터를 이론적 최대 속도의 **63.5%**까지 달리게 할 수 있습니다.

핵aries 핵심 교훈은 이것입니다. 추측하지 마세요. 한 종류의 로봇(또는 컴퓨터 칩)에 효과적인 방법이 다른 로봇에게는 망가지는 결과를 초래할 수 있습니다. 루카스는 28가지의 조합을 테스트하여 작동하는 방식을 찾아냈으며, 이는 때때로 "당연해 보이는" 기술들(예: 앞을 내다보거나 직접 쏟아버리는 것)이 사실은 잘못된 움직임일 수 있음을 보여줍니다.

연구 분야의 논문에 파묻히고 계신가요?

연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.

Digest 사용해 보기 →