Weak performance on Windows 10 with Igor 7 and Qt-Toolkit

Hello everyone,

i have a new Laptop, which should in general be fast enough to work with Igor Pro 7. (HP-Probook 455 G4, AMD A10 Quadcore, 8 GB DDR4 RAM, SSD, WIN10Pro)

But tragically i recognized that our program written to open AFM-Data is executed much slower than on my previous laptop. (Intel P6200, 4 GB RAM, HDD, Win7Pro). So to find out what slows the new laptop down i have used the benchmark 2.02 and got the following results:

New Laptop
**** test on Windows 10 Pro6.3.15063 using 7.04 and 121 passes; Quadcore AMD A10 4x3.3 GHz Create new graph time: 916.78ms, relative speed= 0.33 big data update time: 184.94ms, relative speed= 0.77 curve fit time: 528.52µs, relative speed= 3.57 user curve fit time: 5.73ms, relative speed= 6.19 double complex fft time: 469.70µs, relative speed= 3.14 single complex fft time: 416.66µs, relative speed= 2.85 double real fft time: 202.03µs, relative speed= 2.79 single real fft time: 214.51µs, relative speed= 2.29 5 pass smooth time: 299.36µs, relative speed= 1.81 Sort 8192 points time: 12.54ms, relative speed= 3.05 WaveStats time: 202.21µs, relative speed= 1.32 simple eqn time: 275.26µs, relative speed= 5.07 exp eqn time: 480.39µs, relative speed= 4.18 sqrt eqn time: 384.88µs, relative speed= 4.60 sin eqn time: 373.70µs, relative speed= 3.11 User fit fctn time: 200.05µs, relative speed= 6.46 MatrixOp eqn time: 35.17µs, relative speed= 0.68 us timer overhead time: 11.03ns, relative speed= 13.25 fctn Overhead time: 73.55ns, relative speed= 3.94 Fit Fctn Overhead time: 282.87ns, relative speed= 7.09 Do Loop Overhead time: 74.16ns, relative speed= 3.47 For Loop Overhead time: 64.46ns, relative speed= 3.30 Local var assignment time: 14.86ns, relative speed= 3.66 Double wave assignment time: 186.82ns, relative speed= 3.26 Single wave assignment time: 185.16ns, relative speed= 3.08 Double wave[] read time: 457.91ps, relative speed= 390.94 Double wave read time: 12.23ns, relative speed= 5.59 Single wave[] read time: -727.89ps, relative speed= -1422.28 Single wave read time: 22.07ns, relative speed= 5.81 Add const time: 10.48ns, relative speed= 4.03 Mult loc var time: 11.12ns, relative speed= 3.21 Mult const time: 10.77ns, relative speed= 3.90 MatrixOp overhead time: 29.79µs, relative speed= 0.61 **** done **** total test time= 158.405


Old Laptop
**** test on Windows 7 Professional Service Pack 16.1.7601 using 7.04 and 121 passes; Intel P6200 2x2.4 GHz Create new graph time: 176.53ms, relative speed= 1.70 big data update time: 223.27ms, relative speed= 0.64 curve fit time: 816.83µs, relative speed= 2.31 user curve fit time: 9.13ms, relative speed= 3.88 double complex fft time: 710.62µs, relative speed= 2.07 single complex fft time: 639.62µs, relative speed= 1.86 double real fft time: 344.28µs, relative speed= 1.64 single real fft time: 303.08µs, relative speed= 1.62 5 pass smooth time: 192.45µs, relative speed= 2.82 Sort 8192 points time: 17.48ms, relative speed= 2.19 WaveStats time: 213.12µs, relative speed= 1.25 simple eqn time: 613.32µs, relative speed= 2.28 exp eqn time: 801.54µs, relative speed= 2.51 sqrt eqn time: 711.38µs, relative speed= 2.49 sin eqn time: 477.58µs, relative speed= 2.44 User fit fctn time: 405.80µs, relative speed= 3.18 MatrixOp eqn time: 52.87µs, relative speed= 0.45 us timer overhead time: 0.00s, relative speed= inf fctn Overhead time: 116.14ns, relative speed= 2.49 Fit Fctn Overhead time: 477.67ns, relative speed= 4.20 Do Loop Overhead time: 134.08ns, relative speed= 1.92 For Loop Overhead time: 89.56ns, relative speed= 2.38 Local var assignment time: 19.63ns, relative speed= 2.77 Double wave assignment time: 299.87ns, relative speed= 2.03 Single wave assignment time: 305.57ns, relative speed= 1.87 Double wave[] read time: 1.37ns, relative speed= 131.09 Double wave read time: 24.43ns, relative speed= 2.80 Single wave[] read time: 17.74ns, relative speed= 58.35 Single wave read time: 35.68ns, relative speed= 3.59 Add const time: 12.90ns, relative speed= 3.27 Mult loc var time: 12.79ns, relative speed= 2.79 Mult const time: 12.50ns, relative speed= 3.36 MatrixOp overhead time: 45.19µs, relative speed= 0.40 **** done **** total test time= 70.4312

