루프라인 모델(연산강도·성능 상한) 계산기
커널의 연산강도(FLOP/byte)와 기계의 최대 연산성능·메모리 대역폭으로 달성 가능한 성능 상한을 구합니다. 능선점을 기준으로 메모리에 막혔는지 연산에 막혔는지 가려 주므로 무엇을 고쳐야 할지가 분명해집니다.
사양의 이론값 대비 실제로 나오는 비율. 60~80%가 보통입니다.
연산에 막혀 있습니다
10,000 GFLOP/s
연산강도 170.6667 FLOP/byte · 능선점 12.5 · 최대 성능의 100%
루프라인
무엇을 고쳐야 하나
연산강도는 재사용의 다른 이름이다
| 커널 | 연산강도 (fp32) | 막히는 곳 |
|---|---|---|
| 벡터 합 c = a + b | 0.0833 | 메모리 |
| SAXPY y = αx + y | 0.1667 | 메모리 |
| 내적 Σ aᵢbᵢ | 0.25 | 메모리 |
| 합계 Σ aᵢ | 0.25 | 메모리 |
| 2차원 5점 스텐실 | 0.625 | 메모리 |
| 밀집 행렬곱 n×n | 170.6667 | 연산 |
| 전치 B = Aᵀ | 0 | 메모리 |
사용 방법
- 1커널을 고르거나 연산 횟수와 옮긴 바이트를 직접 넣습니다.
- 2쓰는 기계의 최대 연산성능(GFLOP/s)과 메모리 대역폭(GB/s)을 넣습니다.
- 3대역폭 실측 효율을 넣으면 천장이 현실에 가까워집니다. 60~80%가 보통입니다.
- 4그림에서 점이 능선점의 왼쪽인지 오른쪽인지 봅니다.
- 5«무엇을 고쳐야 하나»에서 연산과 메모리 각각의 소요 시간을 견줍니다.
자주 묻는 질문
메모리에서 가져온 바이트 하나당 몇 번 연산하는가입니다. I = 연산 횟수 ÷ 옮긴 바이트 수이며 단위는 FLOP/byte입니다. 메모리를 초당 B 바이트 가져올 수 있으면 연산은 초당 최대 B×I번이므로, 이 값이 성능 상한을 정합니다.
메모리가 정하는 빗변과 연산기가 정하는 천장이 만나는 지점으로, I* = 최대 연산성능 ÷ 대역폭입니다. 연산강도가 이보다 작으면 메모리에, 크면 연산에 막힙니다. 기계마다 다른 값이며 최근 가속기일수록 연산성능이 대역폭보다 빨리 늘어 능선점이 오른쪽으로 밀려 왔습니다.
연산기가 데이터를 기다리느라 놀고 있다는 뜻입니다. 이때는 연산기를 두 배 빠르게 해도 시간이 전혀 줄지 않습니다. 대신 데이터를 덜 옮기는 쪽이 답입니다 — 여러 연산을 한 번의 읽기로 묶기(융합), 타일링으로 재사용 늘리기, 자료형을 좁히기. 자료형을 32비트에서 16비트로 바꾸면 연산강도가 그대로 두 배가 됩니다.
데이터 하나를 여러 번 재사용하기 때문입니다. n×n 행렬곱은 연산이 2n³인데 옮기는 것은 행렬 세 개, 곧 3n²뿐이라 연산강도가 n에 비례해 커집니다. 벡터 합이나 SAXPY는 요소 하나를 한두 번 쓰고 버리므로 크기를 아무리 키워도 연산강도가 그대로입니다. 연산강도는 결국 재사용의 다른 이름입니다.
32비트 실수라면 1/12 ≈ 0.083입니다. 요소마다 더하기가 한 번인데 읽기 둘 쓰기 하나로 12바이트를 옮기기 때문입니다. 웬만한 기계의 능선점이 5~50 사이이므로 벡터 합은 언제나 메모리에 막히며, 최대 연산성능의 1%도 쓰지 못합니다.
사양에 적힌 대역폭은 이론값이고 실제로 나오는 값은 그보다 낮기 때문입니다. 접근 패턴과 메모리 컨트롤러 사정에 따라 이론값의 60~80% 정도가 보통이며, 천장을 이론값으로 잡으면 실제보다 낙관적인 그림이 됩니다. 정확히 알고 싶으면 대역폭 측정 프로그램으로 재신 값을 넣으십시오.
루프라인은 상한이라 여기 못 미치는 이유가 여럿 있습니다. 메모리 지연을 감추지 못했거나, 캐시가 서로 밀어내고 있거나, 분기나 동기화에 시간을 쓰고 있거나, 접근이 정렬되어 있지 않을 수 있습니다. 실측이 이 선의 절반에도 못 미친다면 병목이 연산도 대역폭도 아닌 다른 데 있다는 신호입니다.
자주 바뀌기 때문입니다. 굳혀 두면 몇 달 뒤 틀린 값을 계속 내보내게 되므로, 성능과 대역폭은 쓰시는 장비의 사양이나 실측값을 직접 넣도록 두었습니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지며 입력한 값은 이 기기에만 남습니다.
알아두면 좋은 점
- 커널의 연산강도는 «캐시에 아무것도 남지 않는다»고 보고 센 값입니다. 캐시가 잘 들으면 실제 연산강도는 이보다 높습니다.
- 루프라인은 달성 가능한 상한입니다. 실측이 이보다 낮은 이유는 이 모델에 담기지 않습니다.
- 연산성능과 대역폭은 직접 넣는 값입니다. 특정 제품의 수치나 가격은 담지 않았습니다.
- 전치처럼 연산이 하나도 없는 커널은 연산강도가 0이라 언제나 메모리에 막힙니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.