Dies ist eine mobil optimierte Seite, die schnell lädt. Wenn Sie die Seite ohne Optimierung laden möchten, dann klicken Sie auf diesen Text.

[Script] VDR-SC FFdecsa optimization

    Nobody is reading this thread right now.

tecfreak

Spezialist
Registriert
13. September 2010
Beiträge
616
Reaktionspunkte
322
Punkte
123
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:



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:
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:
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!
 
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
 
AW: [Script] VDR-SC FFdecsa optimization

War mein Fehler - sorry!

Bitte einfach nochmal runterladen.
 
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 bearbeitet von einem Moderator:
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.
 
AW: [Script] VDR-SC FFdecsa optimization

ja,ist richtig liegt im home verzeichnis

muß ich jetzt umziehen?
 
Zuletzt bearbeitet von einem Moderator:
AW: [Script] VDR-SC FFdecsa optimization

@dippes
./cpuopt.sh -D /Pfad/zum/FFdecsa -v
@tecfreak
Ja, jetzt geht es mit originaler Makefile.
 
AW: [Script] VDR-SC FFdecsa optimization

muß ich jetzt umziehen?

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.
 
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 bearbeitet von einem Moderator:
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.
 
AW: [Script] VDR-SC FFdecsa optimization

Mit der aktuellen Version (eben raus) könnte die Performance auf bestimmten System ggf. nochmal etwas besser sein.
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
 
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.
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…