Tom Ross's Share presentation on COBOL performance is excellent.

Scott ford
www.identityforge.com

On Jul 14, 2012, at 12:34 PM, Chris Mason <chrisma...@belgacom.net> wrote:

> John
> 
>> Integer arithmetic should never be done with anything but binary integers.
> 
> "What never?"
> 
> One excuse might be when the only arithmetic to be performed is to add up "a 
> column" of numbers and present the result. Converting to packed decimal, 
> adding using the packed decimal instruction and then converting the total to 
> the printable form might be an example of where staying with packed decimal 
> is the more efficient.
> 
> "Well, hardly ever!"
> 
> -
> 
> To all following this topic
> 
> Even before John Gilmore's assertion, I had in mind to tell a story 
> concerning the relative efficiency of packed decimal.
> 
> Forty years ago in the north-west of England, an IBM salesman was faced with 
> losing one of his customers. Competition had muscled in and proposed a 
> machine potentially more suited to the demands made on the customer's 
> business - and their pocket. The salesman's response was to propose replacing 
> the 360/30 with a 360/25 which I believe had only recently - at the time - 
> been added to the 360 range, extending it "downwards" - ignoring - 
> *obviously* - the 360/20!
> 
> The customer - or perhaps the competition - proposed running a benchmark and 
> the customer supplied both contenders with the source of an assembler program 
> key to their operation.
> 
> It's important to know that the 360/30 the customer already had was literally 
> "basic" in that disks were not a feature of the configuration with all 
> storage on tape. Thus the operating system was Basic Programming System (BPS) 
> Tape. There was a BPS-Tape assembler compiler of course but there was no 
> COBOL compiler. It may have been a bit of a disappointment - maybe even a 
> surprise - for the competition that they were not provided with COBOL source.
> 
> The customer was an organisation which set and evaluated examination papers 
> for secondary schools. The "benchmark" program had the responsibility of 
> sorting the sheep from the goats. It did so on the basis of assuming the 
> results formed a "bell curve" and then fenced the anxious teenagers based on 
> the standard deviation.[1]
> 
> Obviously - or I wouldn't be telling this story! - all the arithmetic was 
> performed using packed decimal and the "heavy lifting" was in determining the 
> variance: the mean, the differences from the mean and the squares of the 
> latter.[2]
> 
> I was one of a team of three assigned to win this benchmark to replace a 
> bigger machine with a smaller machine! The team leader initiated the effort 
> by simply writing the tape records as blocks. This reduced the execution time 
> by half from about 30 minutes to 15 minutes - and would probably have been 
> sufficient to win the contest. However I had my eye on those unsavoury packed 
> decimal instructions!
> 
> Essentially I rewrote the whole program using binary arithmetic instructions 
> to replace the packed decimal instructions. I happened to mention what I was 
> doing - more strictly, had done - to one of my colleagues - of an academic 
> bent comparable to our own John Gilmore! He responded by reminding me - or in 
> case I didn't know - that use of base registers was faster than using index 
> registers. Of course, either I had forgotten or just didn't know before.[3] 
> Back to the 129 in order to rekey a significant percentage of the source 
> program cards with commas in front of the register numbers where a storage 
> reference was required - or implied.
> 
> Mistake! The BPS-Tape assembler can't handle "(,R)" like its more 
> sophisticated cousins can. The BPS-Tape assembler requires "(0,R)". Back to 
> the 129 again.
> 
> Did the fundamental change to the type of instruction performing the 
> arithmetic do any good? I seem to remember that a number of seconds were 
> "knocked" off the total time, trivial in comparison with the benefits of 
> improving the tape I/O.
> 
> Again by means of a massive rewrite, I introduced another improvement. I 
> can't recall why it was necessary to read the tape with the results records 
> multiple times, but this was the way the original program worked and so, 
> until this point, I had kept that basic logic. Taking into account the 
> proposed storage, I reduced the number of tape passes from - IMMSMC - 10 to 
> 2. Again an improvement to be measured in seconds since I had managed to 
> extinguish the "wait light" and the tape now limped along where previously it 
> had sprinted.[4]
> 
> -
> 
> [1] There's a lot of discussion these days in the British news media of a 
> creep to larger percentages of the higher grades in exam results, 
> particularly the exams leading to university entrance. This would not be 
> possible if the exam boards continued to use the methodology embedded in the 
> analysis of results used by this exam board 40 years ago.
> 
> [2] The calculation of the standard deviation was rather clever. In a way 
> this also promised to be "heavy lifting" since the determination of the 
> square root of the variance depended on iteration. However it must have been 
> considered that two iterations were always sufficient.[2.1] The refining 
> logic was framed by an initial BALR R,0 and a final BALR R,R.
> 
> [2.1] I forget at how the initial guess was arrived but I suppose it may have 
> been a constant corresponding to a typical historical value.
> 
> [3] The time for compilation of the program was also to taken into account. 
> Fortunately I had already been told - or perhaps noticed - that the tape 
> operations during compilation worked faster when all macros were kept near 
> the beginning of the program source.
> 
> [4] I won't even mention that over a drink in the hotel bar before the 
> "trysting day", I realised that there was one more possible improvement. This 
> would have involved overlaying initialisation logic storage with working 
> space! There wasn't time now and it wasn't needed since the 360/30 was duly 
> replaced by a 360/25.
> 
> -
> 
> Chris Mason
> 
> 
> On Sat, 14 Jul 2012 08:08:03 -0400, John Gilmore <jwgli...@gmail.com> wrote:
> 
>> Doing integer--as opposed to real fixed-point--arithmetic with
>> packed-decimal values is the real culprit here.
>> 
>> Integer arithmetic should never be done with anything but binary
>> integers.  Operations on them are register operations, which are much
>> faster than storage-to-storage ones; and zero is always positive.
>> Moreover, it is now possible to make them behave in COBOL exactly as
>> they do in assembly language.
>> 
>> John Gilmore, Ashland, MA 01721 - USA
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to