我有我想填写读文件(并行,使用set_view等等)C结构的阵列添加填充到MPI结构
typedef struct
{
char type;
double value;
double velocity;
} Cell;
我的问题是,某些文件(TYPE1 )只会有type
和value
(与案件速度成为留给O,以及其他一些文件(2型)都在我type
,value
和velocity
因此,在我的文件中读取n
块时,我(读取nx 9位(case1)或nx 17位((case2)我必须在良好的对抗中加入缓冲区。
我开始用mpi_cell_aligned
型
MPI_Datatype mpi_cell_aligned;
int count[] = { 1, 1, 1 };
MPI_Aint displ[] = { offsetof(Cell, type), offsetof(Cell, value), offsetof(Cell, velocity) };
MPI_Datatype types[] = { MPI_CHAR, MPI_DOUBLE, MPI_DOUBLE };
switch(type)
{
case 1: MPI_Type_create_struct(2, count, displ, types, &mpi_cell_aligned); break;
case 2: MPI_Type_create_struct(3, count, displ, types, &mpi_cell_aligned); break;
}
MPI_Type_commit(&mpi_cell_aligned);
而且使用MPI_Type_contiguous
我还内置了mpi_cell_packed
类型与代表9/17连续比特(UI二进制文件格式)。
我的问题是写入我的缓冲区,我试图建立一个矢量类型,其中包含几个mpi_cell_aligned
。在情况2中,很容易,因为每种类型都紧挨着另一种类型,但在情况1中,我必须考虑我的类型之间的填充,这与我们的1倍长度相对应。
不幸的是,MPI_Type_Vector
的步幅必须以结构数量来衡量,而不是以字节为单位。与此同时,我不能用MPI_BYTE
来描述我的矢量,因为我的单元格结构不完整(char和第一个double之间的对齐填充)。
如何构建相应的MPI数据类型,以便在case 1中正确表示Cell数组?
我使用sizeof(细胞)作为一个程度,我做了这份工作。谢谢 – Amxx