Performance problem with colorspace conversion in lcms2
Lukast dev
lukast.dev at gmail.com
Tue Oct 1 20:15:30 UTC 2013
Hi all,
I'm working on Gmic as you know and I hit performance bottleneck
when converting Krita layers to gmic layers and back and making the whole
experience for Krita artists quite slow.
What I'm doing -- converting Krita colorspace uchar 8-bit rgba to float
32-bit rgba.
I found out that the bottleneck is actually in lcms2
There is benchmark where is roundtrip conversion rgb8-float-rgb8
You can run it at
"build/calligra/krita/plugins/extensions/gmic/tests/KisGmicBenchmark
testConversion"
Source:
calligra/krita/plugins/extensions/gmic/tests/kis_gmic_benchmark.cpp::testConversion()
>From the valgrind log [1] we can see that the bottleneck (98% of time) is in
KoColorSpace::convertTo
and there in
cmsDoTransform
and there it looks like it is using a lot of math pow, exp per pixel which
is of course slow.
For 3840x2400 image it takes 6,5 second to convert from rgba8 to rgba32
float on my laptop.
I wrote this hack to convert Krita pixels from rgba8->rgba32 float:
http://paste.kde.org/p19eeee78/
It takes 120 ms to convert Krita layer to gmic with this hack way, so it's
60-times faster.
Of course it ignores all rendering intends and profile, but I wonder if
there is some way to tell
lcms2 to do it stupidly and simply and avoid stuff like: pow, exp1 per
pixel and cmsEvalToneCurveFloat?
[1] valgrind log
https://www.dropbox.com/s/wvazoys09p0ujtb/callgrind-convert-to.tgz
Lukas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kimageshop/attachments/20131001/3c41b20a/attachment.html>
More information about the kimageshop
mailing list