From kde-kimageshop Fri Dec 24 16:17:41 2010 From: Geoffry Song Date: Fri, 24 Dec 2010 16:17:41 +0000 To: kde-kimageshop Subject: Re: [patch] on the performance of KisCircleMaskGenerator::valueAt Message-Id: X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=129320753811414 On Fri, Dec 24, 2010 at 8:40 AM, Dmitry Kazakov wrote: > > > On Fri, Dec 24, 2010 at 7:00 AM, Geoffry Song wrote: >> >> I noticed that KisCircleMaskGenerator::valueAt(), which can easily be >> called millions of times in a single stroke, has some rather >> inefficient code (in particular, an unnecessary sqrt()), so I took the >> liberty of optimizing the code a bit. This patch should somewhat >> improve the performance of large brushes, especially the sketch brush >> with a large diameter. No, it is not a large difference. >> >> On my machine, the old code took about 26 nanoseconds per call, and >> the new code takes 15 nanoseconds per call. >> >> (Raw data: old code, time per call: 2.6188e-08, 2.6148e-08, 2.612e-08, >> 2.6688e-08, 2.668e-08, 2.6868e-08. New code: 1.4952e-08, 1.5532e-08, >> 1.4972e-08, 1.4964e-08, 1.4892e-08, 1.4868e-08, 1.4876e-08, >> 1.5144e-08, 1.4872e-08, 1.4872e-08, 1.4876e-08. Each sample is an >> average over 2.5 billion calls) > > Hi! > Cool patch! We have special benchmarks for strokes in Krita. They are placed > in ./krita/benchmarks/ folder. The one that tests strokes is called > KisStrokeBenchmark (you need to have BUILD_TESTS set to on in cmake). > > Your numbers from callgrind (i guess) look cool! It would be interesting to > see the results of that benchmark ;) The numbers are actually from a very crude benchmark I put into the constructor. I ran KisStrokeBenchmark 20 times each for the old and new code. Only the first two tests (pixelbrush300px and bixpelbrush300pxRL) call KisCircleMaskGenerator::valueAt a significant number of times, so unsurprisingly they are the only benchmarks that show a significant change: 489.9 msec (stdev 14.62) to 456.8 msec (stdev 14.20) for pixelbrush300px, and 2788 msec (stdev 73.25) to 2619 msec (stdev 88.89) for pixelbrush300pxRL. It's not a big difference, but it's there. -- Segmentation fault _______________________________________________ kimageshop mailing list kimageshop@kde.org https://mail.kde.org/mailman/listinfo/kimageshop