PI3 überraschend schnell

goldmomo

Ensign
Registriert
Sep. 2013
Beiträge
143
Hallo,

bin jetzt auch Besitzer eines RaspBerryPi 3( :volllol:), habe mir das Teil eigentlich ohne wirklichen Grund gekauft, war aber beeindruckt von der Performance die er abliefert. Benchmarks habe ich kaum gefunden, also hab ich mir gedacht schreibst mal schnell selber etwas (simple/portabel).

Die Ergebnisse (Singlcore CPU/MEM lastig Tests) haben mich überrascht, hätte nicht gedacht, das ein einfaches nicht Superskalares-inorder-design so gut gegen x86 CPUs aussieht (von der Caches + Memoryspeed gar nicht zu sprechen).

Besonders wenn man die Resultate Taktnormiert anschaut (gut ist wieder Designsache aber trotzdem interessant).

Meine Tests sind sicherlich etwas fern der Realität, aber vielleicht interessierst jemanden ( :watt: )
Compiler war unter Linux gcc, bei x86 Windows mit MSVC14 (liefert etwas schlechtere Ergebnisse als gcc unter Linux .. besonders bei der AMD-CPU).
 

Anhänge

  • ipc.png
    ipc.png
    47,3 KB · Aufrufe: 723
  • total.png
    total.png
    52 KB · Aufrufe: 792
Cortex-A53 ist aber superskalar, wenn auch in-order.
 
Stimmt, habe nochmal geschaut ist ein einfacher statisch scheduler (max. 2 uOps) ...
 
Wie waren deine Compilerflags unter Linux? Für den RPi3 erhält man die besten Ergebnisse mit
Code:
-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations -O2 -pipe

O3 führt nur manchmal zu schnellerem Code und macht ihn meistens größer und finde ich daher nicht empfehlenswert. Unsafe-math-optimizations müssen für die NEON Fpu verwendet werden, ftree-vectorize beschleunigt Schleifen mittels SIMD.

Bei Linux x86 reicht ein
Code:
-march=native -mtune=native -O2 -ftree-vectorize -pipe
wenn du nicht für ne andere CPU compilierst, ansonsten kannst du mit mtune auch auf einen bestimmten Prozessor optimieren. eine Liste der Architekturen erhältst du mit -mtune=?
 
Zuletzt bearbeitet:
Habe das Target nicht explizit angegeben nur:

Code:
-ffast-math -pipe -funroll-loops -O2

Mit Clang hat er auch so NEON ISA benutzt, ich werd mal die flags erweitern und schauen ob es was bringt.
Ergänzung ()

So mit den targetspezifischen flags gibt es bei den integerlastigen Test keinen Unterschied, bei den Float Tests hat es beim Mandelbrot 6% rausgeschlagen, der Rest ist identisch ...
 
Falls Interesse besteht würde ich deinen Benchmark auf einem AMD GX-210HA und GX-412TC durchführen. Sind 9W bzw. 6W SOCs.
 
Zuletzt bearbeitet:
Sorry auf den Kisten läuft Linux.
 
Da müsste man es kompilieren (braucht qt). Läuft da ein Windowmanager (weil GUI) oder nur terminal basierend?
 
Ok. Arch x86_64 mit aktuellem Kernel. Beide ohne GUI.
 
Deine Werte oben sind übrigens alle nur relativ - so kann ich die Ergebnisse gar nicht vergleichen. :heul:


Beachtenswert ist am IPC Vergleich insbesondere, dass es sich hierbei ja nur um einen
Low-Power Low-End Kern handelt: ~2,3 DMIPS/MHz bei 1200 MHz.

So ein High-End Cortex A72, A73, Qualcomm Kryo oder Samsung M1 haben
rund die dreifache IPC und doppelten Takt - also bis zur 6-fachen Leistung! (und 10-fachen Stromverbrauch :D )

Und werden immer nur in Smartphones verbaut, nie in Sticks/Boxen, meist nichtmal Tablets. :freak:
 
