순서를 보장하려고 넣은 4,000µs 대기가 시간의 절반이 됐다

실제 시스톨릭 배열은 데이터를 한 클럭씩 어긋나게 넣는다. 그걸 구현하기 어려워 고정 대기로 바꿨고, 그 대가가 임계 경로의 49.5%였다.

2026-08-14 회고 관련 프로젝트: 폰 노이만 병목과 시스톨릭 배열 →

#시스톨릭배열#설계타협#회고

엔지니어링에서 단순화는 공짜가 아니다. 이 프로젝트에서 가장 비싼 값을 치른 단순화는 스큐(skew) 구현이었다.

스큐가 뭔가

시스톨릭 배열에서 데이터는 모든 PE에 동시에 들어가지 않는다. 격자 안쪽으로 갈수록 값이 조금씩 늦게 도착하도록 시간차를 두고 밀어 넣는다. 이 시간차가 스큐skew. 행이나 열마다 입력을 한 클럭씩 어긋나게 투입하는 방식. 이웃 PE에서 넘어온 값과 자기 입력이 같은 클럭에 맞물리도록 만든다.다. 이 타이밍이 맞아야 어떤 PE든 자기 차례에 필요한 두 값을 정확히 받아서 MAC을 돌릴 수 있다.

우리가 한 것

한 클럭씩 어긋나게 연속으로 투입하는 방식은 보드 다섯 대를 GPIO로 이은 이 환경에서 구현하기 어려웠다. 그래서 훨씬 단순한 방식으로 바꿨다. 각 시간 단계 k마다 PE(0,0)이 자기 MAC을 돌린 뒤 A[0][k]와 B[k][1]을 오른쪽으로 보내고, 일정 시간을 기다린 다음 B[k][0]과 A[1][k]를 아래쪽으로 보낸다.

대기 시간은 4,000 µs로 잡았다. PE(0,1)이 데이터를 받아서 PE(1,1)로 전달을 끝내는 데 필요한 시간을 충분히 보장하기 위한 값이다. 이 대기가 있으면 PE(1,1)이 두 방향에서 오는 신호를 폴링 없이 정해진 순서로 받을 수 있다. 수신 순서가 시간으로 보장되니 정합성 문제는 사라졌다.

계산서

문제는 그 값을 대가로 무엇을 냈느냐다. K가 1 늘 때마다 격자가 추가로 쓰는 시간 8,081.1 µs를 뜯어보면 이렇다.

통신     4,000 µs   49.5%
스큐 대기 4,000 µs   49.5%
연산 등     81 µs    1.0%

임계 경로의 49.5%가 스큐 대기다. 이 시간에는 연산이 전혀 일어나지 않는다. 통신과 대기를 빼면 실제 계산에 쓰인 시간은 전체의 1.0%뿐이었다.

무엇이 아쉬운가

4,000 µs는 수신 순서를 확실히 보장하려고 잡은 값이다. 대기를 늘리면 순서는 안전해지지만 그만큼 느려진다. 이 값은 정합성과 속도를 맞바꾸는 다이얼이고, 우리는 정합성 쪽에 맞춰 뒀다.

이 단순화 때문에 격자의 처리 시간은 원리적인 시스톨릭 배열보다 더 나쁘게 나왔다. 그래서 이 실험의 300배 넘는 격차는 시스톨릭 배열 일반의 성능이 아니라, 이 구현의 성능으로 읽어야 한다. 보고서에서도 이 점을 한계로 적었다.

전체 결과와 해석은 프로젝트 페이지에서 볼 수 있다.