RE: Multicore-Adaption von dcraw

#1 von hobel , 31.05.2008 21:40

Hallo,


Koennte fuer den einen oder anderen mit einer Multicore CPU interessant sein, ich habe
mal eine OpenMP parallele Version von dcraw gemacht, den Sourcecode kann man hier
pdcraw herunterladen.
Ich konnte nichts derartiges finden, deswegen habe ichs selbst gemacht (und hoffe
D. Coffins Regeln fuer Weiterverbreitung/Aenderungen beachted zu haben).

Ich habe das ganze nur unter Linux getested, und da geht's ganz gut.
Compilieren mit
gcc -fopenmp -DNO_JPEG -DNO_LCMS -O3 -ftree-vectorize -msse3 pdcraw.c -o pdcraw -lm
oder in der Art, ich habs mit 4.2.3 unter Ubuntu 8.04 getested.

Was kann man erwarten?
Keinen linearen Zuwachs, das ist klar, dazu sind zuwenige Teile
des Codes parallel, und das einlesen und rausschreiben dauert auch seine Zeit.

Auf einem Dualcore Intel E8200 auf 2.8 Ghz sehe ich:

Ubuntu dcraw fuer ein A700 Bild nach ppm: 2.872s
das pdcraw mit export OMP_NUM_THREADS=2: 1.892s

Ubuntu dcraw mit einem 7D Bild nach ppm: 1.497s
das pdcraw mit 2 Threads: 0.976s

ein File aus einer Mamiya ZD: 5.824s vs 3.274s

Mit dem grossen File habe ich auch mal auf einem 3Ghz Dual-Duacore gemessen (kein Quad, sondern 2 Sockelsystem):
1thread 5.269s 2 threads 3.113s 4 threads 2.073s

Parallelisiert ist: AHD und PPG (default Qualitaet und -q 2), etwas aus der Farbskalierung scale_colors, etwas
aus convert_to_rgb und etwas aus fuji_rotate fuer die Fujis mit 45Grad gedrehtem Sensor (die auch PPG als
default verwenden... PPG ist nicht Cache optimiert im Gegensatz zu AHD, das
koennte man machen, aber war mir aber zuviel Arbeit. Habe keine Fuji...)

Ich habe es mit gcc 4.2.3, Sun Studio 12 V5.9 fuer Linux und dem Intel 10.1 Compiler jeweils mit OpenMP
Schalter getested. Bestes Ergebnis mit SUN, dann kommt gcc, und danach intel, der hat aber ein Problem
und wird mit mehr Cores langsamer, also eher nicht verwenden.
Alle Ergenisse oben mit gcc, weil den die meisten haben werden, und der SUN Compiler
(auch kostenlos btw) nur minimal besser ist.

Da ich unter Windows keine Compiler habe (und keine Ahnung wie man unter Windows was baut)
kann ich da leider nicht weiterhelfen, und auch keine Ergebnise vorweisen.

Gruss
Holger


hobel  
hobel
Beiträge: 166
Registriert am: 21.10.2004


RE: Multicore-Adaption von dcraw

#2 von hobel , 23.09.2008 23:47

Update:

http://www.belleombre.de/pdcraw/dcraw.c

neue dcraw version 8.88, mehr parallele Teile,
auch wavelet denoising in Teilen parallel.

AHD laeuft ca. 1.9 mal schneller auf 2 Cores als auf einem.

Beispiel mit einem Alpha 900 Bild:

auf einem Dualcore:

Loading SONY DSLR-A900 image from ../samples/DSC08682.ARW ...
Using 2 threads
Loaded image in 0.190412 sec
Scaling with darkness 254, saturation 8190, and
multipliers 1.468750 1.000000 2.914062 1.000000
AHD interpolation...
Interpolated image in 2.621247 sec
Converting to sRGB colorspace...
Writing data to ../samples/DSC08682.ppm ...
Wrote image in 0.243106 sec, 3.014596 sec after loading

Mit nur einem Core:

Loading SONY DSLR-A900 image from ../samples/DSC08682.ARW ...
Using 1 threads
Loaded image in 0.189921 sec
Scaling with darkness 254, saturation 8190, and
multipliers 1.468750 1.000000 2.914062 1.000000
AHD interpolation...
Interpolated image in 4.946428 sec
Converting to sRGB colorspace...
Writing data to ../samples/DSC08682.ppm ...
Wrote image in 0.242537 sec, 5.679830 sec after loading

Compilieren wie gewohnt mit dem gcc -fopenmp ...,
sollte auch mit VisualStudio>=2005 gehen, da muss man
auch irgendwie OpenMP anmachen koennen.

Teile dieser Optimierung finden sich uebrigens auch in LibRaw 0.6.0, und damit
auch in der naechsten digikam Release:
http://www.digikam.org


hobel  
hobel
Beiträge: 166
Registriert am: 21.10.2004


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
| 2002- © so-fo.de | minolta-forum.de |
Xobor Einfach ein eigenes Forum erstellen
Datenschutz