aboutsummaryrefslogtreecommitdiffstats
path: root/docs/design/023-optimizing-tier.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/design/023-optimizing-tier.md')
-rw-r--r--docs/design/023-optimizing-tier.md7
1 files changed, 7 insertions, 0 deletions
diff --git a/docs/design/023-optimizing-tier.md b/docs/design/023-optimizing-tier.md
index 78a4591..6a4c23d 100644
--- a/docs/design/023-optimizing-tier.md
+++ b/docs/design/023-optimizing-tier.md
@@ -141,6 +141,13 @@ roots와 BFS만 기계어로 돈다. 나머지는 JIT의 값 모형이 거르거
- SSA의 선형 스캔 할당(정수, 실수 둘). 루프 깊이로 값의 무게를 정한다. 넘치면 프레임의 슬롯.
- 022의 기계어 조각(태그 붙은 열 주소, 장부, 줄 밖 길, `pure_run_rest`)은 계층의 하위 단계로 쓴다.
- 컴파일은 블록이 처음 돌 때 한다(지금처럼). 그 값은 재서 밝힌다.
+- **잰 것: 행렬곱 안쪽 루프의 꼴**(`research/experiments/040-against-c/forms.c`, 2026-10-05, 11번의 중앙값). 계층이 낸 꼴
+ (위치를 곱셈과 덧셈으로, 곱과 합을 2^53 아래로 검사, 적재마다 꽉 찬 리스트의 비트를 봄) 20.7 ms, 검사와 비트를 빼도 20.1, 각 열의
+ 포인터를 보폭만큼 옮기면(곱하기-더하기 하나로 합) 13.1, 곱과 더하기를 나누면(합의 사슬이 더하기 하나) 10.0, 거기에 두 검사를 넣으면
+ 10.2, 적재 앞에 비트를 보면 13.4. 위치의 곱셈이 2배, 곱하기-더하기의 사슬이 1.3배, 적재 앞의 분기가 1.34배이고, 오버플로 검사는
+ 거의 공짜다. 그래서 순서는 **포인터 귀납 변수**(아핀 키의 칸 주소를 루프의 φ로) 다음에, 그래도 비트의 분기가 남으면 **꽉 찬
+ 경우의 사본**(키로만 찾는 리스트가 모두 꽉 찬 DENSE일 때의 루프 본문을 하나 더 내고 루프를 열 때 고른다). 같은 배열을 정적으로
+ 둔 C는 3.8 ms(바깥 루프를 벡터로 묶는다), `natural.h`의 C는 7.5.
### 6. 표현 (바닥이 가정한 것)