从n个整数计算最小值

时间:2014-05-06 21:28:57

标签: c arrays sorting mpi

我需要编写一个C函数来计算n个输入的最小值,并在数组中按升序插入它们。输入没什么特别之处。所有正面和< 100.棘手的部分是结果来自阻塞MPI_Recv(),输出不仅要计算n个输入的当前最小值,还需要跟踪结果数组中已经插入的值,这样他们就可以成为未来n组投入的考虑因素。

简而言之,MPI master将masterArray(填充随机整数)拆分为subArrays。从属服务器对subArrays进行排序并将其返回给主服务器。然后,master必须将已排序的subArrays拼接回一个已排序的finalArray(除非我可以重用masterArray)。主机获取n个subArrays,取决于从机的数量,需要选择,比如第一次,n个数组中n个值中的最小值,然后需要将指针前进到从中挑选的数组,所以这个价值不再被考虑了。这需要做,直到所有值按升序传输到finalArray。

我存储已排序的subArrays的方式,因为它们来自master的Recv是memcpy()临时数组的每个chunkSize元素,其中chunkSize = ARRAY_SIZE /(nprocs-1)成为一维数组I叫,semiSortedArrays。

首先,我不太确定如何定义一个接受n值的函数。我无法跟踪所有指针以及如何将n个参数传递给函数调用。因为我很困惑,我真的很感激一些帮助。

非常感谢,Scott

1 个答案:

答案 0 :(得分:5)

  

首先,我不太确定如何定义一个接受n个值的函数。

不要试试。创建一个方法,该方法将指针指向值数组的第一个元素,并使用整数计数来表示n是什么。

  

我无法跟踪所有指针

我不怀疑。 C这样很棘手。

  

我真的很感激一些帮助,因为我很困惑。

我的第一点建议是:删除这个问题,然后提出一个关于实际代码的更集中的技术问题。

  

棘手的部分是结果来自阻塞MPI_Recv(),输出不仅要计算n个输入的当前最小值,还需要跟踪结果数组中已插入的值,以便它们可以成为未来n组输入的考虑因素。

我的第二点建议是:在编写另一行代码之前,编写规范。尝试根据一个或多个函数编写规范,每个函数,不会改变这些值,并生成结果仅依赖 输入的值。尝试使功能足够小并且足够清晰,以便可以独立地理解和测试它们。

这样的函数被称为纯函数,并且更容易推理纯函数,而不是推理修改其参数的函数。

一旦您编写了该规范,您就可以仔细编写符合规范的代码。 你最终可能会制作很多状态副本。没关系。一旦代码正确并通过您广泛的测试套件,那么您可以尝试弄清楚如何使其更快或做突变或其他什么。

简而言之:

  • 设计
  • 实施
  • 测试
  • 优化

按此顺序。