all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#62395: [PATCH] Tunable guile@3.0.9t package
@ 2023-03-22 21:19 Dr. Arne Babenhauserheide
  2023-03-26 13:42 ` Ludovic Courtès
  0 siblings, 1 reply; 2+ messages in thread
From: Dr. Arne Babenhauserheide @ 2023-03-22 21:19 UTC (permalink / raw)
  To: 62395


[-- Attachment #1.1: Type: text/plain, Size: 183 bytes --]

Hi,


The attached patch adds a guile@3.0.9t package that enables CPU
architecture tuning for Guile and for a specialized libgc.

It creates new packages to avoid causing rebuilds.



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-gnu-create-tunable-guile-3.0.9t-that-uses-tunable-bd.patch --]
[-- Type: text/x-patch, Size: 2729 bytes --]

From fbde1198a2386874e059faf8b3afdd09288bc7aa Mon Sep 17 00:00:00 2001
From: Arne Babenhauserheide <arne_bab@web.de>
Date: Wed, 22 Mar 2023 18:32:08 +0100
Subject: [PATCH] gnu: create tunable guile@3.0.9t that uses tunable bdw-gc

* gnu/packages/bdw-gc.scm (libgc/tunable): new derived package with
  (tunable? . #t) property.
* gnu/packages/guile.scm (guile-3.0-latest/tunable): new derived package
  with (tunable? . #t) property that uses libgc/tunable as propagated input.
---
 gnu/packages/bdw-gc.scm |  8 ++++++++
 gnu/packages/guile.scm  | 22 ++++++++++++++++++++++
 2 files changed, 30 insertions(+)

diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index ae0d761ac3..a5a58da877 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -96,6 +96,14 @@ (define-public libgc
 
    (license (x11-style (string-append home-page "license.txt")))))
 
+(define-public libgc/tunable
+  (package
+    (inherit libgc)
+    (properties
+     '((release-monitoring-url . "https://www.hboehm.info/gc/gc_source/")
+       (upstream-name . "gc")
+       (tunable? #t)))))
+
 ;; TODO: Add a static output in libgc in the next rebuild cycle.
 (define-public libgc/static-libs
   (package/inherit
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 2fd9b711ce..715f5c7a61 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -419,6 +419,28 @@ (define-public guile-3.0-latest
                         "GUILE_OPTIMIZATIONS = -O1 -Oresolve-primitives -Ocps\n")))))
                '())))))))
 
+(define-public guile-3.0-latest/tunable
+  (package
+    (inherit guile-3.0-latest)
+    (version "3.0.9t")
+    (source (origin
+              (inherit (package-source guile-3.0))
+              (uri (string-append "mirror://gnu/guile/guile-"
+                                  (string-delete #\t version)
+                                  ".tar.xz"))
+              (sha256
+               (base32
+                "03bm1mnfc9kkg2ls942a0js7bxrdzmcffgrgg6anwdmjfan2a9hs"))))
+    (propagated-inputs
+     (modify-inputs (package-propagated-inputs guile-3.0-latest)
+       (replace "bdw-gc" libgc/tunable)
+       ))
+
+    (properties '((tunable? . #t)               ;this is the point of this package
+                  (timeout . 72000)             ;20 hours
+                  (max-silent-time . 36000))))) ;10 hours (needed on ARM
+                                        ;  when heavily loaded)
+
 ;;; The symbol guile-3.0/fixed should be used when guile-3.0 needs fixes
 ;;; (security or else) and this deprecation could be removed.
 (define-deprecated/public-alias guile-3.0/fixed guile-3.0/pinned)
-- 
2.39.2


[-- Attachment #1.3: Type: text/plain, Size: 18499 bytes --]



The results of a benchmark are still not fully conclusive: regular Guile
seems to be slightly slower in the Geometric mean of all tests, but
there are benchmarks where a tuned Guile is slower.

Note that this is tuning for znver3 while I actually have znver4, but
support for the correct compile-target will only arrive with GCC 13.


To replicate the benchmarks:

echo guix pull --disable-authentication --allow-downgrades -u … # get the new packages

guix shell mercurial -- hg clone https://hg.sr.ht/~arnebab/wisp
guix shell git -- git clone https://github.com/ecraven/r7rs-benchmarks 
cd r7rs-benchmarks

for N in {1..3}; do
  guix shell --tune guile@3.0.9t -- ./bench guile all && mv results.Guile{,-tuned${N}}
  guix shell guile@3.0.9 -- ./bench guile all && mv results.Guile{,-regular${N}}
  sed -i 's/\+guile/+guiletuned/' results.Guile-tuned${N}
  sed -i 's/\+guile/+guileregular/' results.Guile-regular${N}
done
grep -a -h '+!CSVLINE' results.Guile-{regular,tuned}* | sed 's/+!CSVLINE!+//' > all.csv
guix shell guile-wisp guile -- ../wisp/examples/evaluate-r7rs-benchmark.w ~/eigenes/Programme/r7rs-benchmarks/all.csv guiletuned
guix shell guile-wisp guile -- ../wisp/examples/evaluate-r7rs-benchmark.w ~/eigenes/Programme/r7rs-benchmarks/all.csv guileregular


My results with N in {1..2}, the Geometric mean:

Guile tuned has a slowdown of 1.03512801239189
Guile regular has a slowdown of 1.0504373210343294

This suggests that the regular Guile is 1.48% slower than tuned Guile.

Since I have no errorbars, I cannot say whether this is significant.


=== Guiletuned slowdown ===

(("bv2string:1000:1000:100" . 1.0)
 ("equal" . #f)
 ("mperm:20:10:2:1" . 1.146669471586088)
 ("gcbench:20:1" . 1.0197445340007967)
 ("sboyer:5:1" . 1.0398502157522214)
 ("nboyer:5:1" . 1.050828554948064)
 ("chudnovsky:50:500:50:1000"
  .
  1.0236854348323314)
 ("slatex:500" . 1.0063944149759714)
 ("scheme:100000" . 1.0689169431069399)
 ("quicksort:10000:2500" . 1.003088477529797)
 ("primes:1000:10000" . 1.041839283639136)
 ("peval:2000" . 1.0560148767561295)
 ("parsing:2500" . 1.0003564615141731)
 ("paraffins:23:10" . 2.0039145601078086)
 ("nqueens:13:10" . 1.0)
 ("mazefun:11:11:10000" . 1.034627134692567)
 ("maze:20:7:10000" . 1.001234149986604)
 ("matrix:5:5:2500" . 1.047237971262676)
 ("lattice:44:10" . 1.003284878892407)
 ("graphs:7:3" . 1.101724767552233)
 ("earley:1" . 1.0507663201957202)
 ("dynamic:500" . 1.0806476338778386)
 ("conform:500" . 1.0)
 ("compiler:2000" . 1.0973709486022507)
 ("read1:2500" . 1.0)
 ("wc:inputs/bib:50" . 1.0252716381981584)
 ("tail:50" . 1.070013760352806)
 ("cat:50" . 1.1006490143447183)
 ("sum1:25" . 1.0)
 ("string:500000:100" . 1.005448377967908)
 ("array1:1000000:500" . 1.017108880809611)
 ("ack:3:12:2" . 1.0343152722188402)
 ("simplex:1000000" . 1.0213054034897673)
 ("ray:50" . 1.0090968950973398)
 ("pnpoly:1000000" . 1.0091804774033606)
 ("pi:50:500:50:100" . 1.0)
 ("nucleic:50" . 1.0173803271423734)
 ("mbrotZ:75:1000" . 1.022665128035874)
 ("mbrot:75:1000" . 1.0)
 ("fft:65536:100" . 1.0)
 ("sumfp:1000000.0:500" . 1.0)
 ("sum:10000:200000" . 1.0028978038917624)
 ("fibfp:35.0:10" . 1.029590065926432)
 ("fibc:30:10" . 1.0072040559671238)
 ("fib:40:5" . 1.0023503962392322)
 ("ctak:27:16:8:1" . 1.0)
 ("cpstak:40:20:11:1" . 1.0)
 ("ntakl:40:20:12:1" . 1.046107228813898)
 ("takl:40:20:12:1" . 1.0327425092626041)
 ("tak:40:20:11:1" . 1.0)
 ("triangl:22:1:50" . 1.0143942222863194)
 ("puzzle:1000" . 1.2229189054254013)
 ("divrec:1000:1000000" . 1.0074179348861916)
 ("diviter:1000:1000000" . 1.043931078583493)
 ("destruc:600:50:4000" . 1.0240507947888393)
 ("deriv:10000000" . 1.0319784815172544)
 ("browse:2000" . 1.1070660842252487)
 ("bv2string:1000:1000:100" . 1.0338536673222782)
 ("equal" . #f)
 ("mperm:20:10:2:1" . 1.1881732405136267)
 ("gcbench:20:1" . 1.0)
 ("sboyer:5:1" . 1.0631408998092902)
 ("nboyer:5:1" . 1.0217971951625024)
 ("chudnovsky:50:500:50:1000" . 1.0)
 ("slatex:500" . 1.0)
 ("scheme:100000" . 1.0)
 ("quicksort:10000:2500" . 1.0543263325575605)
 ("primes:1000:10000" . 1.0067412573033894)
 ("peval:2000" . 1.0)
 ("parsing:2500" . 1.0)
 ("paraffins:23:10" . 1.0)
 ("nqueens:13:10" . 1.0176605905015021)
 ("mazefun:11:11:10000" . 1.037746391910457)
 ("maze:20:7:10000" . 1.0)
 ("matrix:5:5:2500" . 1.0200605013910409)
 ("lattice:44:10" . 1.0102542438570286)
 ("graphs:7:3" . 1.0384572473968816)
 ("earley:1" . 1.0)
 ("dynamic:500" . 1.0)
 ("conform:500" . 1.0091118513899833)
 ("compiler:2000" . 1.0)
 ("read1:2500" . 1.0599058441532945)
 ("wc:inputs/bib:50" . 1.0746142263219225)
 ("tail:50" . 1.0632740266035832)
 ("cat:50" . 1.0929665813153533)
 ("sum1:25" . 1.036061672363642)
 ("string:500000:100" . 1.0162155078942512)
 ("array1:1000000:500" . 1.0515376902103308)
 ("ack:3:12:2" . 1.0118706763775067)
 ("simplex:1000000" . 1.0164588830600216)
 ("ray:50" . 1.0)
 ("pnpoly:1000000" . 1.0)
 ("pi:50:500:50:100" . 1.045459192674658)
 ("nucleic:50" . 1.0017484672084827)
 ("mbrotZ:75:1000" . 1.0)
 ("mbrot:75:1000" . 1.0311423294990856)
 ("fft:65536:100" . 1.0504466238403414)
 ("sumfp:1000000.0:500" . 1.0091469248322233)
 ("sum:10000:200000" . 1.0)
 ("fibfp:35.0:10" . 1.0)
 ("fibc:30:10" . 1.1257119803649067)
 ("fib:40:5" . 1.0)
 ("ctak:27:16:8:1" . 1.0148864364373957)
 ("cpstak:40:20:11:1" . 1.011283388260497)
 ("ntakl:40:20:12:1" . 1.0)
 ("takl:40:20:12:1" . 1.007232975497366)
 ("tak:40:20:11:1" . 1.0362220583744437)
 ("triangl:22:1:50" . 1.022212297184504)
 ("puzzle:1000" . 1.2350889918747268)
 ("divrec:1000:1000000" . 1.0064081034755894)
 ("diviter:1000:1000000" . 1.0)
 ("destruc:600:50:4000" . 1.0)
 ("deriv:10000000" . 1.0061506030191765)
 ("browse:2000" . 1.0065279614595284))

=== Guiletuned Geometric Mean slowdown (successful tests / total tests) ===

1.03512801239189 (112 / 114)


=== Guileregular slowdown ===

(("bv2string:1000:1000:100" . 1.0674803047626884)
 ("equal" . #f)
 ("mperm:20:10:2:1" . 1.094739035540671)
 ("gcbench:20:1" . 1.0172414374269374)
 ("sboyer:5:1" . 1.0)
 ("nboyer:5:1" . 1.0)
 ("chudnovsky:50:500:50:1000"
  .
  1.1734845659670659)
 ("slatex:500" . 1.0239374916619306)
 ("scheme:100000" . 1.122700507430036)
 ("quicksort:10000:2500" . 1.0)
 ("primes:1000:10000" . 1.0)
 ("peval:2000" . 1.0088858652748092)
 ("parsing:2500" . 1.0418903162390507)
 ("paraffins:23:10" . 2.042048452193248)
 ("nqueens:13:10" . 1.0100153261373226)
 ("mazefun:11:11:10000" . 1.0)
 ("maze:20:7:10000" . 1.048959091743095)
 ("matrix:5:5:2500" . 1.0)
 ("lattice:44:10" . 1.0079437861216478)
 ("graphs:7:3" . 1.198135373192713)
 ("earley:1" . 1.0959681146976517)
 ("dynamic:500" . 1.16155735839947)
 ("conform:500" . 1.0119217370442324)
 ("compiler:2000" . 1.0306165278415973)
 ("read1:2500" . 1.0460552396933456)
 ("wc:inputs/bib:50" . 1.0)
 ("tail:50" . 1.0319054479289398)
 ("cat:50" . 1.0)
 ("sum1:25" . 1.034137468078866)
 ("string:500000:100" . 1.0)
 ("array1:1000000:500" . 1.0)
 ("ack:3:12:2" . 1.0057561961050057)
 ("simplex:1000000" . 1.0)
 ("ray:50" . 1.0438647708135202)
 ("pnpoly:1000000" . 1.0874091135942872)
 ("pi:50:500:50:100" . 1.0215934390378087)
 ("nucleic:50" . 1.0)
 ("mbrotZ:75:1000" . 1.052938347579755)
 ("mbrot:75:1000" . 1.0329378591712912)
 ("fft:65536:100" . 1.0189087888402792)
 ("sumfp:1000000.0:500" . 1.0482534106366277)
 ("sum:10000:200000" . 1.0289912283371638)
 ("fibfp:35.0:10" . 1.033671691949834)
 ("fibc:30:10" . 1.178850020182939)
 ("fib:40:5" . 1.024466514102094)
 ("ctak:27:16:8:1" . 1.1039955311250749)
 ("cpstak:40:20:11:1" . 1.0371479505513828)
 ("ntakl:40:20:12:1" . 1.0213756257162367)
 ("takl:40:20:12:1" . 1.0)
 ("tak:40:20:11:1" . 1.0126417896363957)
 ("triangl:22:1:50" . 1.0)
 ("puzzle:1000" . 1.0)
 ("divrec:1000:1000000" . 1.0450154469330961)
 ("diviter:1000:1000000" . 1.0591207445325488)
 ("destruc:600:50:4000" . 1.0838399255052662)
 ("deriv:10000000" . 1.0)
 ("browse:2000" . 1.018717561314545)
 ("bv2string:1000:1000:100" . 1.036089236974368)
 ("equal" . #f)
 ("mperm:20:10:2:1" . 1.0)
 ("gcbench:20:1" . 1.0243606915521992)
 ("sboyer:5:1" . 1.00368112089037)
 ("nboyer:5:1" . 1.0500604616494615)
 ("chudnovsky:50:500:50:1000" . 1.115409983742645)
 ("slatex:500" . 1.0002570334324394)
 ("scheme:100000" . 1.0390531892971318)
 ("quicksort:10000:2500" . 1.0098428078516584)
 ("primes:1000:10000" . 1.06437827292514)
 ("peval:2000" . 1.024359358481343)
 ("parsing:2500" . 1.0004232513670308)
 ("paraffins:23:10" . 2.024687502614597)
 ("nqueens:13:10" . 1.0058665553469563)
 ("mazefun:11:11:10000" . 1.056194215282642)
 ("maze:20:7:10000" . 1.020543843425558)
 ("matrix:5:5:2500" . 1.0028500406404608)
 ("lattice:44:10" . 1.0)
 ("graphs:7:3" . 1.0)
 ("earley:1" . 1.0256148071738138)
 ("dynamic:500" . 1.008662479565268)
 ("conform:500" . 1.0332430727462598)
 ("compiler:2000" . 1.006956809282123)
 ("read1:2500" . 1.0564058966125223)
 ("wc:inputs/bib:50" . 1.0335552278476583)
 ("tail:50" . 1.0)
 ("cat:50" . 1.0263527061380673)
 ("sum1:25" . 1.0638438694063255)
 ("string:500000:100" . 1.1084001200578586)
 ("array1:1000000:500" . 1.0547700539059255)
 ("ack:3:12:2" . 1.0)
 ("simplex:1000000" . 1.021845418562125)
 ("ray:50" . 1.0558263145762616)
 ("pnpoly:1000000" . 1.0598933662254997)
 ("pi:50:500:50:100" . 1.0211985475879175)
 ("nucleic:50" . 1.0313190698159154)
 ("mbrotZ:75:1000" . 1.0191939711368345)
 ("mbrot:75:1000" . 1.0325883765897468)
 ("fft:65536:100" . 1.1023483002887104)
 ("sumfp:1000000.0:500" . 1.0794299746553448)
 ("sum:10000:200000" . 1.063704305941153)
 ("fibfp:35.0:10" . 1.1160079648284265)
 ("fibc:30:10" . 1.0)
 ("fib:40:5" . 1.0533185743228644)
 ("ctak:27:16:8:1" . 1.2839324786349615)
 ("cpstak:40:20:11:1" . 1.0290465857280968)
 ("ntakl:40:20:12:1" . 1.017152038958873)
 ("takl:40:20:12:1" . 1.0008854776027978)
 ("tak:40:20:11:1" . 1.0077102329273817)
 ("triangl:22:1:50" . 1.0435679627887324)
 ("puzzle:1000" . 1.0006869727744467)
 ("divrec:1000:1000000" . 1.0)
 ("diviter:1000:1000000" . 1.0496228639946887)
 ("destruc:600:50:4000" . 1.0446502508269544)
 ("deriv:10000000" . 1.0901526807172006)
 ("browse:2000" . 1.0))

=== Guileregular Geometric Mean slowdown (successful tests / total tests) ===

1.0504373210343294 (112 / 114)


Actual full results from two runs:

=== Guiletuned times ===

(("ack:3:12:2" "2.85671086")
 ("ack:3:12:2" "2.920076389")
 ("array1:1000000:500" "2.719338434")
 ("array1:1000000:500" "2.630303504")
 ("browse:2000" "4.653660319")
 ("browse:2000" "5.118496161")
 ("bv2string:1000:1000:100" "1.433438423")
 ("bv2string:1000:1000:100" "1.386500303")
 ("cat:50" "10.334967974")
 ("cat:50" "10.407612189")
 ("chudnovsky:50:500:50:1000" "0.362723212")
 ("chudnovsky:50:500:50:1000" "0.371314469")
 ("compiler:2000" "2.14676404")
 ("compiler:2000" "2.355796491")
 ("conform:500" "4.878185941")
 ("conform:500" "4.834137994")
 ("cpstak:40:20:11:1" "17.407945755")
 ("cpstak:40:20:11:1" "17.213716706")
 ("ctak:27:16:8:1" "13.296419091")
 ("ctak:27:16:8:1" "13.101386139")
 ("deriv:10000000" "6.006358226")
 ("deriv:10000000" "6.160541397")
 ("destruc:600:50:4000" "2.524561809")
 ("destruc:600:50:4000" "2.585279527")
 ("diviter:1000:1000000" "4.459944493")
 ("diviter:1000:1000000" "4.655874665")
 ("divrec:1000:1000000" "6.71596458")
 ("divrec:1000:1000000" "6.722703389")
 ("dynamic:500" "3.525123929")
 ("dynamic:500" "3.809416833")
 ("earley:1" "4.054948659")
 ("earley:1" "4.260803481")
 ("equal" "ULIMITKILLED")
 ("equal" "ULIMITKILLED")
 ("fft:65536:100" "2.635766227")
 ("fft:65536:100" "2.509186252")
 ("fib:40:5" "4.193038108")
 ("fib:40:5" "4.202893409")
 ("fibc:30:10" "40.788333173")
 ("fibc:30:10" "36.494392282")
 ("fibfp:35.0:10" "9.395625366")
 ("fibfp:35.0:10" "9.67364254")
 ("gcbench:20:1" "0.99502713")
 ("gcbench:20:1" "1.014673477")
 ("graphs:7:3" "12.370817417")
 ("graphs:7:3" "13.124503659")
 ("lattice:44:10" "6.197259938")
 ("lattice:44:10" "6.154507367")
 ("matrix:5:5:2500" "3.641334999")
 ("matrix:5:5:2500" "3.73835108")
 ("maze:20:7:10000" "1.613933494")
 ("maze:20:7:10000" "1.61592533")
 ("mazefun:11:11:10000" "3.749008984")
 ("mazefun:11:11:10000" "3.737740216")
 ("mbrot:75:1000" "19.750189296")
 ("mbrot:75:1000" "19.153698506")
 ("mbrotZ:75:1000" "20.612462381")
 ("mbrotZ:75:1000" "21.07964648")
 ("mperm:20:10:2:1" "9.617642771")
 ("mperm:20:10:2:1" "9.281691405")
 ("nboyer:5:1" "1.872344958")
 ("nboyer:5:1" "1.925542129")
 ("nqueens:13:10" "6.834513689")
 ("nqueens:13:10" "6.715906809")
 ("ntakl:40:20:12:1" "3.226853095")
 ("ntakl:40:20:12:1" "3.375634349")
 ("nucleic:50" "4.703444216")
 ("nucleic:50" "4.776839468")
 ("paraffins:23:10" "2.986478347")
 ("paraffins:23:10" "5.984647443")
 ("parsing:2500" "3.588179787")
 ("parsing:2500" "3.589458835")
 ("peval:2000" "4.217629667")
 ("peval:2000" "4.453879673")
 ("pi:50:500:50:100" "0.526672392")
 ("pi:50:500:50:100" "0.503771353")
 ("pnpoly:1000000" "12.105856386")
 ("pnpoly:1000000" "12.216993927")
 ("primes:1000:10000" "2.763279203")
 ("primes:1000:10000" "2.859615422")
 ("puzzle:1000" "7.432281644")
 ("puzzle:1000" "7.359046832")
 ("quicksort:10000:2500" "4.919145241")
 ("quicksort:10000:2500" "4.680086002")
 ("ray:50" "6.232801675")
 ("ray:50" "6.289500818")
 ("read1:2500" "3.322952744")
 ("read1:2500" "3.135139562")
 ("sboyer:5:1" "1.585267198")
 ("sboyer:5:1" "1.550538069")
 ("scheme:100000" "5.899088913")
 ("scheme:100000" "6.305636088")
 ("simplex:1000000" "4.74155611")
 ("simplex:1000000" "4.764164057")
 ("slatex:500" "5.5026227")
 ("slatex:500" "5.537808753")
 ("string:500000:100" "0.68799508")
 ("string:500000:100" "0.680705551")
 ("sum1:25" "3.378466719")
 ("sum1:25" "3.260874144")
 ("sum:10000:200000" "1.715693396")
 ("sum:10000:200000" "1.720665139")
 ("sumfp:1000000.0:500" "17.278236223")
 ("sumfp:1000000.0:500" "17.121625997")
 ("tail:50" "4.837888687")
 ("tail:50" "4.868554424")
 ("tak:40:20:11:1" "2.207812177")
 ("tak:40:20:11:1" "2.13063615")
 ("takl:40:20:12:1" "3.273725333")
 ("takl:40:20:12:1" "3.356636843")
 ("triangl:22:1:50" "3.13643409")
 ("triangl:22:1:50" "3.112446043")
 ("wc:inputs/bib:50" "6.354178924")
 ("wc:inputs/bib:50" "6.062416889"))


=== Guileregular times ===

(("ack:3:12:2" "2.823197595")
 ("ack:3:12:2" "2.839448474")
 ("array1:1000000:500" "2.727697517")
 ("array1:1000000:500" "2.58605893")
 ("browse:2000" "4.62347843")
 ("browse:2000" "4.710018671")
 ("bv2string:1000:1000:100" "1.436538041")
 ("bv2string:1000:1000:100" "1.480061766")
 ("cat:50" "9.705074729")
 ("cat:50" "9.45588653")
 ("chudnovsky:50:500:50:1000" "0.404585092")
 ("chudnovsky:50:500:50:1000" "0.425650091")
 ("compiler:2000" "2.161698668")
 ("compiler:2000" "2.212490501")
 ("conform:500" "4.994839595")
 ("conform:500" "4.891769316")
 ("cpstak:40:20:11:1" "17.713716404")
 ("cpstak:40:20:11:1" "17.853171003")
 ("ctak:27:16:8:1" "16.821295179")
 ("ctak:27:16:8:1" "14.463871749")
 ("deriv:10000000" "6.507820501")
 ("deriv:10000000" "5.969641332")
 ("destruc:600:50:4000" "2.637284127")
 ("destruc:600:50:4000" "2.736220883")
 ("diviter:1000:1000000" "4.681259712")
 ("diviter:1000:1000000" "4.723619732")
 ("divrec:1000:1000000" "6.673202011")
 ("divrec:1000:1000000" "6.973599182")
 ("dynamic:500" "3.555660243")
 ("dynamic:500" "4.094633639")
 ("earley:1" "4.158815387")
 ("earley:1" "4.444094437")
 ("equal" "ULIMITKILLED")
 ("equal" "ULIMITKILLED")
 ("fft:65536:100" "2.7659972")
 ("fft:65536:100" "2.556631925")
 ("fib:40:5" "4.416604922")
 ("fib:40:5" "4.295627134")
 ("fibc:30:10" "36.233365092")
 ("fibc:30:10" "42.71370317")
 ("fibfp:35.0:10" "10.485592743")
 ("fibfp:35.0:10" "9.711991969")
 ("gcbench:20:1" "1.019266679")
 ("gcbench:20:1" "1.012182828")
 ("graphs:7:3" "11.912688219")
 ("graphs:7:3" "14.273013145")
 ("lattice:44:10" "6.134356748")
 ("lattice:44:10" "6.183086766")
 ("matrix:5:5:2500" "3.579898395")
 ("matrix:5:5:2500" "3.569724535")
 ("maze:20:7:10000" "1.647089891")
 ("maze:20:7:10000" "1.692950212")
 ("mazefun:11:11:10000" "3.815654415")
 ("mazefun:11:11:10000" "3.612644682")
 ("mbrot:75:1000" "19.777886446")
 ("mbrot:75:1000" "19.78458033")
 ("mbrotZ:75:1000" "21.008097389")
 ("mbrotZ:75:1000" "21.703652079")
 ("mperm:20:10:2:1" "8.094478518")
 ("mperm:20:10:2:1" "8.861341606")
 ("nboyer:5:1" "1.924134672")
 ("nboyer:5:1" "1.832403697")
 ("nqueens:13:10" "6.755306048")
 ("nqueens:13:10" "6.783168806")
 ("ntakl:40:20:12:1" "3.282200205")
 ("ntakl:40:20:12:1" "3.295829099")
 ("nucleic:50" "4.842285137")
 ("nucleic:50" "4.695234752")
 ("paraffins:23:10" "6.046685386")
 ("paraffins:23:10" "6.098533486")
 ("parsing:2500" "3.589698489")
 ("parsing:2500" "3.738489773")
 ("peval:2000" "4.32036842")
 ("peval:2000" "4.255106956")
 ("pi:50:500:50:100" "0.514450574")
 ("pi:50:500:50:100" "0.514649509")
 ("pnpoly:1000000" "12.830916876")
 ("pnpoly:1000000" "13.164018562")
 ("primes:1000:10000" "2.921479898")
 ("primes:1000:10000" "2.744775962")
 ("puzzle:1000" "6.021742132")
 ("puzzle:1000" "6.017608199")
 ("quicksort:10000:2500" "4.71159952")
 ("quicksort:10000:2500" "4.665676166")
 ("ray:50" "6.580756022")
 ("ray:50" "6.506202092")
 ("read1:2500" "3.31197992")
 ("read1:2500" "3.279529166")
 ("sboyer:5:1" "1.496605726")
 ("sboyer:5:1" "1.491116745")
 ("scheme:100000" "6.129467149")
 ("scheme:100000" "6.622910116")
 ("simplex:1000000" "4.766683108")
 ("simplex:1000000" "4.664779057")
 ("slatex:500" "5.504037058")
 ("slatex:500" "5.634341685")
 ("string:500000:100" "0.750405621")
 ("string:500000:100" "0.677016907")
 ("sum1:25" "3.469060967")
 ("sum1:25" "3.372192131")
 ("sum:10000:200000" "1.824990453")
 ("sum:10000:200000" "1.765433455")
 ("sumfp:1000000.0:500" "18.481596316")
 ("sumfp:1000000.0:500" "17.947802847")
 ("tail:50" "4.54999235")
 ("tail:50" "4.695161894")
 ("tak:40:20:11:1" "2.147063851")
 ("tak:40:20:11:1" "2.157571204")
 ("takl:40:20:12:1" "3.25309459")
 ("takl:40:20:12:1" "3.250216596")
 ("triangl:22:1:50" "3.201959263")
 ("triangl:22:1:50" "3.068280531")
 ("wc:inputs/bib:50" "6.111397639")
 ("wc:inputs/bib:50" "5.912986045"))


Best wishes,
Arne
-- 
Unpolitisch sein
heißt politisch sein,
ohne es zu merken.
draketo.de

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 1125 bytes --]

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* bug#62395: [PATCH] Tunable guile@3.0.9t package
  2023-03-22 21:19 bug#62395: [PATCH] Tunable guile@3.0.9t package Dr. Arne Babenhauserheide
@ 2023-03-26 13:42 ` Ludovic Courtès
  0 siblings, 0 replies; 2+ messages in thread
