비교 실험에서 제일 먼저 흔들리는 건 측정 구간이다. 한쪽은 계산만 재고 다른 쪽은 준비 시간까지 재면, 결과가 어떻게 나오든 의미가 없다. 우리 실험은 보드 한 대짜리 대조군과 보드 네 대짜리 격자를 비교하는 구조라 이 문제가 더 컸다.
- 측정 구간 정의
- 대조군: micros() 두 번
- 실험군: D6 신호 기준
- 같은 구간을 비교
구간부터 정했다
측정 구간은 첫 번째 MAC 연산이 시작되는 시점부터 마지막 MAC 연산이 끝나는 시점까지로 정의했다. 데이터를 준비하는 시간이나 결과를 LCD에 찍는 시간은 두 구조 모두 구간 밖이다.
대조군은 간단하다
보드가 한 대라 3중 반복문 진입 직전과 완료 직후에 micros()로 시각을 기록하면 끝이다.
실험군이 문제였다
보드가 네 대면 시계도 네 개다. 각 보드의 micros() 값은 서로 기준이 다르므로 그대로 빼면 안 된다. 그래서 신호선 하나로 기준점을 통일했다.
- PE(0,0)이 첫 MAC 연산을 시작하기 직전에 D6 핀을 HIGH로 올린다.
- PE(1,1)이 그 신호를 감지한 순간을 시작 시각으로 기록한다.
- PE(1,1)은 매 MAC 연산을 끝낼 때마다 종료 시각을 갱신한다.
- 모든 연산이 끝나면 마지막으로 갱신된 값이 종료 시각으로 남는다.
시작 기준은 D6 신호 하나이고, 시간을 재는 시계는 PE(1,1)의 것 하나뿐이다. 서로 다른 보드의 시계를 비교할 일이 없다.
종료 신호를 따로 쓰지 않은 이유
종료 시각을 “다 끝났다”는 별도 신호로 잡을 수도 있었다. 하지만 그렇게 하면 종료 신호가 격자 전체로 전파되는 시간이 측정에 섞여 들어간다. 대조군에는 그런 전파 과정이 없으니 불공정한 비교가 된다. 마지막 MAC이 끝난 시점을 계속 덮어쓰는 방식이면 그 전파 시간이 빠지고, 대조군과 같은 구간을 재게 된다.
"같은 구간을 잰다"는 건 같은 함수를 부른다는 뜻이 아니다. 두 구조에서 각자 다른 방법을 써서라도, 잰 구간의 시작과 끝이 같은 사건이 되도록 맞추는 것이다.
재현성은 어땠나
각 조건마다 PE(0,0)의 리셋 버튼을 눌러 실험을 시작하고, 5회 이상 반복 측정해 평균과 표준편차를 냈다.
| 조건 | 평균 (µs) | 표준편차 |
|---|---|---|
| 단일 K=2 | 52.0 | 0.00 |
| 단일 K=8 | 208.0 | 0.00 |
| 격자 K=2 | 16,972.4 | 8.29 |
| 격자 K=8 | 65,464.0 | 4.00 |
단일 보드는 다섯 번 모두 같은 값이 나왔다. 격자도 표준편차가 최대 8.29 µs로 평균의 0.05% 수준이다. 측정 방법이 흔들리지 않는다는 뜻이고, 이후에 나오는 300배 넘는 격차가 측정 오차가 아니라는 근거가 된다.
측정한 값이 어떤 의미인지는 프로젝트 페이지의 결과 절에서 이어진다.