[Go to BBS]
All articles in a thread
SubjectSAD on Sun Fortran 95 8.1
Article No35
Date: 2005/11/18(Fri) 12:14:11
ContributorAkio Morita
Sun Fortran 95 8.1上で構築した SADが Packages/init.nの読み込み中に
無限ループに入って起動しません
試験環境は、多和田さんが用意してくれた Solaris10/i386です
> uname -a
SunOS kcg-06 5.10 Generic i86pc i386 i86pc
> /opt/SUNWspro/bin/f77 -V
NOTICE: Invoking /opt/SUNWspro/bin/f90 -f77 -ftrap=%none -V
f90: Sun Fortran 95 8.1 2005/01/07

DEBUG用のパッチを当てて GCCで構築した SADのログと比較して行くと
SAD Interpreterが管理しているメモリを開放する様子が変です
アドレスが一致しないのは問題ないですが、開放する object sizeや
積算の使用量統計が負になるのは明らかに異常な気がします

--- DEBUG patch ---
diff -ur trunk-404.orig/src/italoc.f trunk-404/src/italoc.f
--- trunk-404.orig/src/italoc.f	Fri Mar 18 13:20:12 2005
+++ trunk-404/src/italoc.f	Fri Nov 18 11:37:38 2005
@@ -445,6 +445,7 @@
         return
       endif
       m=ilist(1,ia-1)
+      write(*,*)'tfree: ia=',ia,' m=',m,' nnet=',nnet
       if(m .lt. 4)then
         if(m .ne. 0)then
           write(*,*)'tfree ',ia,m
diff -ur trunk-404.orig/src/itfgeto.f trunk-404/src/itfgeto.f
--- trunk-404.orig/src/itfgeto.f	Fri Mar 18 12:01:31 2005
+++ trunk-404/src/itfgeto.f	Fri Nov 18 11:39:15 2005
@@ -10,6 +10,7 @@
         itfgeto=-1
         return
       endif
+      write(*,*)'itfgeto: tfeval(',buffer(1:lrecl),')'
       m=0
       v=tfeval(buffer(1:lrecl),lrecl,ipoint,m,irtype,ira,.true.,irtc)
 c      write(*,*)'itfgeto ',ipoint,irtype,ira,irtc,m
--- DEBUG patch ---

SubjectLog on Sun Fortran 95 8.1
Article No36
Date: 2005/11/18(Fri) 12:15:36
ContributorAkio Morita
 *** Welcome to SAD Ver.1.0.8.19.3b Patch Rev.10 [2005-04-15 19:39 JST] ***
 *** Today: 11:53:03 Friday 11/18/2005 ***
  cpu time= 1.3085E-02(sec) dt=     13.085(msec) free area::   16148
 FFS ;  6
 tfree: ia=  1738162 m=  262146 nnet=  262146
 tfree: ia=  2000368 m=  524288 nnet=  524332
 *** SADScript Initialization: /home/kekb/sad/trunk-404-sun/Packages/init.n ***
 itfgeto: tfeval(
 
SetAttributes[{Constant,HoldFirst,HoldAll,HoldRest,HoldNone},Constant];
)
 tfree: ia=  1755207 m=  9 nnet=  417107
 tfree: ia=  1755196 m=  11 nnet=  417098
 itfgeto: tfeval(
 
SetAttributes[{Constant,HoldFirst,HoldAll,HoldRest,HoldNone},Constant];
)
 itfgeto: tfeval(
HoldPattern=Literal;
)
 tfree: ia=  1755268 m=  9 nnet=  417116
 itfgeto: tfeval(
HoldPattern=Literal;
)
 itfgeto: tfeval(
SetAttributes[{Literal,HoldPattern},{HoldAll,Constant}];
)
 tfree: ia=  1755286 m=  9 nnet=  417143
 tfree: ia=  1755277 m=  9 nnet=  417134
 itfgeto: tfeval(
SetAttributes[{Literal,HoldPattern},{HoldAll,Constant}];
)
 itfgeto: tfeval(
True=1;
)
 tfree: ia=  1755304 m=  13 nnet=  417156
 itfgeto: tfeval(
True=1;
)
 itfgeto: tfeval(
False=0;
)
 tfree: ia=  1755321 m=  13 nnet=  417173
 itfgeto: tfeval(
False=0;
)
 itfgeto: tfeval(
INF=Infinity=Min[];
)
 tfree: ia=  1755370 m=  9 nnet=  417218
 tfree: ia=  1755361 m=  9 nnet=  417209
 tfree: ia=  1755356 m=  5 nnet=  417200
 tfree: ia=  1755356 m=  1723232 nnet=  417195
 tfree: ia=  1755356 m=  1726952 nnet=  -1306037
 tfree: ia=  1721770 m=  1721769 nnet=  -3032989
 tfree: ia=  2400369 m=  1723292 nnet=  -4754758
 tfree: ia=  1755356 m=  1730672 nnet=  -6478050
 tfree: ia=  1721770 m=  1724671 nnet=  -8208722
 tfree: ia=  2400369 m=  1733049 nnet=  -9933393

