gpt4 book ai didi

c - MPI 数据类型对齐

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:34 25 4
gpt4 key购买 nike

我正在编写示例代码,但无法发送和接收相同的值。

我创建的数据类型是

typedef struct customData{
double iv;
double dv[5];
char cv[10];
} customData;


我在这里创建数据类型

MPI_Datatype type;
MPI_Datatype ctype[3] = {MPI_DOUBLE, MPI_DOUBLE, MPI_CHAR};
int blocklen[3] = {1, 5, 10};
MPI_Aint disp[3] = { 0, sizeof(double), sizeof(double)*6 };

MPI_Type_create_struct(1, blocklen, disp, ctype, &type);
MPI_Type_commit(&type);


发送和接收

if(rank == 0){
customData data = {5,
{1,2,3,4,5},
{'h','d','h','a','q','w','e','s','l','z'}};
printf("%f %.2f %c\n", data.iv, data.dv[0], data.cv[0]);

MPI_Send(&data, 1, type, 1, 0, MPI_COMM_WORLD);
} else {
customData recv;
MPI_Status status;
MPI_Recv(&recv, 1, type, 0, 0, MPI_COMM_WORLD, &status);
printf("%f %.2f %c\n", recv.iv, recv.dv[0], recv.cv[0]);
}

输出是
5.000000 1.00 小时
5.000000 0.00 �

最佳答案

您应该在 MPI_Type_create_struct 中将结构中的元素数量设置为 3 而不是 1。

MPI_Type_create_struct(3, blocklen, disp, ctype, &type);

我测试了一下,得到了:

5.000000 1.00 h
5.000000 1.00 h

这里有一些信息:

Trouble Understanding MPI_Type_create_struct

struct serialization in C and transfer over MPI

关于c - MPI 数据类型对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50956288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com