기타 Hacker News · 2026-10-24

"C#이 C 언어를 따라잡는다고?" VLC 블러 필터로 맞붙여본 속도 대결

핵심 요약
  • 개발자가 VLC 4의 가우시안 블러 필터 코드를 .NET Native AOT 기반 C#으로 1:1 포팅해 속도를 비교했습니다.
  • 초기 1:1 코드에서는 C 언어가 약 23% 빨랐으나, 컴파일러 특성을 고려한 간단한 코드 최적화 후 격차가 8% 이내로 좁혀졌습니다.
  • 특정 블러 강도에서는 C#이 기존 C 언어 버전보다 오히려 빠르게 측정되는 결과가 나왔습니다.
요약 오픈소스 동영상 플레이어 VLC의 핵심 필터 기능을 C#으로 구현했을 때 C 언어와 어느 정도의 성능 차이가 나는지 직접 맞붙여본 벤치마크 결과가 화제입니다. VLC는 기본적으로 C 언어로 작성되었으며 비디오 필터는 매 프레임마다 모든 픽셀을 연산해야 하는 극도의 고부하 작업입니다. 개발자 마틴 핑켈은 최신 .NET Native AOT 기술을 사용해 VLC 4용 네이티브 플러그인을 C#으로 작성하고, 기존 VLC의 가우시안 블러(Gaussian blur) 필터 코드를 1:1로 포팅해 동일한 환경과 동일한 1080p 영상에서 바이트 단위까지 완벽히 일치하는 출력을 내도록 설정해 속도를 측정했습니다. C# 구현부는 프레임당 힙 메모리를 전혀 할당하지 않아 GC(가비지 컬렉터)로 인한 지연을 사전에 차단했습니다. 첫 번째 라운드에서 단순 1:1 라인 바이 라인 코드로 대결했을 때는 C 언어 구현체가 프레임당 약 23% 더 빠른 성능을 보이며 예상대로 승리했습니다. 생성된 머신 코드를 분석한 결과, Clang 컴파일러는 루프 경계를 한 번만 계산하고 누적합을 레지스터에 보관한 반면, .NET의 RyuJIT는 매 단계 루프 종료 조건을 재계산하고 값을 메모리에 보관하는 등 추가적인 부하가 발생했기 때문이었습니다. 하지만 개발자가 루프 경계 조건을 변수에 미리 계산해 올리고 인덱스를 nint로 변경하는 두 가지 간단한 수정만 가하자 결과는 급변했습니다. C# 버전이 C 언어와의 격차를 8% 이내로 좁혔으며, 특정 블러 강도(sigma 4)에서는 오히려 기존 VLC C 코드를 앞서는 결과가 나왔습니다. 컴파일러 최적화 차이로 벌어졌던 격차를 몇 줄의 코드 정리로 메꿀 수 있음을 입증하며 개발자 커뮤니티에서 큰 관심을 끌고 있습니다.
Sponsored · 광고