1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[Script] VDR-SC FFdecsa optimization

Dieses Thema im Forum "CS VDR-SC" wurde erstellt von tecfreak, 19. September 2011.

  1. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    EDIT: Erweiterte/verbesserte Funktionsweise (V9)
    EDIT: Option "-v" entfernt (nicht mehr nötig)
    EDIT: Support für "native" flags hinzugefügt (abschaltbar "-n")
    EDIT: Anhang entfernt.

    EDIT: Neue Versionen nur noch unter folgender URL:

    Dieser Link ist nur für Mitglieder!!! Jetzt kostenlos Registrieren ?




    Hallo,

    unter der oben angegebenen URL findet ihr ein Script welches bei der Ermittlung der optimalen FFdecsa Parameter helfen soll.
    Das script erwartet als Parameter den Pfad zum FFdecsa Ordner im vdr-sc source Verzeichnis, kann aber auch weggelassen werden, wenn das script sich im selben Verzeichnis befindet wie der FFdecsa Ordner (üblicherweise direkt im vdr-sc source Verzeichnis).
    Ansonsten versucht das script den Ordner selbst zu lokalisieren.


    (Nur für fortgeschrittene User)
    Eigene compiler flags können im script über die Variable "OwnFlags" definiert werden.
    Diese sollten in dem Fall vollständig und vorallem korrekt sein, ansonsten bricht das script ab oder die Tests werden fehlschlagen.
    Außerdem kann über die Variable "FFdecsaDIR" der Pfad zum FFdecsa source Verzeichnis angegeben werden.


    Das Script kopieren und z.B. unter "cpuopt.sh" abspeichern und anschließend ausführbar machen:
    Code:
    chmod +x cpuopt.sh


    Parameter:
    Code:
    ### FFdecsa optimization helper/benchmark
    ### Version 9
    
    Usage: ./cpuopt.sh [OPTION [ARG]]...
    
    Options:
    -D [PATH]     path to FFdecsa source directory
    -O [LEVEL]    set custom optimization level e.g. S, 2 or 3
    -P [MODE]     test only the given PARALLEL_MODE
    -T [N]        number of tests per mode
    -e            extended - test all PARALLEL_MODEs
    -i            print system info - do not perform FFdecsa test
    -n            disable "native" flags if gcc/g++ >=4.2
    -q            be quiet - only results, warnings and errors
    -h            this output
    


    Beispiel:
    Code:
    ./cpuopt.sh -D /usr/local/src/vdr-plugin-sc/FFdecsa
    

    Ausgabe:
    Code:
    ### FFdecsa optimization helper/benchmark
    ### Version 9
    
    
    ### CPU-INFO ###
    System: x86
    Auto detected arch: k8
    
    Vendor-ID: AuthenticAMD
    CPU-Family: 15
    CPU-Model: 107
    Flags:  fpu de tsc msr pae cx8 apic cmov pat clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt 3dnowext 3dnow up pni hypervisor cmp_legacy extapic cr8_legacy 3dnowprefetch
    
    gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
    Compilers "native" flags disabled or unsupported
    
    
    ### FFdeCSA TEST ###
    Using compiler: g++
    Flags: -march=k8 -fomit-frame-pointer -fexpensive-optimizations -funroll-loops
    
    Testing optimization levels 2 and 3
    
      Level -O2:
        PARALLEL_32_INT
          - 143, 141, 143, 142, 142, 142, 143, 143, 143, 142
          - 143 Mbit/s max.
        PARALLEL_64_2INT
          - 146, 143, 146, 146, 146, 146, 146, 146, 146, 146
          - 146 Mbit/s max.
        PARALLEL_64_LONG
          - 112, 111, 112, 109, 112, 110, 110, 111, 110, 110
          - 112 Mbit/s max.
        PARALLEL_64_MMX
          - 233, 235, 234, 232, 234, 235, 235, 235, 233, 235
          - 235 Mbit/s max.
        PARALLEL_128_2LONG
          - 127, 127, 127, 126, 127, 127, 128, 129, 124, 128
          - 129 Mbit/s max.
        PARALLEL_128_2MMX
          - 264, 261, 264, 266, 266, 263, 263, 262, 263, 215
          - 266 Mbit/s max.
        PARALLEL_128_SSE
          - 228, 229, 231, 229, 229, 231, 229, 229, 231, 229
          - 231 Mbit/s max.
        PARALLEL_128_SSE2
          - 245, 248, 247, 247, 233, 246, 244, 243, 238, 246
          - 248 Mbit/s max.
      Fastest PARALLEL_MODE = PARALLEL_128_2MMX (266 Mbit/s)
    
      Level -O3:
        PARALLEL_32_INT
        ...failed!
        PARALLEL_64_2INT
        ...failed!
        PARALLEL_64_LONG
          - 113, 113, 112, 113, 113, 113, 112, 113, 113, 113
          - 113 Mbit/s max.
        PARALLEL_64_MMX
          - 212, 212, 211, 211, 212, 210, 212, 211, 211, 212
          - 212 Mbit/s max.
        PARALLEL_128_2LONG
          - 116, 116, 116, 116, 116, 116, 116, 116, 116, 116
          - 116 Mbit/s max.
        PARALLEL_128_2MMX
          - 253, 256, 255, 253, 252, 253, 255, 256, 210, 254
          - 256 Mbit/s max.
        PARALLEL_128_SSE
          - 214, 214, 214, 214, 215, 214, 215, 214, 215, 215
          - 215 Mbit/s max.
        PARALLEL_128_SSE2
          - 249, 251, 248, 249, 249, 249, 249, 247, 250, 251
          - 251 Mbit/s max.
      Fastest PARALLEL_MODE = PARALLEL_128_2MMX (256 Mbit/s)
    
    
    Best result with -O2 and PARALLEL_128_2MMX at 266 Mbit/s
    
    
    ### VDR-SC FFdeCSA Makefile OPTS ###
    CPUOPT     ?= k8
    PARALLEL   ?= PARALLEL_128_2MMX
    CSAFLAGS   ?= -O2 -fomit-frame-pointer -fexpensive-optimizations -funroll-loops
    
    ### GENERIC FFdeCSA make OPTS ###
    FLAGS="-O2 -march=k8 -fomit-frame-pointer -fexpensive-optimizations -funroll-loops" PARALLEL_MODE=PARALLEL_128_2MMX
    


    Über komplette Testresultate würde ich mich freuen.
     
    Zuletzt bearbeitet: 22. September 2011
    #1
  2. phantom

    Nervigen User Advertisement

  3. JyJyJ
    Offline

    JyJyJ Newbie

    Registriert:
    6. Mai 2011
    Beiträge:
    11
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    AW: [Script] VDR-SC FFdecsa optimization

    ### CPU-INFO ###
    System: x86
    Vendor-ID: AuthenticAMD
    CPU-Family: 16
    CPU-Model: 6
    Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save

    ### FFdeCSA TEST ###
    Using compiler: g++
    with flags: -Wall -fPIC -O3 -march=amdfam10 -fomit-frame-pointer -funroll-loops

    Trying various FFdecsa optimizations...
    PARALLEL_32_INT: test failed
    PARALLEL_32_4CHAR: 65
    PARALLEL_32_4CHARA: 41
    PARALLEL_64_8CHAR: 59
    PARALLEL_64_8CHARA: 36
    PARALLEL_64_2INT: test failed
    PARALLEL_64_LONG: 133
    PARALLEL_64_MMX: 237
    PARALLEL_128_16CHAR: 59
    PARALLEL_128_16CHARA: 44
    PARALLEL_128_4INT: 185
    PARALLEL_128_2LONG: 170
    PARALLEL_128_2MMX: 274
    PARALLEL_128_SSE: 275
    PARALLEL_128_SSE2: 392
    Choosing PARALLEL_MODE = PARALLEL_128_SSE2

    ### VDR-SC FFdeCSA MAKEFILE OPTS ###
    CPUOPT ?= amdfam10
    PARALLEL ?= PARALLEL_128_SSE2
    CSAFLAGS ?= -Wall -fPIC -O3 -fomit-frame-pointer -funroll-loops

    Danke für das nützliche Skript!!

    EDIT: Oben hatte ich schon die Makefile von Hand verbessert, mit Original Makefile sieht es so aus:

    ### CPU-INFO ###
    System: x86
    Vendor-ID: AuthenticAMD
    CPU-Family: 16
    CPU-Model: 6
    Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save

    ### FFdeCSA TEST ###
    Using compiler: g++
    with flags: -Wall -fPIC -O3 -march=amdfam10 -fomit-frame-pointer -funroll-loops

    Trying various FFdecsa optimizations...
    PARALLEL_32_INT: test failed
    PARALLEL_32_4CHAR: 44
    PARALLEL_32_4CHARA: 35
    PARALLEL_64_8CHAR: 40
    PARALLEL_64_8CHARA: 31
    PARALLEL_64_2INT: test failed
    PARALLEL_64_LONG: 106
    PARALLEL_64_MMX: 205
    PARALLEL_128_16CHAR: 45
    PARALLEL_128_16CHARA: 37
    PARALLEL_128_4INT: 138
    PARALLEL_128_2LONG: 106
    PARALLEL_128_2MMX: 184
    PARALLEL_128_SSE: build failed
    PARALLEL_128_SSE2: build failed
    Choosing PARALLEL_MODE = PARALLEL_64_MMX

    ### VDR-SC FFdeCSA MAKEFILE OPTS ###
    CPUOPT ?= amdfam10
    PARALLEL ?= PARALLEL_64_MMX
    CSAFLAGS ?= -Wall -fPIC -O3 -fomit-frame-pointer -funroll-loops


    diff Makefile.opt Makefile.orig
    22c22
    < FLAGS ?= -Wall -fPIC -O3 -march=amdfam10 -msse2 -fomit-frame-pointer -fexpensive-optimizations -funroll-loops
    ---
    > FLAGS ?= -Wall -fPIC -O3 -march=pentium -mmmx -fomit-frame-pointer -fexpensive-optimizations -funroll-loops
    39,40d38
    <
    < PARALLEL_MODE ?= PARALLEL_128_SSE2
     
    Zuletzt bearbeitet: 19. September 2011
    #2
    tecfreak gefällt das.
  4. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    AW: [Script] VDR-SC FFdecsa optimization

    Alles klar!

    Da war wohl noch ein kleiner Fehler im make Teil. Die übergebenen Variablen wurden durch die im Makefile überschrieben. Nun läuft das über Umgebungsvariablen.

    Hatte selber im FFdecsa Makefile die FLAGS Zeile mal angepasst, also genau wie bei dir im ersten Versuch.

    Schau mal bitte obs nun mit jungfreulichen Sourcen klappt.


    Danke dir vielmals fürs Feedback!
     
    #3
  5. dippes
    Offline

    dippes Spezialist

    Registriert:
    23. April 2011
    Beiträge:
    674
    Zustimmungen:
    80
    Punkte für Erfolge:
    28
    Ort:
    Zuhause
    AW: [Script] VDR-SC FFdecsa optimization

    bekomme nur fehlermeldungen beim aufruf

    Kampfsau FFdecsa # ./cpuopt.sh
    Code:
    bash: ./cpuopt.sh: /bin/bash^M: Defekter Interpreter: Datei oder Verzeichnis nicht gefunden
     
    #4
  6. MegaV0lt
    Offline

    MegaV0lt Hacker

    Registriert:
    24. April 2011
    Beiträge:
    352
    Zustimmungen:
    80
    Punkte für Erfolge:
    28
    Geschlecht:
    männlich
    Ort:
    Neuland
    Hast Du es auch im UNIX Format gespeichert?
     
    #5
  7. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    AW: [Script] VDR-SC FFdecsa optimization

    War mein Fehler - sorry!

    Bitte einfach nochmal runterladen.
     
    #6
  8. dippes
    Offline

    dippes Spezialist

    Registriert:
    23. April 2011
    Beiträge:
    674
    Zustimmungen:
    80
    Punkte für Erfolge:
    28
    Ort:
    Zuhause
    AW: [Script] VDR-SC FFdecsa optimization

    jetzt siehts so aus

    Code:
    Kampfsau FFdecsa # ./cpuopt.sh
    
    Error: FFdecsa not found!
    Please specify the correct path to FFdecsa source dir using -D option
    FFdecsa test disabled!
    
    CPUOPT     ?= core2
    PARALLEL   ?= ???
    CSAFLAGS   ?= -Wall -fPIC -O3 -funroll-loops
    
    
     
    Zuletzt von einem Moderator bearbeitet: 20. September 2011
    #7
  9. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    AW: [Script] VDR-SC FFdecsa optimization

    Den Pfad zum FFdecsa Verzeichnis solltest du schon mit angeben. Steht auch so im ersten Post.

    Wenn du nicht weisst wo der ist, dann probier mal folgendes:
    Code:
    ./cpuopt.sh -v -D "`find /usr -name 'FFdecsa' -type d | grep -v -m 1 contrib`"
    Wenn das nicht hinhaut, dann hast du entweder keine sources von vdr-sc oder einfach nicht nach "/usr/..." entpackt.
     
    #8
  10. dippes
    Offline

    dippes Spezialist

    Registriert:
    23. April 2011
    Beiträge:
    674
    Zustimmungen:
    80
    Punkte für Erfolge:
    28
    Ort:
    Zuhause
    AW: [Script] VDR-SC FFdecsa optimization

    ja,ist richtig liegt im home verzeichnis

    muß ich jetzt umziehen?
     
    Zuletzt von einem Moderator bearbeitet: 20. September 2011
    #9
  11. JyJyJ
    Offline

    JyJyJ Newbie

    Registriert:
    6. Mai 2011
    Beiträge:
    11
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    AW: [Script] VDR-SC FFdecsa optimization

    @dippes
    ./cpuopt.sh -D /Pfad/zum/FFdecsa -v
    @tecfreak
    Ja, jetzt geht es mit originaler Makefile.
     
    #10
  12. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    AW: [Script] VDR-SC FFdecsa optimization

    Für die, die nicht in der Lage sind selber einen Parameter anzugeben -
    die neuste Version sucht selbständig nach einem Pfad zum FFdecsa source Verzeichnis (in "/usr/src", "/usr/local/src", "/home").

    @JyJyJ
    Danke nochmal fürs Testen.
     
    #11
  13. dippes
    Offline

    dippes Spezialist

    Registriert:
    23. April 2011
    Beiträge:
    674
    Zustimmungen:
    80
    Punkte für Erfolge:
    28
    Ort:
    Zuhause
    AW: [Script] VDR-SC FFdecsa optimization

    habs jetzt mit dem aktuellen script durchlaufen lassen

    Code:
    Choosing PARALLEL_MODE = PARALLEL_128_SSE2 (409 Mbit/s)
    
    ### VDR-SC FFdeCSA MAKEFILE OPTS ###
    CPUOPT     ?= native
    PARALLEL   ?= PARALLEL_128_SSE2
    CSAFLAGS   ?= -Wall -fPIC -mtune=native  -funroll-loops
    
    ### GENERIC FFdeCSA MAKE OPTS ###
    FLAGS="-Wall -fPIC -O3 -march=native -mtune=native  -funroll-loops" PARALLEL_MODE=PARALLEL_128_SSE2
    
    wieso wird jetzt bei den cpuopt native vorgeschlagen? sonst war es core2?

    was ist denn jetzt besser für mein system?
     
    Zuletzt von einem Moderator bearbeitet: 20. September 2011
    #12
  14. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    AW: [Script] VDR-SC FFdecsa optimization

    Native bedeutet, dass der compiler deine cpu kennt und damit keine genaueren angaben mehr nötig sind.

    Du kannst das aber mit der Option "-n" auch wieder abschalten und hast wieder wie gewohnt "core2" dort stehen.

    Mit der aktuellen Version (eben raus) könnte die Performance auf bestimmten System ggf. nochmal etwas besser sein.


    Schau mal wie es jetzt einmal mit "-n" und einmal ohne aussieht.
    "-v" ist jetzt nicht mehr nötig wie ich oben schon mal geschrieben habe.
     
    #13
  15. JyJyJ
    Offline

    JyJyJ Newbie

    Registriert:
    6. Mai 2011
    Beiträge:
    11
    Zustimmungen:
    4
    Punkte für Erfolge:
    3
    AW: [Script] VDR-SC FFdecsa optimization

    Ja!

    ./cpuoptv7.sh
    FFdecsa optimization helper (benchmark) V7
    ### CPU-INFO ###
    System: x86
    Vendor-ID: AuthenticAMD
    CPU-Family: 16
    CPU-Model: 6
    Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save

    gcc version 4.5.0 20100604 [gcc-4_5-branch revision 160292] (SUSE Linux)
    Using compilers "native" flags

    ### FFdeCSA TEST ###
    Using compiler: g++
    with flags: -O3 -march=native -mmmx -msse -msse2 -fexpensive-optimizations -funroll-loops

    Trying various FFdecsa optimizations...
    PARALLEL_32_INT: test failed
    PARALLEL_32_4CHAR: 67
    PARALLEL_32_4CHARA: 40
    PARALLEL_64_8CHAR: 60
    PARALLEL_64_8CHARA: 38
    PARALLEL_64_2INT: test failed
    PARALLEL_64_LONG: 129
    PARALLEL_64_MMX: 313
    PARALLEL_128_16CHAR: 59
    PARALLEL_128_16CHARA: 42
    PARALLEL_128_4INT: 183
    PARALLEL_128_2LONG: 169
    PARALLEL_128_2MMX: 261
    PARALLEL_128_SSE: 370
    PARALLEL_128_SSE2: 417

    Choosing PARALLEL_MODE = PARALLEL_128_SSE2 (417 Mbit/s)

    ### VDR-SC FFdeCSA MAKEFILE OPTS ###
    CPUOPT ?= native
    PARALLEL ?= PARALLEL_128_SSE2
    CSAFLAGS ?= -O3 -march=native -mmmx -msse -msse2 -fexpensive-optimizations -funroll-loops

    ### GENERIC FFdeCSA MAKE OPTS ###
    FLAGS="-O3 -march=native -mmmx -msse -msse2 -fexpensive-optimizations -funroll-loops" PARALLEL_MODE=PARALLEL_128_SSE2


    ./cpuoptv7.sh -n
    FFdecsa optimization helper (benchmark) V7
    ### CPU-INFO ###
    System: x86
    Vendor-ID: AuthenticAMD
    CPU-Family: 16
    CPU-Model: 6
    Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt npt lbrv svm_lock nrip_save

    gcc version 4.5.0 20100604 [gcc-4_5-branch revision 160292] (SUSE Linux)
    Compilers "native" flags disabled or unsupported

    ### FFdeCSA TEST ###
    Using compiler: g++
    with flags: -O3 -march=amdfam10 -fexpensive-optimizations -funroll-loops

    Trying various FFdecsa optimizations...
    PARALLEL_32_INT: test failed
    PARALLEL_32_4CHAR: 68
    PARALLEL_32_4CHARA: 41
    PARALLEL_64_8CHAR: 60
    PARALLEL_64_8CHARA: 38
    PARALLEL_64_2INT: test failed
    PARALLEL_64_LONG: 130
    PARALLEL_64_MMX: 314
    PARALLEL_128_16CHAR: 59
    PARALLEL_128_16CHARA: 42
    PARALLEL_128_4INT: 183
    PARALLEL_128_2LONG: 168
    PARALLEL_128_2MMX: 260
    PARALLEL_128_SSE: 373
    PARALLEL_128_SSE2: 418

    Choosing PARALLEL_MODE = PARALLEL_128_SSE2 (418 Mbit/s)

    ### VDR-SC FFdeCSA MAKEFILE OPTS ###
    CPUOPT ?= amdfam10
    PARALLEL ?= PARALLEL_128_SSE2
    CSAFLAGS ?= -O3 -march=amdfam10 -fexpensive-optimizations -funroll-loops

    ### GENERIC FFdeCSA MAKE OPTS ###
    FLAGS="-O3 -march=amdfam10 -fexpensive-optimizations -funroll-loops" PARALLEL_MODE=PARALLEL_128_SSE2


    Noch schneller (429) wird es aber mit
    FLAGS ?= -O3 -march=amdfam10 -msse2 -fomit-frame-pointer -fexpensive-optimizations -funroll-loops und PARALLEL_MODE=PARALLEL_128_SSE2
     
    #14
  16. tecfreak
    Offline

    tecfreak Hacker

    Registriert:
    13. September 2010
    Beiträge:
    418
    Zustimmungen:
    128
    Punkte für Erfolge:
    43
    AW: [Script] VDR-SC FFdecsa optimization

    Habs angepasst und "-fomit-frame-pointer" hinzugefügt.
    Auf "-msse2" kann man in dem Fall verzichten, da bereits durch "-march=amdfam10" definiert.

    V8 ist online.

    ...und nochmal Danke für den feedback.
     
    #15

Diese Seite empfehlen