SubjectLog on GCC 3.4.2
Article No37
Date: 2005/11/18(Fri) 12:16:52
ContributorAkio Morita
 *** Welcome to SAD Ver.1.0.8.19.3b Patch Rev.10 [2005-04-15 19:39 JST] ***
 *** Today: 11:52:47 Friday 11/18/2005 ***
  cpu time= 2.1287E-02(sec) dt=     21.287(msec) free area::   16148
 FFS ; 6
 tfree: ia= 1735812 m= 262146 nnet= 262146
 tfree: ia= 1997958 m= 524289 nnet= 524333
 *** SADScript Initialization: /home/kekb/sad/trunk-404-gnu/Packages/init.n ***
 itfgeto: tfeval(
 
SetAttributes[{Constant,HoldFirst,HoldAll,HoldRest,HoldNone},Constant];
)
 tfree: ia= 2152858 m= 9 nnet= 417107
 tfree: ia= 2152847 m= 11 nnet= 417098
 itfgeto: tfeval(
 
SetAttributes[{Constant,HoldFirst,HoldAll,HoldRest,HoldNone},Constant];
)
 itfgeto: tfeval(
HoldPattern=Literal;
)
 tfree: ia= 2152919 m= 9 nnet= 417116
 itfgeto: tfeval(
HoldPattern=Literal;
)
 itfgeto: tfeval(
SetAttributes[{Literal,HoldPattern},{HoldAll,Constant}];
)
 tfree: ia= 2153007 m= 9 nnet= 417213
 tfree: ia= 2152998 m= 9 nnet= 417204
 tfree: ia= 2152937 m= 9 nnet= 417195
 itfgeto: tfeval(
SetAttributes[{Literal,HoldPattern},{HoldAll,Constant}];
)
 itfgeto: tfeval(
True=1;
)
 tfree: ia= 2153035 m= 13 nnet= 417218
 itfgeto: tfeval(
True=1;
)
 itfgeto: tfeval(
False=0;
)
 tfree: ia= 2153035 m= 13 nnet= 417236
 itfgeto: tfeval(
False=0;
)
 itfgeto: tfeval(
INF=Infinity=Min[];
)
 tfree: ia= 2153084 m= 9 nnet= 417281
 tfree: ia= 2153075 m= 9 nnet= 417272
 tfree: ia= 2153070 m= 5 nnet= 417263
 itfgeto: tfeval(
INF=Infinity=Min[];
)
 itfgeto: tfeval(
Pi=ArcSin[1]*2;
)
 tfree: ia= 2153087 m= 13 nnet= 417288
 itfgeto: tfeval(
Pi=ArcSin[1]*2;
)
 itfgeto: tfeval(
E=Exp[1];
)
 tfree: ia= 2153104 m= 13 nnet= 417305
 itfgeto: tfeval(
E=Exp[1];
)
.....

SubjectRe: SAD on Sun Fortran 95 8.1
Article No38
Date: 2005/11/18(Fri) 14:14:10
ContributorAkio Morita
italoc回りにも鼠取りを仕掛けてみました
--- DEBUG patch ---
--- src/italoc.f.orig	Fri Nov 18 11:45:44 2005
+++ src/italoc.f	Fri Nov 18 14:03:25 2005
@@ -3,6 +3,26 @@
       implicit none 
       include 'inc/TFCBK.inc'
       include 'inc/TFMEM.inc'
+      integer*4 n,italoc0
+      italoc=italoc0(n)
+      write(*,*)'italoc: ia=',italoc,' n=',n,' nnet=',nnet
+      return
+      end
+
+      integer*4 function italoca(n)
+      implicit none 
+      include 'inc/TFCBK.inc'
+      include 'inc/TFMEM.inc'
+      integer*4 n,italoca0
+      italoca=italoca0(n)
+      write(*,*)'italoca: ia=',italoca,' n=',n,' nnet=',nnet
+      return
+      end
+
+      integer*4 function italoc0(n)
+      implicit none 
+      include 'inc/TFCBK.inc'
+      include 'inc/TFMEM.inc'
       integer*4 n,m,ic1,i,n1,ic,m1,ip0,ip,ip1,ic2
       n1=max(n,3)
       m=n1+1
@@ -26,7 +46,7 @@
           endif
           ilist(1,ic-1)=m
           nnet=nnet+m
-          italoc=ic
+          italoc0=ic
           return
         endif
         ic1=i+min(m,12)
@@ -52,7 +72,7 @@
               call tsetindexhash1(ic+m,i-icp-m+1)
               ilist(1,ic-1)=m
               nnet=nnet+m
-              italoc=ic
+              italoc0=ic
               return
             endif
           enddo
@@ -81,7 +101,7 @@
               else
                 maxic=i
               endif
-              italoc=ic
+              italoc0=ic
               return
             endif
           enddo
@@ -109,7 +129,7 @@
           endif
           ilist(1,ip-1)=m
           nnet=nnet+m
-          italoc=ip
+          italoc0=ip
           return
         elseif(m1 .ge. m+4)then
           ilist(2,ilist(1,ip))=ilist(2,ip)
@@ -129,7 +149,7 @@
           call tsetindexhash(ip+m,m1-m)
           ilist(1,ip-1)=m
           nnet=nnet+m
-          italoc=ip
+          italoc0=ip
           return
         endif
         ip=ilist(1,ip)
@@ -138,11 +158,11 @@
       if(ip1 .gt. 0)then
         go to 1000
       endif
-      italoc=-1
+      italoc0=-1
       return
       end
 
-      integer*4 function italoca(n)
+      integer*4 function italoca0(n)
       implicit none 
       include 'inc/TFCBK.inc'
       include 'inc/TFMEM.inc'
@@ -170,7 +190,7 @@
             endif
             ilist(1,ic-1)=i-i+m
             nnet=nnet+ilist(1,ic-1)
-            italoca=ic
+            italoca0=ic
             return
           endif
           ii=i+1
@@ -192,7 +212,7 @@
             endif
             ilist(1,ic-1)=ii-i+m
             nnet=nnet+ilist(1,ic-1)
-            italoca=ic
+            italoca0=ic
             return
           endif
           ii=ii+1
@@ -214,7 +234,7 @@
             endif
             ilist(1,ic-1)=ii-i+m
             nnet=nnet+ilist(1,ic-1)
-            italoca=ic
+            italoca0=ic
             return
           endif
           ii=ii+1
@@ -236,7 +256,7 @@
             endif
             ilist(1,ic-1)=ii-i+m
             nnet=nnet+ilist(1,ic-1)
-            italoca=ic
+            italoca0=ic
             return
           endif
         endif
@@ -263,7 +283,7 @@
               call tsetindexhash1(ic+m,i-icp-m+1)
               ilist(1,ic-1)=m
               nnet=nnet+m
-              italoca=ic
+              italoca0=ic
               return
             endif
           enddo
@@ -292,7 +312,7 @@
               else
                 maxic=i
               endif
-              italoca=ic
+              italoca0=ic
               return
             endif
           enddo
@@ -320,7 +340,7 @@
           endif
           ilist(1,ip-1)=m
           nnet=nnet+m
-          italoca=ip
+          italoca0=ip
           return
         elseif(m1 .ge. m+4)then
           ilist(2,ilist(1,ip))=ilist(2,ip)
@@ -340,7 +360,7 @@
           call tsetindexhash(ip+m,m1-m)
           ilist(1,ip-1)=m
           nnet=nnet+m
-          italoca=ip
+          italoca0=ip
           return
         endif
         ip=ilist(1,ip)
@@ -349,7 +369,7 @@
       if(ip1 .gt. 0)then
         go to 1000
       endif
-      italoca=-1
+      italoca0=-1
       return
       end
 
--- DEBUG patch ---