| Title: | Kuck Associates Preprocessor Users |
| Notice: | KAP V2.1 (f90,f77,C) SSB-kits - see note 2 |
| Moderator: | HPCGRP::DEGREGORY |
| Created: | Fri Nov 22 1991 |
| Last Modified: | Fri Jun 06 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 390 |
| Total number of notes: | 1440 |
Awhile back a customer of ours, llnl, was instructed to use KAP for
F77 to work around a KAP F90 problem...
KAP 3.1, F90 4.1, UNIX 4.0a
I just want to confirm that this is a bug..
Take the following small example (boiled down from 1200 lines of
code from llnl)...
subroutine cupara ( mn,kk)
IMPLICIT NONE
REAL W1, TC
INTEGER KK, MN, K, I, LEN1, LEN, IY
c
dimension tc(mn,kk)
c
dimension w1(mn),iy(mn)
len = 10
len1 = 10
c*$* assert no last value needed (w1)
do 530 k = 1, kk
do 520 i = 1, len1
w1(i) = tc(i,k)
520 continue
do 525 i = 1, len
tc(i,k) = w1(iy(i))
525 continue
530 continue
c
return
end
If you compile this with KAP (note the assertion) you get the
following warning:
cdeman.alf.dec.com> kapf -conc -real=8 dum1.f -cmp=dum.cmp.f
KAP/Digital_UA_F 3.1 k271615 961104 06-Mar-1997 14:49:02
### do 530 k = 1, kk
### in line 20 procedure CUPARA of file dum1.f ###
Stack usage for routine PKCUPARA_ is unknown, parallel STACKSIZE must be at leas
t 28 bytes.
0 errors in file dum1.f
KAP -- Syntax Warnings Detected
I went through the User's Guide and only found one warning that looks
like this. The manual (HTML on CD) had a hyperlink to the section
showing how to define KMP_STACKSIZE. I did, but the warning persisted.
After compilation, and possibly as a result of the warning, F90
now generates a warning on the preprocessed kap file:
cdeman.alf.dec.com> f90 -r8 -automatic -c dum.cmp.f
f90: Warning: dum.cmp.f, line 86: Variable MN is used before its value has been
defined
DO II5=1,MN
-------^
The original file compiles just fine:
cdeman.alf.dec.com> f90 -r8 -automatic -c dum1.f
cdeman.alf.dec.com>
Thanks in advance...
Pat
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 369.1 | I'm checking on this.... | HPCGRP::DEGREGORY | Karen 223-5801 | Mon Mar 10 1997 13:42 | 0 |
| 369.2 | the warning makes sense, however you can ignore the size.... | HPCGRP::DEGREGORY | Karen 223-5801 | Tue Mar 11 1997 10:50 | 40 |
Pat - The currently shipping KAP F77 gives this warning but the currently shipping KAP F90 does not. The warning message should be given and the fact that KAP F90 doesn't give a warning is a bug. Here is the explanation from KAI as to why they are giving the warning. Note that in the next release of KAP the warning message will not include a stack size... > > The current message coming out of the next release of KAP is: > > KAP/Digital_UA_F 66.66 k666666T 66666 10-Mar-1997 13:28:18 > > ### do 530 k = 1, kk > ### in line 15 procedure CUPARA of file stk.f ### > warning: Stack usage for routine PKCUPARA_ is unknown, parallel STACKSIZE should be checked. > KAP/Digital_UA_F 66.66 k666666T 66666: 0 errors in file stk.f > > The reason for this message is that KAP has done something very sophisticated. > It has made the variable W1 local to each thread even though it does not know the > actual size of W1. The variable W1 is a "Cray AUTOMATIC", it's size is calculated > at the the time the subroutine is entered. > > KAP can not check the KMP_STACKSIZE environment variable to see if it is large > enough because it does not know the size of the variable W1. > > The warning is issued to alert the user that a variable amount of stack space > is used by this routine and it might overflow the thread stack at runtime. > > (The old error messages included the STATIC compoment of the stack usage, which > was a least 28 bytes, this was deemed to be useless information and was > deleted from the error messages). > > I believe the reason that alphaosff90 does not issue this warning message is > probably a bug. This kind of check should also be inserted into the F90 > code generation. > | |||||
| 369.3 | Thanks for the explaination of the warning, but what about the missing var? | PEACHS::LAMPERT | Pat Lampert, UNIX Applications Support, 343-1050 | Tue Mar 11 1997 15:43 | 120 |
OK I understand the warning now. Thanks.
The ultimate problem, though, is that KAP generates what
appears to be a coding error in the output file.
The loop...
DO II5=1,MN
W12(II5) = W11(II5)
END DO
uses a variable that is never defined. (MN). Shouldnt this
be MN1?
Here is the result of processing the program in .0 with KAP.
C KAP/Digital_UA_F 3.1 k271615 961104 o5r3so3 06-Mar-1997 14:49:02
SUBROUTINE CUPARA ( MN, KK )
IMPLICIT NONE
INTEGER II4, II3, II2
PARAMETER (II4 = 5, II3 = 0, II2 = 14)
EXTERNAL mppfkd, mppfrk, PKCUPARA_
INTEGER mppfkd
INTEGER II1
PARAMETER (II1 = 10)
REAL W1, TC
INTEGER KK, MN, K, I, LEN1, LEN, IY
c
DIMENSION TC(MN,KK)
c
DIMENSION W1(MN), IY(MN)
C*$* ASSERTNOLASTVALUENEEDED ( W1 )
IF (KK .GT. II2 .AND. mppfkd () .EQ. II3) THEN
CALL mppfrk (PKCUPARA_,II4,TC,KK,IY,W1,MN)
ELSE
C!!!! PARALLEL IF (KK .GT. 14) SHARED (KK,TC,IY,W1) LOCAL (K,I)
C!!!! PDO FIRSTLOCAL (W1)
DO K=1,KK
DO I=1,II1
W1(I) = TC(I,K)
END DO
DO I=1,II1
TC(I,K) = W1(IY(I))
END DO
END DO
C!!!! END PDO NOWAIT
C!!!! END PARALLEL
END IF
c
RETURN
END
C KAP/Digital_UA_F 3.1 k271615 961104 o5r3so3 06-Mar-1997 14:49:02
SUBROUTINE PKCUPARA_ ( MPPID, MPPNPR, TC1, KK1, IY1, W11, MN1 )
AUTOMATIC K1
INTEGER K1
AUTOMATIC II5
INTEGER II5
INTEGER KK1
INTEGER MPPID
INTEGER*8 DI1(0:7,0:49)
AUTOMATIC II3
INTEGER II3
AUTOMATIC I1
INTEGER I1
INTEGER II6(0:99)
INTEGER MN1
INTEGER II11
PARAMETER (II11 = 10)
AUTOMATIC II1
INTEGER II1
AUTOMATIC II4
INTEGER II4
INTEGER MPPNPR
AUTOMATIC II2
INTEGER II2
DOUBLEPRECISION W11(MN1)
INTEGER IY1(MN1)
DOUBLEPRECISION W12(MN1)
DOUBLEPRECISION TC1(MN1,KK1)
INTEGER II12, II10, II9, II8, II7
PARAMETER (II12 = 1, II10 = 2, II9 = 3, II8 = 4, II7 = 5)
COMMON /mppfoi/II6
COMMON /mppfod/DI1
DI1(II6(II7),MPPID) = %LOC (MN1)
DI1(II6(II8),MPPID) = %LOC (W11)
DI1(II6(II9),MPPID) = %LOC (IY1)
DI1(II6(II10),MPPID) = %LOC (KK1)
DI1(II6(II12),MPPID) = %LOC (TC1)
C!!!! PARALLEL IF (KK .GT. 14) SHARED (KK,TC,IY,W1) LOCAL (K,I)
II3 = KK1 - 1 + II12
II4 = (II3 + MPPNPR - II12) / MPPNPR
II1 = 1 + MPPID * II4
II2 = MIN (KK1, II1 + (II4 - II12))
DO II5=1,MN
W12(II5) = W11(II5)
END DO
C!!!! PDO FIRSTLOCAL (W1)
DO K1=II1,II2
DO I1=1,II11
W12(I1) = TC1(I1,K1)
END DO
DO I1=1,II11
TC1(I1,K1) = W12(IY1(I1))
END DO
END DO
C!!!! END PDO NOWAIT
C!!!! END PARALLEL
END
| |||||
| 369.4 | This is being handled as an SPR | HPCGRP::DEGREGORY | Karen 223-5801 | Tue Apr 08 1997 10:10 | 0 |