Marius, Sound like a great idea! Those are some great looking numbers. Also keep in mind that I got rather difference performance for different types with fill.
Using std::copy, and std::fill are both good things. Keep an eye out for usage of std::copy too, that can have even bigger change in performance. Brad On Apr 10, 2013, at 8:26 AM, <[email protected]> wrote: > Hi Brad, > > I saw your gerrit topic http://review.source.kitware.com/#/c/10762/ > And I wondered whether such a change would have implications elsewhere in the > toolkit, most notably the image registration framework where array.Fill(0) is > used quite a lot for initialization of derivatives and transform parameters. > > So, I did a test, see the attached code, to compare an itk.Fill with a > standard C fill using a for loop, with a C++ fill using std::fill_n. The > results are in favour of the C++ way, for a tested array size between 1e2 and > 1e7. > > On my Win7 64bit machine using VS2008: > > Array size = 100, repetitions = 20000000 > The elapsed time for a itk.Fill 2483 ms. > The elapsed time for a C fill 4748 ms. > The elapsed time for a C++ fill_n 543 ms. > > Array size = 1000, repetitions = 2000000 > The elapsed time for a itk.Fill 2418 ms. > The elapsed time for a C fill 4585 ms. > The elapsed time for a C++ fill_n 404 ms. > > Array size = 10000, repetitions = 200000 > The elapsed time for a itk.Fill 2534 ms. > The elapsed time for a C fill 4605 ms. > The elapsed time for a C++ fill_n 618 ms. > > Array size = 100000, repetitions = 20000 > The elapsed time for a itk.Fill 2553 ms. > The elapsed time for a C fill 4593 ms. > The elapsed time for a C++ fill_n 580 ms. > > Array size = 1000000, repetitions = 2000 > The elapsed time for a itk.Fill 2605 ms. > The elapsed time for a C fill 4665 ms. > The elapsed time for a C++ fill_n 1284 ms. > > Array size = 10000000, repetitions = 200 > The elapsed time for a itk.Fill 3289 ms. > The elapsed time for a C fill 4780 ms. > The elapsed time for a C++ fill_n 1168 ms. > > --- > On my linux Ubuntu with gcc 4.6.3: > > Array size = 100, repetitions = 20000000 > The elapsed time for a itk.Fill 1870000 ms. > The elapsed time for a C fill 1660000 ms. > The elapsed time for a C++ fill_n 490000 ms. > > Array size = 1000, repetitions = 2000000 > The elapsed time for a itk.Fill 1520000 ms. > The elapsed time for a C fill 1520000 ms. > The elapsed time for a C++ fill_n 390000 ms. > > Array size = 10000, repetitions = 200000 > The elapsed time for a itk.Fill 1510000 ms. > The elapsed time for a C fill 1500000 ms. > The elapsed time for a C++ fill_n 380000 ms. > > Array size = 100000, repetitions = 20000 > The elapsed time for a itk.Fill 1500000 ms. > The elapsed time for a C fill 1500000 ms. > The elapsed time for a C++ fill_n 440000 ms. > > Array size = 1000000, repetitions = 2000 > The elapsed time for a itk.Fill 1500000 ms. > The elapsed time for a C fill 1500000 ms. > The elapsed time for a C++ fill_n 510000 ms. > > Array size = 10000000, repetitions = 200 > The elapsed time for a itk.Fill 1530000 ms. > The elapsed time for a C fill 1520000 ms. > The elapsed time for a C++ fill_n 1100000 ms. > > > I did not further test this on the effect on registration, but changing the > itk::Array::Fill function to use std::fill_n may be a nice idea. > What do you think? > > Marius > > Marius Staring, PhD > Division of Image Processing (LKEB) > Department of Radiology > Leiden University Medical Center > PO Box 9600, 2300 RC Leiden, The Netherlands > phone: +31 (0)71 526 2137, fax: +31 (0)71 524 8256 > [email protected] > > <CMakeLists.txt><test.cxx>
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Kitware offers ITK Training Courses, for more information visit: http://kitware.com/products/protraining.php Please keep messages on-topic and check the ITK FAQ at: http://www.itk.org/Wiki/ITK_FAQ Follow this link to subscribe/unsubscribe: http://www.itk.org/mailman/listinfo/insight-developers
