home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sys.transputer
- Path: sparky!uunet!inmos!titan.inmos.co.uk!news
- From: conor@lion.inmos.co.uk (Conor O'Neill)
- Subject: Re: On-chip Ram: Helios, D7205
- Message-ID: <1993Jan8.175706.15966@titan.inmos.co.uk>
- Sender: news@titan.inmos.co.uk
- Organization: INMOS Limited, Bristol, UK
- References: <1993Jan07.200247.37029@dcc.uchile.cl>
- Date: Fri, 8 Jan 1993 17:57:06 GMT
- Lines: 89
-
- In article <1993Jan07.200247.37029@dcc.uchile.cl> maurro@inf.utfsm.cl (Mauricio Gomez Calderon) writes:
- > But what about the best times? 6 sec in Helios and 10 sec in D7205 for the
- > almost 'same' application... Furthermore, the occam process is the only
- > process in the transputer...
- >
- > Why this difference? Thanks in Advance...
-
- I can perhaps offer one suggestion; you are not comparing similar programs.
-
- I know it sounds trivial, but in C you are using:
-
- > void cycle(int iterations) {
- >
- > int i;
- > for(i=0; i<iterations; i++) {
- > /* nothing! */
- > }
- >
- > }
-
- whereas in occam you have:
-
- > VAL INT iterations IS 10000000:
- > SEQ
- > clock ? time1
- > i := 0
- > WHILE ( i < iterations )
- > SEQ
- > -- nothing!
- > i := i + 1
- > clock ? time2
-
- The C version holds `iterations' as a variable, whereas the occam program
- has a constant. Large constants are (relatively) expensive on a transputer;
- it is faster to load a local variable than to generate the
- constant '10000000'.
-
- Try changing the occam to something equivalent to the C:
-
- PROC cycle(VAL INT iterations)
- INT i :
- SEQ
- i := 0
- WHILE i < iterations
- i := i + 1
- :
-
- You will find that this is the entire reason for the change.
-
- The D4205A compiler produces this for the version with the constant
- value for `iterations':
-
- 0: 20 20 20 pfix 0
- 3: 60 BF ajw -1
- 5: 40 ldc 0
- 6: D0 stl 0
- 7: 29 28 29 26 28 40 ldc 10000000
- 13: 70 ldl 0
- 14: F9 gt
- 15: A5 cj 5
- 16: 70 ldl 0
- 17: 81 adc 1
- 18: D0 stl 0
- 19: 60 02 j -14
- 21: B1 ajw 1
- 22: 22 F0 ret
-
- and this for the version where it is a formal parameter:
-
- 0: 60 BF ajw -1
- 2: 40 ldc 0
- 3: D0 stl 0
- 4: 72 ldl 2
- 5: 70 ldl 0
- 6: F9 gt
- 7: A5 cj 5
- 8: 70 ldl 0
- 9: 81 adc 1
- 10: D0 stl 0
- 11: 60 07 j -9
- 13: B1 ajw 1
- 14: 22 F0 ret
-
- The same problem would occur in C if you used the constant in the for loop.
-
- ---
- Conor O'Neill, Software Group, INMOS Ltd., UK.
- UK: conor@inmos.co.uk US: conor@inmos.com
- "It's state-of-the-art" "But it doesn't work!" "That is the state-of-the-art".
-