Ticket #6311 (closed: fixed)

Opened 8 years ago

Last modified 5 years ago

PeakOverlay SpeedUp Part 2 (Guided Optimisation)

Reported by: Owen Arnold Owned by: Owen Arnold
Priority: critical Milestone: Release 2.4
Component: Mantid Keywords:
Cc: Blocked By: #6291
Blocking: Tester: Nick Draper

Description

A pre-requisite for this ticket is to have #6291 implemented and to have benchmark performance data from the performance tests.

I can then start working on performance enhancements using the quantitative performance results to verify that the features do actually improve the performance measurably (and definitely do not degrade the performance!). If I can't improve the performance, it would be much better to leave the code alone (optimised for readability). If I can improve the performance, it will be good news, because the SliceViewer must work rapidly.

Ideas for optimisation:

  • Determine whether a peak widget is in range of the slice, if not, simply do not allow it to draw.
  • Look at the setSliceAt method and try to calculate the radius at distance, opacity at distance etc faster.

Attachments

TEST-SliceViewerTest.PhysicalSphericalPeakTestPerformance.xml (929 bytes) - added by Owen Arnold 8 years ago.
Newer Perf Tests
TEST-SliceViewerTest.PhysicalCrossPeakTestPerformance.xml (918 bytes) - added by Owen Arnold 8 years ago.
Newer Perf Tests

Change History

comment:1 Changed 8 years ago by Owen Arnold

  • Status changed from new to accepted

comment:2 Changed 8 years ago by Owen Arnold

I've just attached the ORIGINAL performance measurements on my machine. That means, the performance test speeds prior to any work under this ticket.

Changed 8 years ago by Owen Arnold

Newer Perf Tests

comment:3 Changed 8 years ago by Owen Arnold

Had to re-add the benchmark tests because I changed these as part of #6291.

comment:4 Changed 8 years ago by Owen Arnold

refs #6311. Query method and other optimsiations.

Some work has been done on caching calculated values and therefore the time for the setSlicePoint has been reduced by about 5%. I added a public method called isViewable, which should allow the client code to pre-query the PhysicalPeak before painting the QtWidget (expensive). While this wont show up in the peformance tests it should make a big difference to the actual usage peformance because usually only a small number of the total available peaks are interacting with the slice at any time. Overall, the changes made have produced a slight imporvement in the measureable performance.

Changeset: 9420245b9f45f6afeed61dfad8626d952d55d2b3

comment:5 Changed 8 years ago by Owen Arnold

refs #6311 #6291. Increase work in perf tests.

Ive had to increase the work done in the peformance tests, because they are running too fast in the Release-mode build server enviroments to be useful.

Changeset: 79d2a81db39d9742092d647d2bc34b79ade0ccfa

Changed 8 years ago by Owen Arnold

Newer Perf Tests

comment:6 Changed 8 years ago by Owen Arnold

refs #6311. Optisation around setSlicePoint t down ~3%.

Changeset: 69af9e57970aa52d4ea1502245a2a4ca2db8606f

comment:7 Changed 8 years ago by Owen Arnold

refs #6311. Add isViewable optimsiation.

Changeset: bab3a7cbbb8eb45a9f5c93be508f5136d4b3319b

comment:8 Changed 8 years ago by Owen Arnold

  • Status changed from accepted to verify
  • Resolution set to fixed

Tester: Ignore the performance degrade to the draw routines. This will never actually be realised because the client code should call isViewable before calling draw. For both the PhysicalSphericalPeakTestPerformance and the PhysicalCrossPeakTestPerformance, I have managed to speed up the setSlicePoint method between 3-5%. The big improvement in peformance is not measurable, this comes from having the PeakOvelaySphere and the PeakOverlayCross Widgets call isViewable before drawing. This makes sense, because at any one time, only a small fraction of the available peaks will be sliced.

comment:9 Changed 8 years ago by Owen Arnold

refs #6311. Query method and other optimsiations.

Some work has been done on caching calculated values and therefore the time for the setSlicePoint has been reduced by about 5%. I added a public method called isViewable, which should allow the client code to pre-query the PhysicalPeak before painting the QtWidget (expensive). While this wont show up in the peformance tests it should make a big difference to the actual usage peformance because usually only a small number of the total available peaks are interacting with the slice at any time. Overall, the changes made have produced a slight imporvement in the measureable performance.

Changeset: 8f1576a871b6e784926413482fb2ed0d5e60dcc5

comment:10 Changed 8 years ago by Owen Arnold

refs #6311 #6291. Increase work in perf tests.

Ive had to increase the work done in the peformance tests, because they are running too fast in the Release-mode build server enviroments to be useful.

Changeset: 1323e8ccc9dd33afd114a45fc10ee627b1ca5e4f

comment:11 Changed 8 years ago by Owen Arnold

refs #6311. Optisation around setSlicePoint t down ~3%.

Changeset: 3c7a92316a9a13e3d65a44e3c8e69ba2ee4ab877

comment:12 Changed 8 years ago by Owen Arnold

refs #6311. Add isViewable optimsiation.

Changeset: f3fa0e536fbdcd816c88ce7960aa5d3a161a6356

comment:13 Changed 8 years ago by Nick Draper

  • Status changed from verify to verifying
  • Tester set to Nick Draper

comment:14 Changed 8 years ago by Nick Draper

  • Status changed from verifying to closed

Performance tests in place and running. Peak display performance is good

comment:15 Changed 5 years ago by Stuart Campbell

This ticket has been transferred to github issue 7157

Note: See TracTickets for help on using tickets.