Windows binary und die Quelldaten liegen unter http://goldmomo.de/store/
Unter linux sollte ein qmake;make ausreichen (natürlich muessen die qt Pakete installiert sein).
In der Console geht als option nogui (nur linux) auch eine Version ohne gui (bencht direkt).

Testergebnisse (Windows):

intel i5-3320m @3.1
Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):

Test                   rotozoom filter 'no' Result: 735.321 MPixel
Test             rotozoom filter 'dithered' Result: 470.488 MPixel
Test        rotozoom filter 'linear filter' Result: 77.2448 MPixel
Test           rotozoom filter 'last pixel' Result: 220.125 MPixel
Test                                 mandel Result: 12.2985 MPixel
Test                                 vertex Result: 68.2611 MVertex
Test                                  lines Result: 0.136512 MLines
Test                            motion blur Result: 54.2129 MPixel
Test                              shellsort Result: 2.34078 MWords
Test                rle compress/uncompress Result: 992.95 MWords
Test                        zlib uncompress Result: 68.1482 MWords
Benchmark finished

amd a8-6600k @4.4
Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):

Test                   rotozoom filter 'no' Result: 519.802 MPixel
Test             rotozoom filter 'dithered' Result: 359.899 MPixel
Test        rotozoom filter 'linear filter' Result: 61.3536 MPixel
Test           rotozoom filter 'last pixel' Result: 163.407 MPixel
Test                                 mandel Result: 11.426 MPixel
Test                                 vertex Result: 52.014 MVertex
Test                                  lines Result: 0.0947455 MLines
Test                            motion blur Result: 48.5564 MPixel
Test                              shellsort Result: 1.38051 MWords
Test                rle compress/uncompress Result: 645.713 MWords
Test                        zlib uncompress Result: 57.7609 MWords
Benchmark finished

intel i7-860 @3,5
Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):

Test                   rotozoom filter 'no' Result: 529.223 MPixel
Test             rotozoom filter 'dithered' Result: 384.895 MPixel
Test        rotozoom filter 'linear filter' Result: 68.4097 MPixel
Test           rotozoom filter 'last pixel' Result: 184.41 MPixel
Test                                 mandel Result: 12.6916 MPixel
Test                                 vertex Result: 42.3756 MVertex
Test                                  lines Result: 0.1355 MLines
Test                            motion blur Result: 56.0573 MPixel
Test                              shellsort Result: 1.86721 MWords
Test                rle compress/uncompress Result: 844.833 MWords
Test                        zlib uncompress Result: 61.7129 MWords
Benchmark finished

Testergebnisse (Linux):

RPI3
Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 171.019 MPixel
Test             rotozoom filter 'dithered' Result: 80.4992 MPixel
Test        rotozoom filter 'linear filter' Result: 22.1141 MPixel
Test           rotozoom filter 'last pixel' Result: 54.1191 MPixel
Test                                 mandel Result: 3.34017 MPixel
Test                                 vertex Result: 12.3285 MVertex
Test                                  lines Result: 0.0182646 MLines
Test                            motion blur Result: 23.3471 MPixel
Test                              shellsort Result: 0.428278 MWords
Test                rle compress/uncompress Result: 176.532 MWords
Test                        zlib uncompress Result: 13.2543 MWords
Benchmark finished
 
Zuletzt bearbeitet:
Die Ergebnisse sind ziemlich ernüchternd, auch wenn es nur ein grober Vergleich ist. Die AMD SOCs sind etwa gleich schnell oder langsamer. Dabei dachte ich erst die müssten bei der TDP weit vorne liegen. Verbrauch beim GX-412TC mit Netzteil etwa 11W.

Ergebnisse Linux x86_64:

Intel i7-920 @ 3.9/4.1 GHz

Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 817.392 MPixel
Test             rotozoom filter 'dithered' Result: 433.772 MPixel
Test        rotozoom filter 'linear filter' Result: 100.319 MPixel
Test           rotozoom filter 'last pixel' Result: 211.51 MPixel
Test                                 mandel Result: 13.6999 MPixel
Test                                 vertex Result: 70.6652 MVertex
Test                                  lines Result: 0.0513657 MLines
Test                            motion blur Result: 59.7337 MPixel
Test                              shellsort Result: 1.25178 MWords
Test                rle compress/uncompress Result: 990.484 MWords
Test                        zlib uncompress Result: 109.58 MWords
Benchmark finished

