Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector 来自所有处理器的MPI组合向量_Vector_Fortran_Concatenation_Mpi - Fatal编程技术网

Vector 来自所有处理器的MPI组合向量

Vector 来自所有处理器的MPI组合向量,vector,fortran,concatenation,mpi,Vector,Fortran,Concatenation,Mpi,我正在编写一个MPI fortran程序,有三个不同长度的向量,分为三个等级。我希望以“串联”的方式将它们组合在一起,例如: Rank 0: a0 = [1 2 3 4 5] Rank 1: a1 = [3 5 7 9] Rank 2: a2 = [2 4 6 8 10 12] 将它们结合起来: Rank 0: a = [1 2 3 4 5 3 5 7 9 2 4 6 8 10 12] 您能告诉我如何做到这一点吗?由于向量的大小取决于等级,因此您可以使用MPI\u Gatherv()以实现预

我正在编写一个MPI fortran程序,有三个不同长度的向量,分为三个等级。我希望以“串联”的方式将它们组合在一起,例如:

Rank 0: a0 = [1 2 3 4 5]
Rank 1: a1 = [3 5 7 9]
Rank 2: a2 = [2 4 6 8 10 12]
将它们结合起来:

Rank 0: a = [1 2 3 4 5 3 5 7 9 2 4 6 8 10 12]

您能告诉我如何做到这一点吗?

由于向量的大小取决于等级,因此您可以使用
MPI\u Gatherv()
以实现预期的结果

MPI\u Gatherv或MPI\u Gatherv感谢@alfC的回答。我还找到了mpi_gatherv并阅读了send链接中给出的示例;但我仍然不确定如何在我的情况下正确地做这件事。似乎我应该事先发送向量的长度,以便稍后使用mpi_gatherv。对吗?你真的试过吗?你在挣扎什么?我们不会为您编写整个代码。此外,链接页面还包含详细的示例。@ctnguyen,是的,这没有什么神奇之处,如果只有每个进程知道大小,那么在调用
gatherv
之前必须传递信息(例如,使用
gather
对大小进行查询)。很可能您可以从一个集中点了解这些信息。我鼓励您在问题中添加一些代码,以提高获得帮助的机会。@alfC感谢您的回答。我现在完全清楚了,这个例子我很成功。我感谢你的支持。PS:这是我在MPI的第一天,所以我的问题似乎很愚蠢,对此表示抱歉,再次感谢您的善意帮助。谢谢@Gilles的回答。我还找到了mpi_gatherv并阅读了send链接中给出的示例;但我仍然不确定如何在我的情况下正确地做这件事。似乎我应该事先发送向量的长度,以便稍后使用mpi_gatherv。是否正确?如果根任务(示例中的rank
0
)不知道所有向量长度,那么是的,您需要首先收集此信息(
MPI\u Gather()
是一个很好的匹配)。然后您可以
MPI\u Gatherv()
数据。感谢您的澄清。我照你的建议做了。顺便说一句,这个链接为我的问题提供了一个很好的例子。