Rust 기반 AV1 디코더 성능 최적화: 불필요한 0 초기화 및 구조체 비교 최적화

2025-05-22
Rust 기반 AV1 디코더 성능 최적화: 불필요한 0 초기화 및 구조체 비교 최적화

Rust 기반 AV1 디코더인 rav1d와 C 기반 AV1 디코더인 dav1d의 성능을 비교하여 샘플링 프로파일러를 사용하여 두 가지 성능 병목 현상을 발견했습니다. 첫 번째는 ARM 아키텍처에서 rav1d의 불필요한 버퍼 0 초기화로 인한 성능 저하였습니다. 두 번째는 rav1d의 구조체 비교 구현의 비효율성이었습니다. `MaybeUninit`을 사용하여 불필요한 0 초기화를 피하고 구조체 비교를 최적화함으로써 rav1d의 성능을 거의 2% 향상시켰습니다.

더 보기
개발

Rust가 Python의 동적 기능을 배우다: Serde를 사용한 리플렉션

2025-05-15
Rust가 Python의 동적 기능을 배우다: Serde를 사용한 리플렉션

이 글에서는 저자가 Rust와 Serde 라이브러리를 사용하여 Python의 동적 속성 접근(__getattr__) 메커니즘을 모방하여 시스템 정보에 접근하기 위한 깔끔하고 사용자 친화적인 API를 만드는 방법을 자세히 설명합니다. 이 글에서는 사용자 정의 트레잇, Deserializer, Visitor 구현과 코드를 단순화하기 위한 Serde의 derive(Deserialize) 기능 활용 방법을 철저히 설명합니다. 최종적으로 저자는 Python과 유사한 간결한 API를 구현하는 효율적이고 사용자 친화적인 Rust 라이브러리를 성공적으로 구축했으며, 대안적인 접근 방식과 트레이드오프에 대해 논의합니다.

더 보기
개발

나의 정신을 거의 붕괴시킨 미친 __init__ 메서드

2025-04-19
나의 정신을 거의 붕괴시킨 미친 __init__ 메서드

Python 서비스 테스트가 간헐적으로 실패한 원인이 된 기이한 __init__ 메서드에 대한 이야기입니다. FooBarWidget 클래스는 __init__ 메서드 내부에서 부모 클래스인 FooWidget의 __init__ 메서드와 run 메서드를 실행하기 위해 새로운 스레드를 시작합니다. 이 설계는 zmq.Socket 객체를 스레드 간에 이동할 수 없기 때문에 메인 스레드의 블로킹을 방지하려는 시도입니다. 하지만 FooBarWidget 인스턴스를 너무 빨리 닫으면 FooWidget의 __init__이 완료되지 않아 'should_exit' 속성이 누락되고 에러가 발생할 수 있습니다. 이 유머러스한 글은 디버깅 경험을 자세히 설명하고 이 파격적인 설계의 이면에 있는 논리를 탐구합니다.

더 보기
개발