1
1

Improuve the computation of the required space for MPI_Type_struct.

Change size_t to unsigned int, as I really need just a 32 bits integer here.

This commit was SVN r1105.
Этот коммит содержится в:
George Bosilca 2004-04-30 20:06:11 +00:00
родитель daac7a1788
Коммит 152ac14685
2 изменённых файлов: 28 добавлений и 16 удалений

Просмотреть файл

@ -245,13 +245,13 @@ int mpich_typeub3( void )
return err;
}
void print_double_mat( size_t N, double* mat )
void print_double_mat( unsigned int N, double* mat )
{
int i, j;
double* pMat;
for( i = 0; i < N; i++ ) {
printf( "(%4d) :", i * N * sizeof(double) );
printf( "(%4d) :", i * N * (int)sizeof(double) );
pMat = mat + i * N;
for( j = 0; j < N; j++ ) {
printf( "%5.1f ", *pMat );
@ -261,7 +261,7 @@ void print_double_mat( size_t N, double* mat )
}
}
int init_random_upper_matrix( size_t N, double* mat )
int init_random_upper_matrix( unsigned int N, double* mat )
{
int i, j;
@ -276,7 +276,7 @@ int init_random_upper_matrix( size_t N, double* mat )
return 0;
}
int check_diag_matrix( size_t N, double* mat1, double* mat2 )
int check_diag_matrix( unsigned int N, double* mat1, double* mat2 )
{
int i, j;
@ -295,14 +295,14 @@ int check_diag_matrix( size_t N, double* mat1, double* mat2 )
return 0;
}
dt_desc_t* upper_matrix( size_t mat_size )
dt_desc_t* upper_matrix( unsigned int mat_size )
{
int *disp, i;
size_t *blocklen;
unsigned int *blocklen;
dt_desc_t* upper;
disp = (int*)malloc( sizeof(int) * mat_size );
blocklen = (size_t*)malloc( sizeof(size_t) * mat_size );
blocklen = (unsigned int*)malloc( sizeof(unsigned int) * mat_size );
for( i = 0; i < mat_size; i++ ) {
disp[i] = i * mat_size + i;
@ -316,14 +316,14 @@ dt_desc_t* upper_matrix( size_t mat_size )
return upper;
}
dt_desc_t* lower_matrix( size_t mat_size )
dt_desc_t* lower_matrix( unsigned int mat_size )
{
int *disp, i;
size_t *blocklen;
unsigned int *blocklen;
dt_desc_t* upper;
disp = (int*)malloc( sizeof(int) * mat_size );
blocklen = (size_t*)malloc( sizeof(size_t) * mat_size );
blocklen = (unsigned int*)malloc( sizeof(unsigned int) * mat_size );
for( i = 0; i < mat_size; i++ ) {
disp[i] = i * mat_size;
@ -339,7 +339,7 @@ dt_desc_t* lower_matrix( size_t mat_size )
extern long conversion_elapsed;
int test_upper( size_t length )
int test_upper( unsigned int length )
{
double *mat1, *mat2, *inbuf;
dt_desc_t *pdt, *pdt1;
@ -405,7 +405,7 @@ dt_desc_t* test_matrix_borders( unsigned int size, unsigned int width )
{
dt_desc_t *pdt, *pdt_line;
int disp[2];
size_t blocklen[2];
unsigned int blocklen[2];
disp[0] = 0;
blocklen[0] = width;

Просмотреть файл

@ -6,20 +6,31 @@ int lam_ddt_create_struct( int count, int* pBlockLength, long* pDisp,
dt_desc_t** pTypes, dt_desc_t** newType )
{
int i;
long disp, endto, lastExtent, lastDisp;
long disp = 0, endto, lastExtent, lastDisp;
int lastBlock;
dt_desc_t *pdt, *lastType;
/* if we compute the total number of elements before we can
* avoid increasing the size of the desc array often.
*/
for( lastType = pTypes[0], lastBlock = 0, disp = 0, i = 0; i < count; i++ ) {
if( lastType == pTypes[i] ) {
lastType = pTypes[0];
lastBlock = pBlockLength[0];
lastExtent = lastType->ub - lastType->lb;
lastDisp = pDisp[0];
endto = pDisp[0] + lastExtent * lastBlock;
for( i = 1; i < count; i++ ) {
if( (pTypes[i] == lastType) && (pDisp[i] == endto) ) {
lastBlock += pBlockLength[i];
endto = lastDisp + lastBlock * lastExtent;
} else {
disp += lastType->desc.used;
if( lastBlock != 1 ) disp += 2;
if( lastBlock > 1 ) disp += 2;
lastType = pTypes[i];
lastExtent = lastType->ub - lastType->lb;
lastBlock = pBlockLength[i];
lastDisp = pDisp[i];
endto = lastDisp + lastExtent * lastBlock;
}
}
disp += lastType->desc.used;
@ -33,6 +44,7 @@ int lam_ddt_create_struct( int count, int* pBlockLength, long* pDisp,
pdt = lam_ddt_create( disp );
/* Do again the same loop but now add the elements */
for( i = 1; i < count; i++ ) {
if( (pTypes[i] == lastType) && (pDisp[i] == endto) ) {
lastBlock += pBlockLength[i];