Hi,
for several days I am trying to create MPI derived datatype in order to
send/receive an user defined object. I'm trying to implement it using
MPI::Datatype::Create_struct.
I have consulted several threads from the archive
http://www.open-mpi.org/community/lists/users/2012/01/18093.php
http://www.open-mpi.org/community/lists/users/2005/08/0123.php
http://www.open-mpi.org/community/lists/users/2008/08/6302.php
but I'm still havening difficulties to solve this issue.
There are some particular features that makes the task more difficult. Let
me explain: the obj. that I want to transmit is instantiated from a class
called MemberBlock. This class is a template class and contains: dynamic
allocating arrays, and objs. instantiated from other classes. Bellow is the
class declaration.
Therefore how can I construct a MPI dervied data type in this situation?
Any suggestions are highly appreciated
Thank you,
Victor Pomponiu
-------------------------------------------------------------------------------------------------------------------------
/**
* VecData.h: Interface class for data appearing in vector format.
*/
# include "DistData.h" //Interface class for data having a pairwise
distance measure.
class VecData: public DistData {
public:
// no properties, only public/private methods;
.........
}
/**
* VecDataBlock.h: Base class for storable data having a pairwise
* distance measure.
*/
class VecDataBlock {
public:
VecData** dataList; // Array of data items for this
block.
int numItems; // Number of data items assigned to the
block.
int blockID; // Integer identifier for this block.
int sampleID; // The sample identifier for this
block
int globalOffset; // Index of the first block item relative
to the full data set.
char* fileNamePrefix; // The file name prefix used for saving data
to disk.
char commentChar; // The character denoting input comment lines.
// methods ..........
}
/**
* MemberBlock.h: Class storing and managing member lists for a given
* block of data objects.
*/
class MemberBlock_base {
public:
virtual ~MemberBlock_base () {};
};
template <class ScoreType>
class MemberBlock: public MemberBlock_base {
public:
char* fileNamePrefix; // The file name prefix for the block save
file.
ofstream* saveFile; // refers to an open file currently being
used for accumulating
VecDataBlock* dataBlock; // The block of data items upon
which
int globalOffset; // The position of this block with
respect to the global ordering.
int numItems; // The number of data items assigned to
the block.
int sampleLevel; // The sample level from
which
ScoreType** memberScoreLList; // the scores of members associated with
// each data the
item.
int** memberIndexLList; // for each data item a list of global
indices of its members.
int* memberSizeList; // the number of list members.
int memberListBufferSize; // buffer size for storing an individual
member list.
int saveCount; // Keeps track of the number of member
lists saved
float* tempDistBuffer; // A temporary buffer for storing distances,
used for breaking
//methods....
}
|