Bei den folgenden Systemen zusätzlich mit der Option '-platform offscreen', da kein graphisches Interface vorhanden.

AMD GX-412TC @ 1/1.4GHz, 4GB DDR3 1333MHz (PCEngines APU2C4)

Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 91.8955 MPixel
Test             rotozoom filter 'dithered' Result: 58.9097 MPixel
Test        rotozoom filter 'linear filter' Result: 13.7175 MPixel
Test           rotozoom filter 'last pixel' Result: 25.8581 MPixel
Test                                 mandel Result: 2.57229 MPixel
Test                                 vertex Result: 11.8144 MVertex
Test                                  lines Result: 0.0150131 MLines
Test                            motion blur Result: 9.98029 MPixel
Test                              shellsort Result: 0.161616 MWords
Test                rle compress/uncompress Result: 161.818 MWords
Test                        zlib uncompress Result: 16.0649 MWords
Benchmark finished

AMD GX-210HA @ 1GHz, 1GB DDR3 1600MHz (GIZMO 2)

Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 118.952 MPixel
Test             rotozoom filter 'dithered' Result: 75.385 MPixel
Test        rotozoom filter 'linear filter' Result: 18.3828 MPixel
Test           rotozoom filter 'last pixel' Result: 35.1197 MPixel
Test                                 mandel Result: 3.58963 MPixel
Test                                 vertex Result: 15.4223 MVertex
Test                                  lines Result: 0.0207832 MLines
Test                            motion blur Result: 13.1837 MPixel
Test                              shellsort Result: 0.214052 MWords
Test                rle compress/uncompress Result: 124.041 MWords
Test                        zlib uncompress Result: 20.4464 MWords
Benchmark finished
 
Danke für die Daten (hätte nicht gedacht, dass es jemand kompiliert).
Ich hatte es gestern leider nicht mehr geschafft qt einen Zugriff aufs Display auszutreiben (hat schon QApplication verursacht?).

Die Ergebnisse der AMD-Gs sind interessant, gerade die Rotozoomertests / Lines / MotionBlur sind relative speicherlastig (wenig zu berechnen), vielleicht liegt hier das Problem (obwohl der einfache rle auch wieder ok ist?).

P.s.: das Gizmo2 Board kannte ich bis jetzt nicht, sieht richtig nett aus :-)
 
Zuletzt bearbeitet:
Habe hier die Lösung für mein headless-Problem gefunden. Vielleicht hilft dir das noch.

Beim Gizmo war für den rle Test zu wenig Speicher vorhanden (750MB wegen GPU). Musste da mit swap auf USB3 Stick aushelfen.
Ich habe mich gewundert warum der höher getaktete GX mit verbesserter Architektur langsamer als der ältere ist. Wahrscheinlich macht da wirklich die Speicherbandbreite was aus.

Leider ist beim Gizmo die Doku kaum zu gebrauchen.
 
Hatte leider noch einige Speicherlöcher :mad: (alles zu schnell zusammen gefrickelt), sollte jetzt nicht mehr ins swap rennen
nogui option funktioniert jetzt (danke für den Tipp)
 
Nach längeren Installation diverser (SDKs,NDKs,…) + Dokus lesen,…, habe ich eine Android Version hinbekommen. Die Ergebnisse sehen (IMHO) nicht ganz unlogisch aus (habe nur ein altes Smartphone und Tab (Cortex-A7)).

Qualcomm Snapdragon 400 Cortex-A7@ 1,19GHz (Motorola G)

Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 113.857 MPixel
Test             rotozoom filter 'dithered' Result: 70.326 MPixel
Test        rotozoom filter 'linear filter' Result: 14.8906 MPixel
Test           rotozoom filter 'last pixel' Result: 32.0744 MPixel
Test                                 mandel Result: 2.15766 MPixel
Test                                 vertex Result: 8.92087 MVertex
Test                                  lines Result: 0.0151489 MLines
Test                            motion blur Result: 8.84524 MPixel
Test                              shellsort Result: 0.205294 MWords
Test                rle compress/uncompress Result: 115.201 MWords
Test                        zlib uncompress Result: 10.4038 MWords
Benchmark finished

