Skip to content

Mesure de #206 (a) avec Visual C++ x86 (provisoire, à fermer, ne pas fusionner) - #214

Closed
Jordan08 wants to merge 8 commits into
todo-ai-ab-206-base-tmpfrom
todo-ai-ab-206-head-tmp
Closed

Jordan08 wants to merge 8 commits into
todo-ai-ab-206-base-tmpfrom
todo-ai-ab-206-head-tmp

Conversation

@Jordan08

Copy link
Copy Markdown
Owner

Pull request provisoire, à ne pas fusionner : je la ferme après avoir lu le résultat. Mesure à usage unique, décidée avec le mainteneur, du gain de #206 (a) avec Visual C++ x86.

#206 fait lire MXCSR en ligne aux fonctions de CORE-MATH sur x86 32 bits (cbrt et asinpi à chaque appel) au lieu de fegetround() de la bibliothèque C, un appel d'environ 80 ns avec Visual C++ x86. L'A/B de #206 ne peut pas le montrer : la base (configure-clean) construit son propre tests/performance.cpp, sans les lignes nth_root(x, 3) et asinpi(x) que #206 ajoute.

Cette pull request met ces deux lignes dans la base : la base est todo-ai-ab-206-base-tmp (configure-clean plus le seul tests/performance.cpp de #206) et la tête todo-ai-ab-206-head-tmp est cette base plus #206 entière, fusionnée. Le tableau « base / PR » des jobs « Visual Studio 2026 x86 » (Visual C++ et clang-cl) et « Debian 13 Trixie i386 » compare donc ces deux lignes avant et après #206. Les autres jobs de la CI ne m'intéressent pas ici.

@Jordan08

Copy link
Copy Markdown
Owner Author

Résultat de la mesure, que je ferme (les branches todo-ai-ab-206-base-tmp et todo-ai-ab-206-head-tmp restent, sans autre usage).

A/B de #206 avec les lignes nth_root(x, 3) et asinpi(x) dans la base (médiane de 3 passages de la base et 3 de la tête dans le même job, ns par opération) :

Job Ligne base #206 base / #206
Visual Studio 2026 x86 (Visual C++) nth_root(x, 3) 355,3 179,4 1,98
Visual Studio 2026 x86 (Visual C++) asinpi(x) 1 005,1 793,8 1,27
Visual Studio 2026 clang-cl x86 nth_root(x, 3) 324,4 119,7 2,71
Visual Studio 2026 clang-cl x86 asinpi(x) 437,5 254,8 1,72
Debian 13 Trixie i386 (glibc) nth_root(x, 3) 204,6 207,6 0,99
Debian 13 Trixie i386 (glibc) asinpi(x) 899,8 893,8 1,01

Les lignes de contrôle ne bougent pas (x + y et sin(x) à 1,00 partout). Le gain de #206 (a) est donc mesuré : 176 ns de moins par nth_root(x, 3) avec Visual C++ x86 (355,3 puis 179,4), 211 ns par asinpi(x) (1 005,1 puis 793,8), davantage que les 80 ns d'un appel de fegetround() parce que chaque opération lit la direction pour ses deux bornes ; 205 ns et 183 ns avec clang-cl x86. Avec la glibc de Debian i386, dont fegetround() ne lit que l'unité x87 et coûte peu, rien ne change, comme attendu (ce que #206 corrige là est la justesse, non la vitesse).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant