https://egorbo.com/peephole-optimizations.html

Peephole optimizations in C and C# | Egor Bogatov — Developer at Microsoft

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이 많이 생길 수 있다고 함.