performances

Des chiffres avec leurs conditions.

Builds Release sur un Intel i7-6700 (Skylake, AVX2, 4 cœurs) : Windows x64 avec MSVC 19.51 et Linux x64 sous WSL2 avec GCC 15.2. Certaines mesures de référence plus anciennes ont été relevées avec MSVC 19.44 et GCC 13.3, et le README de chaque module indique son compilateur. Les chiffres sont des médianes ou le meilleur de plusieurs exécutions, comme l'indique chaque README. Quand deux valeurs sont indiquées, Windows vient en premier. Quand une seule est indiquée, la ligne précise la plateforme.

Débit

CRC32Ccompression · 256 KiB24.26 / 23.0GB/s · objectif 20
Encodage hexencoding · 64 KiB19.32 / 18.56GB/s · objectif 12
Décodage hexencoding · entrée de 64 KiB14.40 / 14.53GB/s · objectif 8
Recherche littéraleregex · 1 MB, en cache14.1 / 14.4GB/s · objectif 10
Décodage Base64encoding · entrée de 64 KiB13.93 / 12.71GB/s · objectif 6
Encodage Base64encoding · 64 KiB12.44 / 11.79GB/s · objectif 8
Décompression LZ4compression · 256 KiB de texte3.24 / 2.48GB/s · objectif 3, manqué sous Linux

Le trait blanc sur chaque barre marque l'objectif propre du module. Les décodeurs sont mesurés sur les octets d'entrée. Échelle : 25 GB/s.

Latence

OpérationModuleMesuré
Émettre un signal sans écouteurevent0.54 ns
Tick d'ordonnanceur à vide, horloge déjà luescheduler1.97 / 0.71 ns
Rechercher un message traduiti18n1.4 à 2.6 ns
Propriétés Unicode d'un point de codetext2.2 / 2.6 ns
Lecture de configuration par handleconfig3.52 ns
Incrémenter un compteur de télémétrietelemetry4.88 à 4.98 ns
Changement de fibre brut, Windowscoroutine16 à 18 ns
Lire l'horloge monotonetime18.75 / 22.00 ns
Armer un timer quand un million sont actifstime20 à 23 ns
Appel RPC unaire, transport nul, Windowsrpc617 à 714 ns
Ouvrir un stockage clé-valeur de 1 GB après une fermeture proprestorage1.49 / 0.92 ms

Face aux références

351×

Regex vs std::regex. 10× à 351× plus rapide que libstdc++ sur six motifs sur sept (8× sur le septième), 1.3× à 42× plus rapide que celle de MSVC, en temps linéaire. std::regex tourne sur 512 KB du même texte de 2 MB, et le résultat est mis à l'échelle.

5.4×

Formatage d'entiers vs snprintf. 5.4× plus rapide. Par ailleurs, le writer de terminal transforme 100,000 écritures d'un octet vers /dev/null en 25 appels write.

0.9633

Recherche vectorielle vs hnswlib 0.8. SIFT1M, un thread, Linux : recall@10 de 0.9633 contre 0.9634 à débit comparable (4,485 à 5,663 contre 4,624 requêtes/s), index construit en 478 s contre 525 s.

8.1×

Maths AVX2 vs scalaire. Normalisation par lots en structure de tableaux, 512 points en L1 : 8.1× / 9.0× par rapport au chemin scalaire, compilé sans auto-vectorisation. Chaque chemin renvoie les mêmes bits, sans contraction FMA.

vérification

Vérifiée face à du code que nous n'avons pas écrit.

QuoiVérifié face àRésultat
Ed25519OpenSSL, une référence Python en entiers exacts et les vecteurs de la RFC 803211,848 · 0 divergence
SHA-384/512, HMAC, HKDF, AES-GCMPython cryptography 46 et hashlib sur OpenSSL 3.5, plus 47 vecteurs officiels127,502 · 0 divergence
X25519, P-256, P-384, vérification RSAles mêmes oracles et les RFC 7748 et 697959,001 · 0 divergence
X.509openssl verify et Python cryptography, chaînes aléatoires23,643
TLS 1.3Trace RFC 8448, openssl s_server et s_client, Python ssl31 cas · 0 échec
Compressionliblz4, zlib et libxxhash, sous Linux79,864 · 0 divergence
Unicode 18les fichiers de conformité Unicode officiels100%
Machine learningscikit-learn, LightGBM, XGBoost, ONNX Runtime, hnswlib, scipyà 1e-4 près ou au bit près, et le recall de hnswlib
Télémétrieun vrai Prometheus et un vrai OpenTelemetry Collectoracceptée, aucun rejet
BuildTests
Windows x64, MSVC 19.51, Release282 sur 282
Linux x64, GCC 15.2, Release284 sur 284
Linux x64, Guard et ML activés287 sur 287
Linux x64, ASan et UBSan274 · au propre, 17 oct.
Linux x64, TSan274 sur 274 · au propre, 17 oct.
Défauts introduits

Des scripts de mutation introduisent le bug et exigent que le test casse. C'est ainsi qu'une clé d'obfuscation qui s'annulait elle-même et un cas de falsification Ed25519 ont été détectés alors que tous les tests d'aller-retour passaient.

