C#로 다시 쓴 VLC 블러 필터, 최적화 끝에 C와 맞붙다

C vs. C#: racing VLC's Gaussian blur

C#로 다시 쓴 VLC 블러 필터, 최적화 끝에 C와 맞붙다

VLC의 Gaussian blur 필터를 C#으로 한 줄씩 그대로 옮겨 같은 프레임에서 C와 성능을 비교했다. 첫 포팅은 프레임당 약 23% 느렸는데, GC나 경계 검사가 아니라 RyuJIT가 루프를 덜 효율적으로 생성한 탓이었다. 루프 경계를 미리 계산하고 nint를 쓰자 격차가 8%로 줄었고, 알고리즘 최적화와 AVX2 SIMD까지 적용한 최종 단계에서는 sigma 4에서 C 240fps, C# 236fps로 사실상 동등해졌다. 두 버전 모두 기존 VLC 코드보다 30배 빠르다.

이 작업의 일부는 .NET이 clang이 기본으로 내놓는 코드를 내놓도록 C#을 다시 쓰는 일이었다. 여기서 C#을 고르는 진짜 비용은 컴파일러가 당신의 루프를 어떻게 처리하는지 알아야 한다는 점이다.

이 날의 다른 글

2026-10-24