Based on that results, the new Laptop is faster for nealy everything except "creating new graphs", where the old Laptop is a lot faster. Like the benchmark, our program is creating a lot of graph-windows and so therefore the new Laptop is slowed down significantly by this issue. I tried to change the GUI-Framework back to Navtive-Graphics(GDI or GDI+) but this was not speeding up the process noticeable. I also disabled all Windows10-GUI-Effects (via SystemPropertiesPerformance.exe), but this also was not speeding up the benchmarks results.

Does anyone else recognized the same issue on Windows 10 compared to Windows 7 or is there any trick to speed up the GUI on my machine?

Best regards,

flashbanger
Does your new laptop have a high-resolution display?

DisplayHelpTopic "Graphs and High-Resolution Displays"
ChrLie wrote:
Does your new laptop have a high-resolution display?

DisplayHelpTopic "Graphs and High-Resolution Displays"


Thank you for your fast reply,

i am not sure if my Laptop has a "High-Resolution Display". The native resolution of my screen is 1920x1080 (FullHD). This is higher than my previous Laptop (1366x768), but it is still much lower than 4K or Retina-Displays, for which the Igor HelpTopic article was written.

I found out that switching on the "Fusion-Style"-Option speeds up the IGOR-GUI roughly by a factor of two. This is nice, but it is still 2.5 times slower than on my old machine :-/

New Laptop with Fusion-Style
**** test on Windows 10 Pro6.3.15063 using 7.04 and 121 passes; Quadcore AMD A10 4x3.3 GHz Create new graph time: 430.83ms, relative speed= 0.69 big data update time: 348.96ms, relative speed= 0.41 curve fit time: 537.93µs, relative speed= 3.51 user curve fit time: 6.07ms, relative speed= 5.84 double complex fft time: 481.35µs, relative speed= 3.06 single complex fft time: 437.87µs, relative speed= 2.71 double real fft time: 211.51µs, relative speed= 2.67 single real fft time: 201.52µs, relative speed= 2.44 5 pass smooth time: 298.72µs, relative speed= 1.82 Sort 8192 points time: 13.10ms, relative speed= 2.92 WaveStats time: 223.98µs, relative speed= 1.19 simple eqn time: 285.44µs, relative speed= 4.89 exp eqn time: 499.23µs, relative speed= 4.03 sqrt eqn time: 403.58µs, relative speed= 4.38 sin eqn time: 391.22µs, relative speed= 2.97 User fit fctn time: 202.09µs, relative speed= 6.40 MatrixOp eqn time: 34.07µs, relative speed= 0.70 us timer overhead time: 3.97ns, relative speed= 36.81 fctn Overhead time: 99.97ns, relative speed= 2.90 Fit Fctn Overhead time: 291.47ns, relative speed= 6.88 Do Loop Overhead time: 77.98ns, relative speed= 3.30 For Loop Overhead time: 68.65ns, relative speed= 3.10 Local var assignment time: 15.64ns, relative speed= 3.48 Double wave assignment time: 221.84ns, relative speed= 2.75 Single wave assignment time: 198.03ns, relative speed= 2.88 Double wave[] read time: 643.19ps, relative speed= 278.32 Double wave read time: 12.01ns, relative speed= 5.70 Single wave[] read time: 4.04ns, relative speed= 256.48 Single wave read time: 24.30ns, relative speed= 5.28 Add const time: 11.30ns, relative speed= 3.74 Mult loc var time: 11.44ns, relative speed= 3.12 Mult const time: 11.41ns, relative speed= 3.68 MatrixOp overhead time: 31.21µs, relative speed= 0.58 **** done **** total test time= 119.849


Best regards,

flashbanger
I found the results curious so I took a look at the test by test comparison to see where the new laptop maybe slower. I am now wondering if the test is amiss.

A little statistical comparison between the laptops in attached graph albeit done in a different stats program so please forgive me.

Couple of things popped out.
The single and double wave[] read times are suspect and in the new laptop are actually negative.
Second when i exclude those two factors and compare the results looking at the relative speed, the new laptop comes out ahead in all but two categories, make a new graph and 5 pass smooth. I think the strange read and these two factors are skewing the results.

Andy
Laptop Comparison.pdf (23.69 KB)
I think it may be due to Qt framework.

My problem is that programs run faster in Igor6.37 than in Igor 7.

I wouldn't place much importance on the results from the benchmark 2.02 experiment. This is a very old experiment and in my experience the results from that test are not all that reliable.

In order to address your particular problem, it would be most helpful if you can contact support@wavemetrics.com with a specific example of something that is much faster in IP6 vs. IP7. Please provide the system information from Igor 7 (either use the Help->Contact Support menu item or open the Help->About dialog, click System Information, and copy that information to your email message). Also provide the version of IP6 you're using.

We sometimes get reports like this from users. In the cases where the user provides a specific example of the problem, we often find that Igor 7 is actually faster than Igor 6, though that's not always the case. As ChrLie pointed out, drawing on high-DPI displays can be significantly slower under certain situations.

