如何解决在 MPI 中定义新数据类型,并在 C 中使用数组
我需要向主进程发送一个字符数组和一个计数器。我的想法是定义一个 mpi 类型,然后将其发送给 master。数组大小可变,需要从字符指针创建。 基本上,这些流程具有以下数据结构:
struct WordCounter
{
char *word;
int word_count;
struct WordCounter *pNext; /* Pointer to the next word counter in the list */
};
我需要做的是尝试将char * word和int word count发送给master,所以char *word必须复制到一个没有指针的char数组中。我应该如何定义新的 mpi 数据类型?
我的想法是使用这个结构并将其提交为 Mpi 数据类型,但是我应该如何管理构造? 我可以取 char *word 的维度并在结构中使用来提交。
struct WordAndCount
{
char word[n]; // n varies according to the length of the word
int count;
};
我想做的是:
MPI_Init(&argc,&argv);
int world_size,rank;
MPI_Comm_size(MPI_COMM_WORLD,&world_size);
MPI_Comm_rank (MPI_COMM_WORLD,&rank);
MPI_Datatype wordinfo,oldtype[1];
MPI_Aint offset[1],lw,extent;
int blockcounts[1];
offset[0] = 0;
oldtype[0] = MPI_CHAR;
blockcounts[0] = 1;
此后我无法继续,我是 mpi 的新手,您能帮帮我吗?另一件事是我如何在静态数组中复制字符指针。我可以用一个简单的 for 循环指针并将里面的字符复制到数组中吗?
一个例子是:
Master 构建了他的 WordCounter,其中包含:Hello (word) 1(counter),Hi 2,etc... 进程 1 构建了他的 WordCounter,其中包含:Hello 3,hi 4。 进程 2 构建了他的 WordCounter,其中包含:hi 8,hello 3,sun 5。
Master 需要在第一轮 hello 3(来自 process1)、hi 8(来自 process 2)时通过聚集接收。在第二轮 hi 4(来自进程 1)你好 3(来自进程 2)等等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。