190 likes | 281 Views
Code Tuning and Optimizations. When and How to Improve Code Performance?. Ivaylo Bratoev. Telerik Corporation. www.telerik.com. Actual vs Perceived Performance. Example: “Vista's file copy performance is noticeably worse than Windows XP” – false:
E N D
Code Tuning and Optimizations When and How to Improve Code Performance? Ivaylo Bratoev Telerik Corporation www.telerik.com
Actual vs Perceived Performance • Example: “Vista's file copy performance is noticeably worse than Windows XP” – false: • Vista uses that perform better in most cases. • Explorer waits 12 seconds before providing a copy duration estimate, which certainly provides no sense of smooth progress. • The copy dialog is not dismissed until the write-behind thread has committed the data to disk, which means the copy is slowest at the end. • Fixed in SP1.
Is performance really a priority • Performance improvements can reduce readability and complexity • “premature optimization is the root of all evil” - Donald Knuth • “More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity.” - W.A. Wulf
How to Improve Performance • Program requirements • Software cost vsperformace • System design • performance-oriented architecture with resource goals for individual subsystems, features, and classes. • Class and method design • data types and algorithms
How to Improve Performance • External Interactions • Operating System • External devices – printers, network, internet • Code Compilation / Code Execution • Compiler optimizations • Hardware • very often the cheapest way • Code Tuning
Introduction to Code Tuning • Modifying correct code to make it run more efficiently • Not the most effective/cheapest way to improve performance • 20% of a program’s methods consume 80% of its execution time.
Code Tuning Myths • Reducing the lines of code in a high-level language improves the speed or size of the resulting machine code – false! • A fast program is just as important as a correct one – false!
Code Tuning Myths • Certain operations are probably faster or smaller than others – false! • Always measure performance!
Code Tuning Myths • You should optimize as you go – false!
Code Tuning Myths • A fast program is just as important as a correct one – false!
When to tune • Use a high-quality design. • Make the program right. • Make it modular and easily modifiable • When it’s complete and correct, check the performance. • Consider compiler optimizations • Measure • The best way to prepare for performance work during initial coding is to write clean code that’s easy to understand and modify.
Measurement • Measure to find bottlenecks • Measurements need to be precise • Measurements need to be repeatable • Optimize in iterations • Measure improvement after each optimization • If optimization does not improve performance – revert it
Code Tuning Techniques • Stop Testing When You Know the Answer if ( 5 < x ) and ( y < 10 ) then ... if ( 5 < x ) then if ( y < 10 ) then ... negativeInputFound = False; for ( i = 0; i < iCount; i++ ) { if ( input[ i ] < 0 ) { negativeInputFound = True; } } add a break
Code Tuning Techniques • Order Tests by Frequency Select char Case "+", "=" ProcessMathSymbol(char) Case "0" To "9" ProcessDigit(char) Case ",", ".", "!", "?" ProcessPunctuation(char) Case " " ProcessSpace(char) Case "A" To "Z", "a" To "z“ ProcessAlpha(char) Case Else ProcessError(char) End Select Select char Case "A" To "Z", "a" To "z“ ProcessAlpha(char) Case " " ProcessSpace(char) Case ",", ".", "!", "?" ProcessPunctuation(char) Case "0" To "9" ProcessDigit(char) Case "+", "=" ProcessMathSymbol(char) Case Else ProcessError(char) End Select
Code Tuning Techniques • Use Lazy Evaluation
Code Tuning Techniques • Unswitching loops for ( i = 0; i < count; i++ ) { if ( sumType == SUMTYPE_NET ) { netSum = netSum + amount[ i ]; } else { grossSum = grossSum + amount[ i ]; } } if ( sumType == SUMTYPE_NET ) { for ( i = 0; i < count; i++ ) { netSum = netSum + amount[ i ]; } } else { for ( i = 0; i < count; i++ ) { grossSum = grossSum + amount[ i ]; } }
Code Tuning Techniques • Minimizing the work inside loops for (i = 0; i < rateCount; i++) { netRate[i] = baseRate[i] * rates->discounts->factors->net; } quantityDiscount = rates->discounts->factors->net; for (i = 0; i < rateCount; i++) { netRate[i] = baseRate[i] * quantityDiscount; }
Code Tuning Techniques • Use caching • Use parallel execution
Code Tuning and Optimizations ? Questions? ? ? ? ? ? ? ? ? ? http://academy.telerik.com