https://egorbo.com/peephole-optimizations.html
C#, C++, Performance
egorbo.com
ML compiler에서는 epilogue fusion, redundant reshape/transpose eliminationr같은 것도 peephole optimization이라고 부르는데, 도대체 난 그 이유를 모르겠다.
그냥 Optimization이라고 불러도 될 거 같다. 아무튼,
Epilogue fusion은 대강 말하자면
Cuda에서 matmul + addition + Relu같은 걸 커널 3개가 아니라 커널 1개로 런치하는 게 훨씬 싸고, 메모리도 적게 먹고, 그러니깐
어디에 matmul_bias_relu같은 구현체가 있다고 가정하고
```
Y = matmul(X, W)
Y = Y + b
Y = Relu(Y)
```
matmul, addition, relu 함수 3개를 dispatch해주는 게 아니라, matmul_bias_relu 하나를 디스패치해주는 걸 의미함.
따라서, dispatch하고 싶은 적절한 커널이 미리 존재하거나, 동적으로 생성할 수 있어야 함, 그리고 그게 fusion 이전보다 더 효율적인가?를 알아야 함.
Redundant reshape elimination은
```
A = tensor(10, 20)
B = A.reshape(10, 10, 2)
// do something with B
C = B.reshape(10, 20)
```
replace C = B.rehape(10, 2) with C = A.
머 이런 걸 말함.
Note:
사람이 보통 저런 코드를 짤 일은 잘 없을텐데
IR이란게 기계가 이리꼬고 저리꼬고 한다고 하니까 생각보다 저런 redundant pattern이 많이 생길 수 있다고 함.
이 댓글은 게시물 작성자가 삭제하였습니다.
Gpt로 컴파일러 작성하는데 도움 못받음 ?
https://en.m.wikipedia.org/wiki/Peephole_optimization
그냥
언어쪽 컴파일러 게이들이 쓰던 용어를 그대로 쓰는 것