Changeset 115


Ignore:
Timestamp:
Jul 20, 2010 7:29:09 AM (10 years ago)
Author:
awalther
Message:

memory leak in sparsedrivers.cpp fixed

Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/ADOL-C/doc/adolc-manual.tex

    r113 r115  
    1 % Latex file containing the documentation of ADOL-C version 2.1.2
     1% Latex file containing the documentation of ADOL-C version 2.1.6
    22%
    33% Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz,
     
    5555{\Large of Algorithms Written in C/C++}\\
    5656\vspace{.2in}
    57 {\large\bf  Version 2.1.3, February 2010} \\
     57{\large\bf  Version 2.1.6, July 2010} \\
    5858\bigskip
    5959 \mbox{Andrea Walther}\footnote{Institute of Mathematics, University
     
    28842884\verb=<adolc/fixpoint.h>=. This header
    28852885is included by the global header file \verb=<adolc/adolc.h>= automatically.
    2886 An example \verb=fixpoint_exam.cpp= that shows also the
     2886An example code that shows also the
    28872887expected signature of the function pointers is contained in the directory \verb=examples/additional_examples/fixpoint_exam=.
    28882888%
     
    33663366\end{center}
    33673367Executing this three steps from the package base directory
    3368 \verb=</SOMEPATH/ADOL-C-2.1.0>= will compile the static and the dynamic
     3368\verb=</SOMEPATH/ADOL-C-2.1.6>= will compile the static and the dynamic
    33693369ADOL-C library with default options and install the package (libraries
    33703370and headers) into the default installation directory {\tt
     
    34173417%
    34183418The installation procedure described in \autoref{genlib} also
    3419 provides the \verb=Makefile=s  to compile the example
    3420 programs in the directories \verb=<ADOL-C-2.1.0>/ADOL-C/examples= and
    3421 \verb=<ADOL-C-2.1.0>/ADOL-C/examples/additional_examples=. However,
     3419provides the \verb=Makefile=s  to compile the example programs in the
     3420directories \verb=<ADOL-C-2.1.6>/ADOL-C/examples= and the
     3421additional examples in
     3422\verb=<ADOL-C-2.1.6>/ADOL-C/examples/additional_examples=. However,
    34223423one has to execute the
    34233424\verb=configure= command with  appropriate options for the ADOL-C package to enable the compilation of
     
    34403441
    34413442For Compiling the library and the documented examples on Windows using
    3442 Visual Studio please refer to the \verb=<Readme_VC++.txt>= files under
     3443Visual Studio please refer to the \verb=<Readme_VC++.txt>= files in
    34433444the \verb=<windows/>=, \verb=<ThirdParty/ColPack/>= and
    34443445\verb=<ADOL-C/examples/>= subdirectories.
     
    37133714The following listings are all simplified versions of codes that
    37143715are contained in the example subdirectory
    3715 \verb=<ADOL-C-2.1.0>/ADOL-C/examples= of ADOL-C. In particular,
     3716\verb=<ADOL-C-2.1.6>/ADOL-C/examples= of ADOL-C. In particular,
    37163717we have left out timings, which are included in the complete codes.
    37173718%
  • trunk/ADOL-C/src/sparse/sparsedrivers.cpp

    r114 r115  
    272272      }
    273273     
     274      sJinfos.nnz_in = depen;
    274275      sJinfos.nnz_in = 0;
    275276      for (i=0;i<depen;i++) {
     
    292293              }
    293294        }
    294 
    295       FILE *fp_JP;
    296295                       
    297296      g = new BipartiteGraphPartialColoringInterface(SRC_WAIT);
     
    299298       
    300299      if (options[3] == 1)
    301         g->GenerateSeedJacobian(sJinfos.JP, depen, indep, &(sJinfos.Seed), &(sJinfos.p), &dummy,
    302                                 "SMALLEST_LAST","ROW_PARTIAL_DISTANCE_TWO");
     300        {
     301          g->GenerateSeedJacobian(sJinfos.JP, depen, indep, &(sJinfos.Seed), &(sJinfos.seed_rows),
     302                                  &(sJinfos.seed_clms), "SMALLEST_LAST","ROW_PARTIAL_DISTANCE_TWO");
     303          sJinfos.seed_clms = indep;
     304        } 
    303305      else
    304         g->GenerateSeedJacobian(sJinfos.JP, depen, indep, &(sJinfos.Seed), &dummy, &(sJinfos.p),
    305                                 "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO");
     306        {
     307          g->GenerateSeedJacobian(sJinfos.JP, depen, indep, &(sJinfos.Seed), &(sJinfos.seed_rows),
     308                                &(sJinfos.seed_clms), "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO");
     309          sJinfos.seed_rows = depen;
     310        }
    306311     
    307       if (options[3] == 1)
    308         sJinfos.B = myalloc2(sJinfos.p,indep);
    309       else
    310         sJinfos.B = myalloc2(depen,sJinfos.p);
    311      
    312       sJinfos.y=myalloc1(depen);
     312      sJinfos.B = myalloc2(sJinfos.seed_rows,sJinfos.seed_clms);
     313      sJinfos.y = myalloc1(depen);
    313314     
    314315      sJinfos.g = (void *) g;
     
    322323        tapeInfos=getTapeInfos(tag);
    323324        memcpy(&ADOLC_CURRENT_TAPE_INFOS, tapeInfos, sizeof(TapeInfos));
    324         sJinfos.nnz_in = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.nnz_in;
    325         sJinfos.JP     = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.JP;
    326         sJinfos.B      = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.B;
    327         sJinfos.y      = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.y;
    328         sJinfos.Seed   = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.Seed;
    329         sJinfos.p      = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.p;
     325        sJinfos.depen    = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.depen;
     326        sJinfos.nnz_in    = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.nnz_in;
     327        sJinfos.JP        = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.JP;
     328        sJinfos.B         = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.B;
     329        sJinfos.y         = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.y;
     330        sJinfos.Seed      = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.Seed;
     331        sJinfos.seed_rows = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.seed_rows;
     332        sJinfos.seed_clms = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.seed_clms;
    330333        g = (BipartiteGraphPartialColoringInterface *)ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.g;
    331334        jr1d = (JacobianRecovery1D *)ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.jr1d;
     
    349352        if (ret_val < 0)
    350353          return ret_val;
    351         MINDEC(ret_val,fov_reverse(tag,depen,indep,sJinfos.p,sJinfos.Seed,sJinfos.B));
     354        MINDEC(ret_val,fov_reverse(tag,depen,indep,sJinfos.seed_rows,sJinfos.Seed,sJinfos.B));
    352355      }
    353356    else
    354       ret_val = fov_forward(tag, depen, indep, sJinfos.p, basepoint, sJinfos.Seed, sJinfos.y, sJinfos.B);
     357      ret_val = fov_forward(tag, depen, indep, sJinfos.seed_clms, basepoint, sJinfos.Seed, sJinfos.y, sJinfos.B);
    355358   
    356359
     
    437440          }
    438441
     442        sHinfos.indep = indep;
    439443        sHinfos.nnz_in = 0;
    440444
     
    944948}
    945949
     950BEGIN_C_DECLS
     951/*****************************************************************************/
     952/*                                                FREE SPARSE JACOBIAN INFOS */
     953
     954/* ------------------------------------------------------------------------- */
     955void freeSparseJacInfos(double *y, double **Seed, double **B, unsigned int **JP,
     956                                         void *g, void *jr1d, int seed_rows, int seed_clms, int depen)
     957{
     958    int i;
     959
     960    if(y)
     961      myfree1(y);
     962
     963    if (Seed)
     964    {
     965        for (i = 0; i < seed_rows; i++)
     966            delete[] Seed[i];
     967        delete[] Seed;
     968    }
     969
     970    if(B)
     971      myfree2(B);
     972
     973    for (int i=0;i<depen;i++) {
     974      free(JP[i]);
     975    }
     976
     977    free(JP);
     978
     979    // yields segmentation fault, check again !!
     980    // if (g)
     981    //   delete (BipartiteGraphPartialColoringInterface *) g;
     982
     983    if (jr1d)
     984        delete (JacobianRecovery1D*)jr1d;
     985
     986}
     987
     988/*****************************************************************************/
     989/*                                                 FREE SPARSE HESSIAN INFOS */
     990
     991/* ------------------------------------------------------------------------- */
     992void freeSparseHessInfos(double **Hcomp, double ***Xppp, double ***Yppp, double ***Zppp,
     993                         double **Upp, unsigned int **HP,
     994                         void *g, void *hr, int p, int indep)
     995{
     996    int i;
     997
     998    if(Hcomp)
     999      myfree2(Hcomp);
     1000
     1001   if(Xppp)
     1002      myfree3(Xppp);
     1003
     1004   if(Yppp)
     1005      myfree3(Yppp);
     1006
     1007   if(Zppp)
     1008      myfree3(Zppp);
     1009   if(Upp)
     1010      myfree2(Upp);
     1011
     1012    for (int i=0;i<indep;i++) {
     1013      free(HP[i]);
     1014    }
     1015
     1016    free(HP);
     1017
     1018    // yields segmentation fault, check again !!
     1019    // // if (g)
     1020    // //   delete (BipartiteGraphPartialColoringInterface *) g;
     1021
     1022    if (hr)
     1023        delete (HessianRecovery*) hr;
     1024
     1025}
     1026
     1027END_C_DECLS
     1028
    9461029/****************************************************************************/
    9471030/*                                                               THAT'S ALL */
  • trunk/ADOL-C/src/sparse/sparsedrivers.h

    r106 r115  
    9797(short, int, int, const double*, unsigned int**, int*);
    9898
     99/****************************************************************************/
     100/*          Cast the void pointers to their respective type and free memory */
     101ADOLC_DLL_EXPORT void freeSparseJacInfos(double *y, double **Seed, double **B, unsigned int **JP,
     102                                         void *g, void *jr1d, int seed_rows, int seed_clms, int depen);
     103
     104ADOLC_DLL_EXPORT void freeSparseHessInfos(double **Hcomp, double ***Xppp, double ***Yppp, double ***Zppp,
     105                                          double **Upp, unsigned int **HP,
     106                                          void *g, void *hr, int p, int indep);
    99107
    100108END_C_DECLS
  • trunk/ADOL-C/src/tape_handling.cpp

    r106 r115  
    2626
    2727using namespace std;
     28
     29BEGIN_C_DECLS
     30ADOLC_DLL_EXPORT void freeSparseJacInfos(double *y, double **Seed, double **B, unsigned int **JP,
     31                                         void *g, void *jr1d, int seed_rows, int seed_clms, int depen);
     32ADOLC_DLL_EXPORT void freeSparseHessInfos(double **Hcomp, double ***Xppp, double ***Yppp, double ***Zppp,
     33                                          double **Upp, unsigned int **HP,
     34                                          void *g, void *hr, int p, int indep);
     35END_C_DECLS
    2836
    2937/* vector of tape infos for all tapes in use */
     
    152160    newTapeInfos->pTapeInfos.sJinfos.B=NULL;
    153161    newTapeInfos->pTapeInfos.sJinfos.y=NULL;
     162    newTapeInfos->pTapeInfos.sJinfos.g=NULL;
     163    newTapeInfos->pTapeInfos.sJinfos.jr1d=NULL;
     164    newTapeInfos->pTapeInfos.sJinfos.Seed=NULL;
    154165    newTapeInfos->pTapeInfos.sHinfos.Zppp=NULL;
    155166    newTapeInfos->pTapeInfos.sHinfos.Yppp=NULL;
     
    331342            if ((*tiIter)->tapeID==tapeID) {
    332343                tapeInfos=*tiIter;
    333                     // memory deallocation is missing !!
    334                     tapeInfos->pTapeInfos.sJinfos.y=sJinfos.y;
    335                     tapeInfos->pTapeInfos.sJinfos.Seed=sJinfos.Seed;
    336                     tapeInfos->pTapeInfos.sJinfos.B=sJinfos.B;
    337                     tapeInfos->pTapeInfos.sJinfos.JP=sJinfos.JP;
    338                     tapeInfos->pTapeInfos.sJinfos.nnz_in=sJinfos.nnz_in;
    339                     tapeInfos->pTapeInfos.sJinfos.p=sJinfos.p;
    340                     tapeInfos->pTapeInfos.sJinfos.g=sJinfos.g;
    341                     tapeInfos->pTapeInfos.sJinfos.jr1d=sJinfos.jr1d;
     344                // free memory of tape entry that had been used previously
     345                freeSparseJacInfos(tapeInfos->pTapeInfos.sJinfos.y,
     346                        tapeInfos->pTapeInfos.sJinfos.Seed,
     347                        tapeInfos->pTapeInfos.sJinfos.B,
     348                        tapeInfos->pTapeInfos.sJinfos.JP,
     349                        tapeInfos->pTapeInfos.sJinfos.g,
     350                        tapeInfos->pTapeInfos.sJinfos.jr1d,
     351                        tapeInfos->pTapeInfos.sJinfos.seed_rows,
     352                        tapeInfos->pTapeInfos.sJinfos.seed_clms,
     353                        tapeInfos->pTapeInfos.sJinfos.depen);
     354
     355                tapeInfos->pTapeInfos.sJinfos.y=sJinfos.y;
     356                tapeInfos->pTapeInfos.sJinfos.Seed=sJinfos.Seed;
     357                tapeInfos->pTapeInfos.sJinfos.B=sJinfos.B;
     358                tapeInfos->pTapeInfos.sJinfos.JP=sJinfos.JP;
     359                tapeInfos->pTapeInfos.sJinfos.depen=sJinfos.depen;
     360                tapeInfos->pTapeInfos.sJinfos.nnz_in=sJinfos.nnz_in;
     361                tapeInfos->pTapeInfos.sJinfos.seed_clms=sJinfos.seed_clms;
     362                tapeInfos->pTapeInfos.sJinfos.seed_rows=sJinfos.seed_rows;
     363                tapeInfos->pTapeInfos.sJinfos.g=sJinfos.g;
     364                tapeInfos->pTapeInfos.sJinfos.jr1d=sJinfos.jr1d;
    342365            }
    343366        }
     
    360383            if ((*tiIter)->tapeID==tapeID) {
    361384                tapeInfos=*tiIter;
    362                     // memory deallocation is missing !!
     385
     386                // free memory of tape entry that had been used previously
     387                    freeSparseHessInfos(tapeInfos->pTapeInfos.sHinfos.Hcomp,
     388                                        tapeInfos->pTapeInfos.sHinfos.Xppp,
     389                                        tapeInfos->pTapeInfos.sHinfos.Yppp,
     390                                        tapeInfos->pTapeInfos.sHinfos.Zppp,
     391                                        tapeInfos->pTapeInfos.sHinfos.Upp,
     392                                        tapeInfos->pTapeInfos.sHinfos.HP,
     393                                        tapeInfos->pTapeInfos.sHinfos.g,
     394                                        tapeInfos->pTapeInfos.sHinfos.hr,
     395                                        tapeInfos->pTapeInfos.sHinfos.p,
     396                                        tapeInfos->pTapeInfos.sHinfos.indep);   
    363397                    tapeInfos->pTapeInfos.sHinfos.Hcomp=sHinfos.Hcomp;
    364398                    tapeInfos->pTapeInfos.sHinfos.Xppp=sHinfos.Xppp;
     
    367401                    tapeInfos->pTapeInfos.sHinfos.Upp=sHinfos.Upp;
    368402                    tapeInfos->pTapeInfos.sHinfos.HP=sHinfos.HP;
     403                    tapeInfos->pTapeInfos.sHinfos.indep=sHinfos.indep;
    369404                    tapeInfos->pTapeInfos.sHinfos.nnz_in=sHinfos.nnz_in;
    370405                    tapeInfos->pTapeInfos.sHinfos.p=sHinfos.p;
  • trunk/ADOL-C/src/taping_p.h

    r106 r115  
    123123
    124124typedef struct SparseJacInfos {
    125     void *g;
    126     void *jr1d;
    127 
    128     double *y;
    129     double **Seed;
    130     double **B;
    131 
    132     unsigned int **JP;
    133 
    134     int nnz_in, p;
     125  void *g;
     126  void *jr1d;
     127
     128  double *y;
     129  double **Seed;
     130  double **B;
     131
     132  unsigned int **JP;
     133
     134  int depen, nnz_in, seed_clms, seed_rows;
    135135} SparseJacInfos;
    136136
     
    147147    unsigned int **HP;
    148148
    149     int nnz_in, p;
     149  int nnz_in, indep, p;
    150150} SparseHessInfos;
    151151
  • trunk/configure.ac

    r113 r115  
    1010define([ADOLC_VER], [2])
    1111define([ADOLC_SUB], [1])
    12 define([ADOLC_LVL], [5])
     12define([ADOLC_LVL], [6])
    1313
    1414AC_PREREQ(2.57)
Note: See TracChangeset for help on using the changeset viewer.