18 / 20 · 개념
부호·폭·경계 시험 설계
예제 하나의 성공을 넘어 연산·크기·제어의 경계를 조합합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
기능별로 작은 구별 입력 만들기
검증 입력은 무작정 큰 난수보다 어떤 오류를 구별하는지부터 설계합니다. 양수 2×2 예제는 스큐와 인덱스를 보기 좋지만 부호 확장·최솟값 곱·포화는 시험하지 않습니다. 모든 값이 1인 행렬은 카운터 확인에는 유용하지만 행과 열이 뒤바뀐 오류를 숨길 수 있습니다. 비대칭 행렬, 음수, 0, 서로 다른 행·열 값을 골고루 사용합니다.
A=[[2,−1],[0,3]], B=[[4,5],[−2,1]]의 정답은 [[10,9],[−6,3]]입니다. 양수·음수 결과와 유효 0을 함께 포함합니다. B를 단위행렬로 바꾸면 결과가 A와 같아야 하고, B를 모두 0으로 바꾸면 모든 출력은 0이지만 각 PE는 여전히 K항을 소비해야 합니다. 행렬 전치를 바꾸어 기대 값을 새로 계산하는 시험도 배선 실수를 찾습니다.
입력 범위 끝점
W=8, K=4에서 모든 항을 (−128,−128)로 하면 합은 65536입니다. 최소·최대 쌍 (−128,127)만 네 번 쓰면 각 곱 −16256, 합 −65024입니다. 최대·최대 (127,127) 네 번은 64516입니다. 세 경우 모두 AW=18에서 정확히 유지됩니다. 양수 최대만 시험하면 65536 경계가 빠지므로 최솟값×최솟값을 반드시 넣습니다.
교대 부호로 큰 항이 상쇄되는 경우도 추가합니다. A행 [−128,−128,127,127], B열 [−128,127,−128,127]이면 곱은 [16384,−16256,−16256,16129], 합은 1입니다. 마지막 값만 작다고 중간 누산 폭을 줄이면 안 됩니다. 각각의 prefix 합은 [16384,128,−16128,1]이며, 점수판에서 중간 범위도 확인할 수 있습니다.
크기와 제어 경계
N=1,K=1은 한 PE가 E0에서 결과를 내는 가장 작은 경우입니다. N=3,K=1은 각 PE가 한 항만 계산하지만 마지막 결과가 E4 뒤에 나오므로 전달 지연이 사라지지 않습니다. N=1,K=5는 스큐가 없는 긴 내적이며 E0..E4의 5개 계산 에지를 사용합니다. K=1,2,3,4처럼 거듭제곱 경계를 가로지르면 count와 k태그의 폭 오류를 찾기 좋습니다.
pause는 첫 MAC 전, 중간, 마지막 MAC 직전에 넣습니다. 결과 대기는 done 직후와 마지막 결과 전송에 적용합니다. reset은 clear 직후, 일부 항 소비 후, 결과가 valid지만 아직 미수신일 때 각각 시험합니다. reset 이후 오래된 job이 나타나면 실패입니다. 타일 시험은 N으로 나누어떨어지는 크기와 한 행·열만 남는 크기를 비교하고 결과 마스크를 좌표로 검사합니다.
통과 기준을 수치로 적기
각 정상 시험에는 기대 행렬, PE별 K항, 계산 advance 에지 수, 실제 pause 수, 전송된 출력 좌표 수를 적습니다. 음성 시험에는 기대 오류 종류를 적습니다. AW 안에서 정확한 누산을 시험한 로그와 8비트 포화 출력 로그를 합쳐 하나의 '정답'이라고 하지 않습니다. 양자화는 누산 이후 별도로 검사합니다. 알려진 경계 fixture를 고정하고 난수로 추가 탐색하면 실패를 재현하면서도 한 예제에 과하게 맞춘 구현을 피할 수 있습니다.
직접 생각해 보기
N=3,K=1에서 전체 완료 에지 번호와 개수를 구하세요. W=8,K=4의 최소×최대 네 항 합도 구하세요.
해설 보기
마지막 번호는 K+2N−3=1+6−3=4, E0..E4의 5개 에지입니다. 최소×최대 한 항은 −128×127=−16256, 네 항 합은 −65024입니다.