2.11 Improving and Customizing KAP Performance

After you have used the KAP protocol for either small or large programs, you can find ways to fine-tune KAP to fit your application.

This section helps you discover which KAP command-line qualifiers, directives, or assertions can be used to try to improve KAP performance for a particular application program. The following is a list of common goals and common program situations that KAP users often have, and it offers suggestions for possible improvements.

Remember that KAP is a tool to optimize C code. Like any tool, it performs best when you are familiar with the details of how it works and are able to use its correctly and advantageously.

Although KAP default qualifier settings will achieve performance improvement, you can often achieve greater improvement if you understand and use alternate qualifier settings. Moreover, you can often insert directives or assertions to achieve improved performance.

See Table 2-1 for user actions and specific goals.


Caution
Some KAP transformations assume that array bounds are never violated. These transformations can produce incorrect results if the declared array bounds are violated intentionally. Disable these transformations with the previous assertion.

Table 2-1 User Actions for Specific Goals

Goal  User Action 
Have a more informative listing to help answer your questions.  Use /lo=otkl or other listing qualifiers under /listoptions command- line qualifier. 
Recognize more reductions.  Increase /roundoff qualifier setting. 
Answer a KAP generated question.  Use appropriate assertion. 
Eliminate unnecessary last-value assignment.  Use C*$* assert no last value needed or /assume without the l qualifier; or try /save=manual
Spend less time optimizing deeply nested loops.  Reduce /limit and /arclimit or their directives. 
Disable inner loop unrolling.  Use /unroll=1 or /scalaropt < 2. 
Disable outer loop unrolling.  Use /roundoff < 3 or /scalaropt < 3. 
Prevent a given loop from being optimized.  Use C*$* assert do (serial) , C*$* assert do prefer (serial), C*$* noconcurrentize, or C*$* optimize (0) . (Remember to reenable optimization after the serial loop.) 
Disable some data dependence checking.  Use C*$* assert no recurrence for one loop nest. 
Expand (inline) subroutine calls within loops.  Use /inline, /inline_from_files, or /inline_create and /inline_from_libraries . Or, if the goal is to execute the subroutine body concurrently, try /ipa or C*$* assert concurrent call
Inline more routines.  Increase /inline_ depth and /inline_looplevel . (See also the C*$* inline directive.) 
Turn off directives and assertions.  Use the /nodirectives qualifier. 
Process a program that uses intentional array bounds violation.  Use C*$* assert bounds violations .  
Use STATIC storage.  Insert SAVE statements or use /save=all


Previous Page Next Page Contents Index
Command-Line Qualifiers