Optimisation d'un décodeur AV1 Rust : éviter les zéros inutiles et optimiser les comparaisons de structures

2025-05-22
Optimisation d'un décodeur AV1 Rust : éviter les zéros inutiles et optimiser les comparaisons de structures

En comparant les performances du décodeur AV1 basé sur Rust, rav1d, et celui basé sur C, dav1d, l'auteur, utilisant un profileur d'échantillonnage, a identifié deux goulots d'étranglement de performance. Le premier était le zéro inutile d'une mémoire tampon dans rav1d sur l'architecture ARM, entraînant une dégradation des performances. Le second était une implémentation inefficace des comparaisons de structures dans rav1d. En utilisant `MaybeUninit` pour éviter les zéros inutiles et en optimisant les comparaisons de structures, l'auteur a amélioré les performances de rav1d de près de 2%.

Lire plus
Développement Décodeur AV1

Rust s'inspire des capacités dynamiques de Python : Réflexion avec Serde

2025-05-15
Rust s'inspire des capacités dynamiques de Python : Réflexion avec Serde

Cet article détaille comment l'auteur a utilisé Rust et la bibliothèque Serde pour imiter le mécanisme d'accès aux attributs dynamiques de Python (__getattr__), créant une API propre et conviviale pour accéder aux informations système. L'article explique minutieusement le processus d'implémentation, y compris les implémentations personnalisées de trait, Deserializer et Visitor, et comment tirer parti de la fonctionnalité derive(Deserialize) de Serde pour simplifier le code. En fin de compte, l'auteur a réussi à créer une bibliothèque Rust efficace et conviviale qui obtient une API concise similaire à celle de Python, et discute des approches alternatives et des compromis.

Lire plus
Développement

La méthode __init__ insensée qui a failli me rendre fou

2025-04-19
La méthode __init__ insensée qui a failli me rendre fou

Un test de service Python échouait de manière intermittente en raison d'une méthode __init__ bizarre. La classe FooBarWidget, dans son __init__, lance un nouveau thread pour exécuter les méthodes __init__ et run de sa classe parente FooWidget. Cette conception tente d'éviter le blocage du thread principal car les objets zmq.Socket ne peuvent pas être déplacés entre les threads. Cependant, fermer une instance FooBarWidget trop tôt peut laisser le __init__ de FooWidget inachevé, entraînant un attribut 'should_exit' manquant et une erreur. Ce récit humoristique détaille l'expérience de débogage et explore la logique derrière cette conception non conventionnelle.

Lire plus
Développement