[Insight-developers] itkScalarImageKmeansImageFilter3DTest timeouts

Bill Lorensen bill.lorensen at gmail.com
Sat Aug 23 11:45:05 EDT 2008


Luis,

Looks like my Borland continuous starting passing after your -kb fix.

Bill

On Sat, Aug 23, 2008 at 11:01 AM, Luis Ibanez <luis.ibanez at kitware.com> wrote:
>
> An extra bit,
>
> This test showed up failing this morning on Windows platforms:
> http://www.cdash.org/CDash/testSummary.php?project=2&name=itkScalarImageKmeansImageFilter3DTest&date=20080823
>
> It turned out that the nii.gz files were added without the "-kb" binary
> CVS flag. This has now been corrected. The test should now pass in the
> continuous builds and they should be green on tomorrow's nightlies.
>
> Of course,
> we'll have to wait for tomorrow's dashboard to be sure...
>
>
>   Luis
>
>
> -------------------
> Luis Ibanez wrote:
>>
>> Hans, Bill,
>>
>>
>> More on this issue.
>>
>> After tracking the calls with gprof, it turned out that the KmeansImage
>> filter uses the WeightedKdTreeGenerator, and that class was still using
>> the performance-wise-buggy QuicSelect() algorithm.
>>
>> Replacing QuickSelect() with NthElement()
>>
>> http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Numerics/Statistics/itkWeightedCentroidKdTreeGenerator.txx?root=Insight&r1=1.9&r2=1.10&sortby=date
>>
>> restored the performance of the ScalarKmeansImageFilter.
>>
>> The test is now passing in 39 seconds on a Debian Linux,
>> Xeon 2.6Gh dual processor machine (zion).
>>
>> The test has now been restored for all platforms.
>>
>> http://www.itk.org/cgi-bin/viewcvs.cgi/Testing/Code/Algorithms/CMakeLists.txt?root=Insight&r1=1.266&r2=1.267&sortby=date
>>
>>
>> We should see tomorrow the effect on other builds,
>> and then we may be able to close this bug.
>>
>>
>> A new bug has been reported for the QuickSelect performance issue:
>> http://public.kitware.com/Bug/view.php?id=7528
>>
>>
>>
>> Hans,
>>
>>   thanks a lot for adding this test,
>>   and tracking the problem.
>>
>>
>>
>>   Luis
>>
>>
>>
>> ---------------------
>> Luis Ibanez wrote:
>>
>>>
>>> Hi Hans, Bill,
>>>
>>>
>>>          Some more findings on this topic.
>>>
>>>
>>> Further profiling revealed that by replacing the QuickSelect()
>>> method in the itkKdTreeGenerator.txx with the NthElement() method,
>>> the performance of building the tree for a set of points improved
>>> by about two orders of magnitude.
>>>
>>> Here are the numbers (time units are seconds):
>>>
>>>
>>>   Number        Time With       Time With
>>>   of Points     QuickSelect     NthElement
>>>
>>>    10^3          0.01             0.00 (too small for "time")
>>>    40^3          3.03             0.13
>>>    60^3         33.69             0.56
>>>    70^3        103.00             1.01
>>>
>>>
>>> Based on this finding,
>>>
>>> the change has been committed to the itkKdTreeGenerator.txx
>>>
>>> http://www.itk.org/cgi-bin/viewcvs.cgi/Code/Numerics/Statistics/itkKdTreeGenerator.txx?root=Insight&r1=1.21&r2=1.22&sortby=date
>>>
>>> and a note has been added to bug entry 7481.
>>> http://public.kitware.com/Bug/view.php?id=7481
>>>
>>> The bad news is that this still doesn't reduce the computation
>>> time of the ScalarKMeansImageFilter.
>>>
>>>
>>> By now, it seems safe to conclude that:
>>>
>>>
>>>   a) QuickSelect in StatisticsAlgorithms has a bug
>>>      (at least a performance one)
>>>
>>>
>>>   b) The ScalarKMeansImageFilter has a performance
>>>      bug as well.
>>>
>>>
>>>
>>> I'm now profiling the ScalarKMeans filter with gprof.
>>> The main suspect is still an unusually high rank for
>>> SmartPointer operations....
>>>
>>>
>>>
>>>    Luis
>>>
>>>
>>> ----------------------
>>> Luis Ibanez wrote:
>>>
>>>>
>>>> Hi Bill, Hans,
>>>>
>>>>
>>>> I'm looking at this problem,
>>>> and here is what I have found so far:
>>>>
>>>>
>>>> A) The code is not going into an infinite loop,
>>>>   but it is certainly requiring a *very long* time to run.
>>>>
>>>>
>>>>     One image of   10 x 10 x 10  takes   0.05  seconds
>>>>     One image of   40 x 40 x 40  takes   4.37  seconds
>>>>     One image of   60 x 60 x 60  takes  38.05  seconds
>>>>     One image of   70 x 70 x 70  takes 115.44  seconds
>>>>
>>>>
>>>>   As you can see the process is of order larger than O(n3).
>>>>
>>>>
>>>> B) When going back to the versions of
>>>>
>>>>        itkStatisticsAlgorithm.h     -r 1.9
>>>>        itkStatisticsAlgorithm.txx   -r 1.19
>>>>
>>>>   The test runs a lot faster but the output of the KdTree
>>>>   generator is not correct. (e.g. the points are not in the
>>>>   correct bins).  :-/
>>>>
>>>>   The KMeans that are reported seem to be numerically reasonable,
>>>>   but that seems to be rather a coincidence.
>>>>
>>>>   Going back to these versions doesn't seem to be an option,
>>>>   given that the computation is not correct.
>>>>
>>>>
>>>>
>>>> C) I'm now using gprof to trace the functions that are taking
>>>>   most of the time. It may still be that we are making many
>>>>   unnecessary calls...
>>>>
>>>>   I'm also trying to separate whether the problem is originated
>>>>   in the ScalarImageToListAdaptor or in the KdTree itself.
>>>>   Initial runs of gprof on the KMeans image filter reports a high
>>>>   usage of SmartPointers, which in general is not a good sign...
>>>>
>>>>
>>>>
>>>>     Luis
>>>>
>>>>
>>>> --------------------
>>>> Bill Lorensen wrote:
>>>>
>>>>> Folks,
>>>>>
>>>>> The subject test has been timing out since it was checked in. This is
>>>>> a known bug. Unfortunately, this failing test causes cdash e-mails to
>>>>> be sent every day and for every checkin. I'm concerned that all of
>>>>> these e-mails and test failures on the dashboard will hide new
>>>>> problems. I have modified the CMakeLists.txt file to only report this
>>>>> timeout on one dashboard: dash16.kitware. This way, the error will not
>>>>> be forgotten (or maybe it already has been) and the excess e-mails
>>>>> will be prevented.
>>>>>
>>>>> Bill
>>>>>
>>>>
>>>
>>
>


More information about the Insight-developers mailing list