Hi Melvin,
Every compiler release from COBOL 5.1 on has two types of performance improvements:
- The optimizer adding new optimizations or improving existing ones to transform the code into something faster
- Taking advantage of newer hardware instructions (when using the corresponding ARCH and TUNE options) that have been made available on newer hardware
We can't give you an estimate on how much YOUR application will improve (even if we knew the hardware you were running on) but in our Performance Tuning Webinar, there are a couple graphs showing the improvements we get by varying compiler and hardware levels from COBOL 4.2 on to 6.4. 5.1 isn't included but the 5.1 numbers, had we rerun them when we updated the webinar before the COBOL 6.4 launch, would be closer to COBOL 5.2 than 4.2. You can view the webinar slides and a recording here: Enterprise COBOL for z/OS 6.4
A couple things to keep in mind: first, the performance you see may not match ours. Different applications have different characteristics and are more or less able to be improved by compiler versions. That said, we haven't experienced clients upgrading over a large number of versions like that and having no improvement at all. You can expect to see some performance benefit; we just aren't sure how much. Typically we see bigger improvement in programs that do a lot of computations, and less improvement in programs that do a lot of I/O or spend a lot of time in CICS or Db2 or other middleware: those are things the compiler can't optimize. That's why we have two charts: one for computationally-intensive programs and one for a larger benchmark suite that adds programs that do a lot of I/O.
Secondly, setting ARCH and TUNE correctly for your hardware will make a big difference to performance. Set ARCH to the level matching the oldest machine on which your application will run, and set TUNE to match your production machine. A client who has z15 in disaster recovery but z16 in production should set ARCH(13) and TUNE(14).
ARCH limits which instructions the compiler can select. Limiting the compiler's choices to instructions available on a z15 in my example means that your application can successfully run on a z15. If we set ARCH(14) to target z16, that'd be fine in production, but the program might not run in the disaster recovery environment; older hardware can't understand instructions that were made for newer hardware, so your program will abend.
TUNE tells the compiler to make choices that perform best on a particular machine, given the limit of which instructions to use as set by ARCH. So in my example, your production machine - where your code will run most and where performance matters most - is a z16, so we set TUNE to target it.
------------------------------
Mike Chase
Enterprise COBOL Developer
mike.chase@ca.ibm.com-----------------------------