From: Ludovic Courtès @ 2023-03-26 13:42 UTC (permalink / raw)
  To: Dr. Arne Babenhauserheide; +Cc: 62395

Hi,

"Dr. Arne Babenhauserheide" <arne_bab@web.de> skribis:

> The attached patch adds a guile@3.0.9t package that enables CPU
> architecture tuning for Guile and for a specialized libgc.
>
> It creates new packages to avoid causing rebuilds.

Marking a package as tunable does not involve any rebuilds, by design:

  https://hpc.guix.info/blog/2022/01/tuning-packages-for-a-cpu-micro-architecture/

Thus there’s no need to create package variants.

> The results of a benchmark are still not fully conclusive: regular Guile
> seems to be slightly slower in the Geometric mean of all tests, but
> there are benchmarks where a tuned Guile is slower.
>
> Note that this is tuning for znver3 while I actually have znver4, but
> support for the correct compile-target will only arrive with GCC 13.

[...]

> Guile tuned has a slowdown of 1.03512801239189
> Guile regular has a slowdown of 1.0504373210343294
>
> This suggests that the regular Guile is 1.48% slower than tuned Guile.
>
> Since I have no errorbars, I cannot say whether this is significant.

As far as I know, there’s no reason why Guile’s C code would benefit
from ISA extensions (we’re mostly talking about vector instructions like
those of AVX).  The only part in libguile that’s performance-critical is
the VM engine—but I don’t see how that code could benefit from vector
instructions.  Likewise, I doubt libgc build with ‘-march=znver3’ has
any chance of being any faster; most likely, the generated code is close
to the baseline.

For these reasons, I’m reluctant to this patch.  Tuning should be done
only on packages where it makes sense, typically linear algebra code,
image/video processing, and so on.

WDYT?

Ludo’.




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-03-26 13:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-22 21:19 bug#62395: [PATCH] Tunable guile@3.0.9t package Dr. Arne Babenhauserheide
2023-03-26 13:42 ` Ludovic Courtès

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.