[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-gsl] Matrix memory deallocation problem
From: |
Wei Cheng |
Subject: |
[Help-gsl] Matrix memory deallocation problem |
Date: |
Thu, 6 Jul 2006 15:05:23 +0100 |
I have a matrix-matrix multiplication function based on BLAS matrix-matrix
mutiplication function,just for the ease of my own use as follow:
//******************************************************************************
gsl_matrix* matrix_matrix_mul(CBLAS_TRANSPOSE_t TransA,CBLAS_TRANSPOSE_t
TransB,const gsl_matrix* X1,const gsl_matrix* X2)
//matrix matrix multiplication, return the result
{
int N1=(*X1).size1;
int N2=(*X2).size1;
int D1=(*X1).size2;
int D2=(*X2).size2;
gsl_matrix* Y;// to store the product in Y
//determine the dimension of product matrix Y
if(TransB==CblasTrans)
//X2 is transposed
Y=gsl_matrix_alloc (N1,N2);
else if(TransA==CblasTrans)
//X1 is transposed
Y=gsl_matrix_alloc (D1,D2);
else
//No transpose
Y=gsl_matrix_alloc (N1,D2);
//calling BLAS general matrix multiplication function , product is stored in
Y
gsl_blas_dgemm (TransA, TransB, 1.0, X1, X2, 0.0, Y);
return Y;
}
//*****************************************************************************
The function returns the matrix product of X1 and X2. I notice that
whenever we create matrix we have to free the memory with gsl_matrix_free.
However in the above function I can't free Y before I return it and i am
not able to free Y after return statement.
Memory leak problem occurs when I call the above function 5000000 times in a
loop like this:
//************************************************************************************
void testing()
{
gsl_matrix* A=rand(50,100);//create random 50 by 100 matrix
gsl_matrix* B=rand(100,50);//create random 100 by 50 matrix
for(int i=0;i<5000000;i++)
matrix_matrix_mul(CblasNoTrans ,CblasNoTrans ,A ,B );//calculate the project
of matrix A and B}
//*************************************************************************************
The problem I am having is that during the loop, my RAM usage shoot up and
eventually run out. I am certain the problem is with the the deallocation of
Y in mutiplication function.
Can anybody help me with this matrix deallocation problem. This is just a
test, in my application the matrices are thousands by thousands.
Wei
Thanks
- [Help-gsl] Matrix memory deallocation problem,
Wei Cheng <=