If you can provide a specific example that demonstrates the problem, we can try running your example with a profiler to see whether there are any bottlenecks in Igor's code that can be eliminated.
My test result using Benchmark 2.02:

Igor 6.37:
*** test on Windows 8 Professional (Build 9200)6.2.9200 using 6.37 and 21 passes; Dual 2 GHz PowerPC G5 Mac Pro
Create new graph time: 113.33ms, relative speed= 2.64
big data update time: 43.56ms, relative speed= 3.29
curve fit time: 567.32µs, relative speed= 3.32
user curve fit time: 3.84ms, relative speed= 9.24
double complex fft time: 440.13µs, relative speed= 3.35
single complex fft time: 290.70µs, relative speed= 4.09
double real fft time: 278.34µs, relative speed= 2.03
single real fft time: 149.90µs, relative speed= 3.28
5 pass smooth time: 138.60µs, relative speed= 3.92
Sort 8192 points time: 5.62ms, relative speed= 6.80
WaveStats time: 71.95µs, relative speed= 3.71
simple eqn time: 142.38µs, relative speed= 9.80
exp eqn time: 272.28µs, relative speed= 7.38
sqrt eqn time: 197.62µs, relative speed= 8.95
sin eqn time: 214.71µs, relative speed= 5.42
User fit fctn time: 121.99µs, relative speed= 10.60
MatrixOp eqn time: 24.26µs, relative speed= 0.98
** done ****
total test time= 5.93806

Igor 7:
**** test on Windows 10 Pro6.3.14393 using 7.04 and 21 passes; Dual 2 GHz PowerPC G5 Mac Pro
Create new graph time: 252.28ms, relative speed= 1.19
big data update time: 76.43ms, relative speed= 1.87
curve fit time: 220.42µs, relative speed= 8.56
user curve fit time: 3.29ms, relative speed= 10.79
double complex fft time: 342.25µs, relative speed= 4.30
single complex fft time: 310.54µs, relative speed= 3.83
double real fft time: 164.53µs, relative speed= 3.43
single real fft time: 153.49µs, relative speed= 3.21
5 pass smooth time: 107.97µs, relative speed= 5.03
Sort 8192 points time: 6.66ms, relative speed= 5.75
WaveStats time: 57.99µs, relative speed= 4.60
simple eqn time: 153.61µs, relative speed= 9.09
exp eqn time: 241.64µs, relative speed= 8.32
sqrt eqn time: 205.26µs, relative speed= 8.62
sin eqn time: 178.74µs, relative speed= 6.51
User fit fctn time: 115.38µs, relative speed= 11.20
MatrixOp eqn time: 24.04µs, relative speed= 0.99
**** done ****
total test time= 8.40098

This speed diffenrence between Igor 6 and Igor 7 (~4/3) is always there in my case.

However, Gizmo performance in Igor7 is quite superior to that in Igor 6.
For what it's worth, on Windows, the Igor 7.05 nightly build starting with the nightly build available right now is quite a bit faster on the graphical tests compared to 7.04 and before. This is likely because 7.05 has an updated version of the Qt libraries (though it's possible there are other improvements I can't think of at the moment). Use the Help->Igor Pro Nightly Build menu item from Igor 7 to get the latest version.

If you try to reproduce these tests, make sure that you close the Data Browser before you run the tests. The tests take a bit longer with the Data Browser open.

Here are some results (all are 21 passes of the "Run Display Only" button of the benchmark 2.02.pxp that ships with Igor) :

Machine 1 (Windows 7, standard DPI display)


IP 6


Create new graph time: 103.45ms, relative speed= 2.89
big data update time: 61.22ms, relative speed= 2.34
**** done ****
total test time= 4.27719

IP 7.04


Create new graph time: 268.44ms, relative speed= 1.12
big data update time: 135.93ms, relative speed= 1.05
**** done ****
total test time= 9.42458

IP 7.05


Create new graph time: 177.68ms, relative speed= 1.68
big data update time: 130.17ms, relative speed= 1.10
**** done ****
total test time= 7.2723

Machine 2 (Windows 10, high DPI display)


IP 6


Create new graph time: 170.91ms, relative speed= 1.75
big data update time: 202.49ms, relative speed= 0.71
**** done ****
total test time= 8.84801

IP 7.04


Create new graph time: 259.77ms, relative speed= 1.15
big data update time: 231.01ms, relative speed= 0.62
**** done ****
total test time= 11.5585

IP 7.05


Create new graph time: 174.60ms, relative speed= 1.71
big data update time: 227.45ms, relative speed= 0.63
**** done ****
total test time= 9.44496
aclight wrote:
This is likely because 7.05 has an updated version of the Qt libraries


Can you say what version of the Qt library was used for the update?
Okapi wrote:
aclight wrote:
This is likely because 7.05 has an updated version of the Qt libraries


Can you say what version of the Qt library was used for the update?

It identifies itself as 5.6.3, though 5.6.3 hasn't officially been released yet.