phil@dhw68k.cts.com (Phil Suematsu) (02/08/89)
I would like to know if DEC has optimized the code generated by
VAX FORTRAN structure references since the VAX FORTRAN V4.6 version.
We would rather use structures than common blocks, but we have found
that references to structures are much slower than references to
common blocks. Unfortunately, we cannot upgrade to VMS 5.0 yet
because of version-specific third-party software; however, we will
once the new version of the software is released. If anyone has
installed VAX FORTRAN under VMS 5.0 or later, I would appreciate it
if you could compile and execute the program that appears below.
Please compile with "FORTRAN/LIST/MACRO". You can mail me either the
compiler listing or the results generated by the program or both
if you are feeling especially generous. I will post the results
if anyone is interested in this issue.
Thanks in advance, Phil Suematsu
------------------------------- cut ---------------------------------
integer*4 count, handle
integer*4 test1
integer*4 test2
character*16 test3
integer*4 common1
integer*4 common2(8)
character*16 common3
common /common_test/ common1, common2, common3
structure /structure_test/
integer*4 structure1
integer*4 structure2(8)
character*16 structure3
end structure
record /structure_test/ record_test
handle = 0
type *, 'Common Test:'
type *, 'Adding an integer 10000000 times'
call lib$init_timer(handle)
do count = 1, 10000000
test1 = test1 + common1
end do
call lib$show_timer(handle)
type *, 'Adding a specific integer array element 10000000 times'
call lib$init_timer(handle)
do count = 1, 10000000
test2 = test2 + common2(7)
end do
call lib$show_timer(handle)
type *, 'Adding varying integer array elements 10000000 times'
call lib$init_timer(handle)
do count = 1, 10000000
test2 = test2 + common2((test2 .and. 7) + 1)
end do
call lib$show_timer(handle)
type *, 'Copying 1000000 16-byte strings'
call lib$init_timer(handle)
do count = 1, 1000000
test3 = common3
call modify(test3, common3)
end do
call lib$show_timer(handle)
call modify(test1, test2, test3)
type *, ' '
type *, 'Structure test:'
type *, 'Adding an integer 10000000 times'
call lib$init_timer(handle)
do count = 1, 10000000
test1 = test1 + record_test.structure1
end do
call lib$show_timer(handle)
type *, 'Adding a specific integer array element 10000000 times'
call lib$init_timer(handle)
do count = 1, 10000000
test2 = test2 + record_test.structure2(7)
end do
call lib$show_timer(handle)
type *, 'Adding varying integer array elements 10000000 times'
call lib$init_timer(handle)
do count = 1, 10000000
test2 = test2 + record_test.structure2((test2 .and. 7) + 1)
end do
call lib$show_timer(handle)
type *, 'Copying 1000000 16-byte strings'
call lib$init_timer(handle)
do count = 1, 1000000
test3 = record_test.structure3
call modify(test3, record_test.structure3)
end do
call lib$show_timer(handle)
call modify(test1, test2, test3)
end
subroutine modify
end
--
-----------------+------------------------------------------------------
Phil Suematsu | InterNet: phil@dhw68k.cts.com or phil@turnkey.tcc.com
Optical Research | or uucp: ...{trwrb,hplabs}!felix!dhw68k!phil
Associates | or Work: (818) 795-9101 or Home: (714) 633-0876