微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 MPI 中定义新数据类型,并在 C 中使用数组

如何解决在 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 举报,一经查实,本站将立刻删除。