From ac275de925405cf3f5fd5db19ebae6e196cdb5a7 Mon Sep 17 00:00:00 2001 From: Chichi Lalescu <clalesc1@jhu.edu> Date: Tue, 10 Feb 2015 21:05:24 -0500 Subject: [PATCH] field_descriptors should be dynamically allocated --- src/field_descriptor.cpp | 6 ++---- src/field_descriptor.hpp | 6 ++---- src/transp.cpp | 25 +++++++++++++------------ 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/field_descriptor.cpp b/src/field_descriptor.cpp index 86d020c4..c9ad03e9 100644 --- a/src/field_descriptor.cpp +++ b/src/field_descriptor.cpp @@ -1,7 +1,7 @@ #include "field_descriptor.hpp" -int field_descriptor::initialize( +field_descriptor::field_descriptor( int ndims, int *n, MPI_Datatype element_type) @@ -33,16 +33,14 @@ int field_descriptor::initialize( this->mpi_dtype, &this->mpi_array_dtype); MPI_Type_commit(&this->mpi_array_dtype); - return EXIT_SUCCESS; } -int field_descriptor::finalize() +field_descriptor::~field_descriptor() { free((void*)this->sizes); free((void*)this->subsizes); free((void*)this->starts); MPI_Type_free(&this->mpi_array_dtype); - return EXIT_SUCCESS; } int field_descriptor::read( diff --git a/src/field_descriptor.hpp b/src/field_descriptor.hpp index fcad79a8..ea0398e5 100644 --- a/src/field_descriptor.hpp +++ b/src/field_descriptor.hpp @@ -20,13 +20,11 @@ class field_descriptor int local_size, full_size; MPI_Datatype mpi_array_dtype, mpi_dtype; - field_descriptor(){} - ~field_descriptor(){} - int initialize( + field_descriptor( int ndims, int *n, MPI_Datatype element_type); - int finalize(); + ~field_descriptor(); int read( const char *fname, void *buffer); diff --git a/src/transp.cpp b/src/transp.cpp index e034bd0e..3f6c294e 100644 --- a/src/transp.cpp +++ b/src/transp.cpp @@ -9,7 +9,7 @@ int main(int argc, char *argv[]) MPI_Comm_size(MPI_COMM_WORLD, &nprocs); int n[3]; - field_descriptor f0, f1; + field_descriptor *f0, *f1; switch(argc) { @@ -19,10 +19,10 @@ int main(int argc, char *argv[]) // dimensions n[0] = atoi(argv[1]); n[1] = atoi(argv[2]); - f0.initialize(2, n, MPI_FLOAT); + f0 = new field_descriptor(2, n, MPI_FLOAT); n[0] = atoi(argv[2]); n[1] = atoi(argv[1]); - f1.initialize(2, n, MPI_FLOAT); + f1 = new field_descriptor(2, n, MPI_FLOAT); break; case 4: if (myrank == 0) @@ -31,29 +31,30 @@ int main(int argc, char *argv[]) n[0] = atoi(argv[1]); n[1] = atoi(argv[2]); n[2] = atoi(argv[3]); - f0.initialize(3, n, MPI_FLOAT); + f0 = new field_descriptor(3, n, MPI_FLOAT); n[0] = atoi(argv[3]); n[1] = atoi(argv[2]); n[2] = atoi(argv[1]); - f1.initialize(3, n, MPI_FLOAT); + f1 = new field_descriptor(3, n, MPI_FLOAT); break; default: printf("you messed up the parameters, I'm not doing anything.\n"); - f0.finalize(); - f1.finalize(); MPI_Finalize(); + return EXIT_SUCCESS; break; } float *a0, *a1; - a0 = (float*)malloc(f0.local_size*sizeof(float)); - a1 = (float*)malloc(f1.local_size*sizeof(float)); - f0.read("data0", (void*)a0); - f0.transpose(a0, a1); - f1.write("data1", (void*)a1); + a0 = (float*)malloc(f0->local_size*sizeof(float)); + a1 = (float*)malloc(f1->local_size*sizeof(float)); + f0->read("data0", (void*)a0); + f0->transpose(a0, a1); + f1->write("data1", (void*)a1); free(a0); free(a1); + delete f0; + delete f1; MPI_Finalize(); return EXIT_SUCCESS; } -- GitLab