PL/I benchmarking requested 
Author Message
 PL/I benchmarking requested

I have never seen ANY PL/I benchmarking and its doubtful hardly anyone reading this has either,
how about some brave soul translating below (if you can) and report back the bad news how terrible IBM master
code generation is, (I know their fortran F90 compiler for RS-6000 workstations is a DOG).
If the 72mb required for the  a(3000,3000)  array is a problem reduce the 3000 (1 statement change)..
1. my 833Mhz PC results are .551sec for both runs thru the subroutine below
2. another result reported by a  MAC 500Mhz user with Absoft compiler is 2.5 sec for both cases
    which is my guess the speed I would get using Personal PL/I on my PC  (PL/I about 5X slower than CVF


> I've become quite enamored with fortran's array syntax, but this has me
> worried that there may be real performance problems.  Does anyone have a
> handle on this?  Is it that the compiler is trying to 'parallelize' the
> operation, and as long as I have a big enough stack everything will be
> fast (maybe faster than the do approch??)?

> Thanks very much.

Not recalling anyone has really checked CVF 6.6b performance in this regard,  I decided to check it..
CVF optimizer made me spin my wheel for 20minutes before I came up with the solution to defeat it.
The subroutine HAS to be separately compiled, everything else I tried got optimized out producing a ZERO time.

The results = .551 sec on my 833Mhz computer for both paths of execution thru sub1 below, so it appears those
of us who might have had the same concern can be re-assured (for the case you present)..
How about non-CVF users trying my code below to check your compiler's array handling syntax?

File   sub1.f90     compiled using DF /c SUB1
subroutine sub1(a,n,x,flag)
integer :: n, i,j
real(8) :: a(n,n)
logical :: flag

if (flag) then
   a = a*x
   do j = 1,n
   do i = 1,n
      a(i,j) = a(i,j) * x
   end do
   end do
end if
end subroutine

FILE TEST.F90    compile  DF TEST SUB1.OBJ
program test
implicit none
integer,parameter :: siz=3000
real(8) :: a(siz,siz), x = 1.23
integer :: clock1, clock2, rate

call random_number(a)
call system_clock(clock1,rate)
call sub1(a,siz,x, .TRUE.)
call system_clock(clock2,rate)
write (*,*) 'array*x  =',(clock2-clock1)/dble(rate)

call random_number(a)
call system_clock(clock1,rate)
call sub1(a,siz,x, .FALSE.)
call system_clock(clock2,rate)
write (*,*) 'do loops =',(clock2-clock1)/dble(rate)
end program

Mon, 27 Jun 2005 15:39:13 GMT  
 [ 1 post ] 

 Relevant Pages 

1. Request for Benchmarking

2. Request for Articles for PL/I Newsletter

3. PL/I gurus - a simple request.

4. PL/I jobs -- June 1996, repost requested

5. Logo Komeniusz PL (Logo Comenius PL)

6. Derivation of PL/I (was Usenet group for PL/M language)

7. Mapping local files to FILE declarations in PL/I with IBM VisualAge PL./I for Windows

8. Difference PL/1 PL/I

9. What is the difference between DEC PL/1 and OS/390 PL/1

10. Initialization Expressions in PL/I (was ANSI PL/I)

11. Migrating from OS/VS PL/I to VA PL/I

12. PL/I FAQ -- Frequently asked questions about PL/I (minor update)


Powered by phpBB® Forum Software