Consommée de l'extérieur

Un projet séparé est compilé avec le SDK empaqueté via find_package, comme le fait un client. Chaque header public compile seul, sur MSVC et GCC.

Zéro avertissement

MSVC /W4 et GCC -Wall -Wextra, y compris les arbres des sanitizers.

plateformes

Où elle tourne, dit clairement.

Windows x64MSVC 19.51 · /W4
vérifié
Linux x64GCC 15.2 · -Wall -Wextra
vérifié
macOSCode POSIX, jamais compilé sur un Mac
pas encore validé
x86, 32 bitsPreset MSVC
pas encore vérifié
ARM64 · Clangfeuille de route
pas encore compilé
les échecs

24 objectifs pas encore atteints. Pour l'instant.

Chaque module a sa propre spécification avec des objectifs de performance. Voici ceux que ses mesures n'ont pas atteints, tels que consignés dans la documentation du module. Nous préférons que vous les lisiez ici plutôt que de les découvrir en production.

ModuleMesuré par rapport à l'objectif
coroutineFibre vs thread : 16x à 28x moins coûteuse. Objectif de 50x non atteint
coroutineLancement d'une tâche : 80 à 250 ns. Objectif de 100 ns non atteint de façon constante
resilienceChaîne de quatre politiques : 101 à 123 ns. Objectif de 50 ns non atteint
cacheLecture avec succès de cache : 20.7 ns. Objectif de 20 ns non atteint
cacheDébit de lecture de 1 à 8 threads : 2x. Objectif de 10x de 1 à 16 threads non atteint (4 cœurs physiques)
compressionBloc LZ4, texte : compresse à 365 et 380 MB/s, contre 391.2 MB/s pour la référence LZ4_compress_default sur la même machine. Objectif de 600 MB/s non atteint. Décompresse à 3.24 GB/s sous Windows et 2.48 GB/s sous Linux (l'objectif de 3 GB/s n'est atteint que sous Windows)
compressionCRC32 (polynôme IEEE), table slice-by-8 : 1.57 GB/s sous Windows et 2.38 GB/s sous Linux. Objectif de 20 GB/s non atteint : l'instruction x86 CRC32 ne calcule que CRC32C, qui l'atteint
encodingValidation UTF-8, texte mixte : 6.7 GB/s avec AVX2. Objectif de 15 GB/s non atteint
configDébit du parseur, fichier de 0.59 MB (MSVC 19.51, i7-6700) : 133 MB/s. Objectif de 200 MB/s non atteint
storageLecture ponctuelle aléatoire sur une base de 115 MB, plus grande que le cache du CPU : 831 à 1578 ns et 870 à 1176 ns. Objectif de 1 µs non atteint de façon robuste
regexFace à std::regex, 7 motifs sur 2 MB : 10x à 351x vs libstdc++ sur six des sept, 1.3x à 42x vs MSVC. Objectif de 10x sur tous non atteint
regexCompilation d'un motif : 1.0x à 2.2x la vitesse de std::regex sur GCC, 0.2x à 0.7x sur MSVC. Objectif de 10x plus rapide non atteint
rpcAllocations par appel : 1. Objectif de zéro non atteint
benchRépétabilité sur 10 exécutions : 0.4% à 14.1% et 1.3% à 14.1%. Objectif de 2% non atteint sur cette machine
mathProduit scalaire et vectoriel sur points entrelacés : 2.7x et 1.9x à 2.2x, distance entrelacée 2.8x sur MSVC. Objectif de 3x à 4x non atteint (les variantes en structure de tableaux atteignent 4.1x à 4.8x)
ecsItération sur 1 million avec 3 composants : 4.19 ms, au plafond de bande passante mémoire (14.3 GB/s). Objectif de 1 ms non atteint
Ml::TreesUne prédiction avec 500 arbres : 12 à 14 µs avec AVX2. Objectif de 50 ns non atteint (le plancher mémoire est de 4 à 5 µs)
Ml::TreesVérification complète d'un modèle de 100 MB : environ 13 ms. Objectif de 5 ms non atteint
Ml::TreesPrédiction par lots : 1.5x à 1.65x plus rapide par ligne qu'une à la fois. Objectif de 4x non atteint
Ml::TreesMode compilé : 2.7x plus lent que l'interpréteur AVX2. Objectif de 2x plus rapide non atteint
Ml::FeaturesUn événement avec 50 features : 0.45 µs avec une entité, 1.8 µs avec 10,000. Objectif de 100 ns non atteint
Ml::AnomalyAutoencodeur : la feature qui contribue le plus est la responsable dans 94.3% des cas. L'objectif de 95% fixé pour les autres détecteurs n'est pas atteint
ModelGuardVérifier et déchiffrer 50 MB : environ 330 à 380 ms. Objectif de 10 ms non atteint
VectorIndexObjectif de 10,000 requêtes/s à 95% de recall sur 1M x 768 non atteint

Mesurez-le sur votre propre machine.

Le banc de mesure est livré avec la bibliothèque. Mesurez votre propre charge de travail pendant vos 30 jours d'évaluation.

En savoir plus sur Typename Studios et ses produits