Qualcomm Snapdragon 212 Cortex-A7@ 1,27GHz (Lenovo Tab TB2-X30F)

Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 101.668 MPixel
Test             rotozoom filter 'dithered' Result: 69.5409 MPixel
Test        rotozoom filter 'linear filter' Result: 14.6846 MPixel
Test           rotozoom filter 'last pixel' Result: 30.6004 MPixel
Test                                 mandel Result: 2.26662 MPixel
Test                                 vertex Result: 9.1881 MVertex
Test                                  lines Result: 0.0125322 MLines
Test                            motion blur Result: 8.00544 MPixel
Test                              shellsort Result: 0.200544 MWords
Test                rle compress/uncompress Result: 148.275 MWords
Test                        zlib uncompress Result: 11.3437 MWords
Benchmark finished

P.s.:

Raspberry PI2 @900MHz

Code:
Start Benchmark (15s per Test (11) use resolution 3820x2160):
Test                   rotozoom filter 'no' Result: 82,9827 MPixel
Test             rotozoom filter 'dithered' Result: 45,7836 MPixel
Test        rotozoom filter 'linear filter' Result: 10,4027 MPixel
Test           rotozoom filter 'last pixel' Result: 22,9738 MPixel
Test                                 mandel Result: 2,32585 MPixel
Test                                 vertex Result: 7,37519 MVertex
Test                                  lines Result: 0.011 MLines
Test                            motion blur Result: 12,5111 MPixel
Test                              shellsort Result: 0,26203 MWords
Test                rle compress/uncompress Result: 106,6 MWords
Test                        zlib uncompress Result: 8,84992 MWords
Benchmark finished

Hatte jetzt noch ein Google Nexus 5 (Snapdragon 800) in den Händen, leider war hier das Benchmarken schwierig, da scheinbar der Takt extrem schwankt, ganz grob kann man sagen ca. doppelte Leistung eines RPI3.
Gut jetzt langts dann mit dem Zeug ... :schaf:
 

Anhänge

  • Screenshot_2016-09-12-21-51-15.png
    Screenshot_2016-09-12-21-51-15.png
    158,2 KB · Aufrufe: 511
  • Screenshot_2016-09-13-20-52-10.png
    Screenshot_2016-09-13-20-52-10.png
    123 KB · Aufrufe: 501
Zuletzt bearbeitet:
Hehe, das Ergebnis von der Grafik oben ist schon erbärmlich. Ein veralteter Mobile-i5 Prozessor ist schneller als ein relativ neuer AMD A8 Desktop Prozessor, der noch dazu höher taktet :D
 
Ist zwar jetzt schon eher OT aber ich habe noch eine App gebaut und mehr Ergebnisse gesammelt. Im Anhang seht ihr Single/Multicore/IPC*. Zu beachten ist, dass unter Linux/Android gcc verwendet wurde und unter Windows MSVC2015, gcc erzeugt geschickter optimierten Code (durchschnittlich 10-15% schneller).

Noch einige Anmerkungen:

• Die Xeons sind unter Linux (gcc) getestet worden (restlichen Intels/AMD unter Windows (msvc15))
• Der genaue Takt ist bei den PC Systemen schwierig festzustellen (wegen Turbo)
• Bei den Smartphones schwankt der Takt auch (eher nach unten wegen Temperatur/Load etc.)
• Das IPC Diagramm ist deshalb eher ein Anhaltspunkt (*nicht zu ernst nehmen)
 

Anhänge

  • singleCore.png
    singleCore.png
    66,7 KB · Aufrufe: 487
  • multiCore.png
    multiCore.png
    62,6 KB · Aufrufe: 495
  • ipc.png
    ipc.png
    70,5 KB · Aufrufe: 491
Zurück
Oben