【问题标题】:compute minimum value from n integers [closed]从n个整数计算最小值[关闭]
【发布时间】:2014-06-23 15:59:08
【问题描述】:

我需要编写一个 C 函数来计算 n 个输入的最小值,并将它们按升序插入到数组中。输入没什么特别的。全部为正且

简而言之,MPI master 将 masterArray(填充随机整数)拆分为 subArrays。从站对子数组进行排序并将其返回给主站。然后,主人必须将已排序的子数组重新拼接到一个已排序的 finalArray 中(除非我可以重用 masterArray)。主机根据从机的数量获得n个子数组,需要从n个数组中挑选出n个值中的最小值,然后需要将指针前进到从中挑选出来的数组,所以该值将不再被考虑。直到所有的值都按升序传输到 finalArray 中。

我存储排序后的子数组的方式,因为它们来自主服务器的 Recv,是 memcpy() 将每个 chunkSize 元素的临时数组,其中 chunkSize = ARRAY_SIZE/(nprocs-1) 放入我称为一维数组 semiSortedArrays 中。

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

非常感谢,斯科特

【问题讨论】:

  • TL;DR 但是你的代码在哪里需要查看?
  • Errr 为什么这与排序有关? MPI 有一个 reduce 方法,可以在一次调用中完成此操作。 mpitutorial.com/mpi-reduce-and-allreduce: "MPI_MIN – 返回最小元素。"
  • 一个接受 n 个值的函数 int *array;数组 = malloc(7);无效 func1(int *a);等等。你有一些你尝试过的代码吗?
  • 哦,我不计算(我什至不确定这是否应该称为计算)来自 n 个输入的最小值......它应该对来自 n 个输入向量的最小值进行排序。我猜……
  • 这不就是一个归并排序吗?

标签: c arrays sorting mpi


【解决方案1】:

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

不要尝试。创建一个方法,该方法接受一个指向值数组的第一个元素的指针,以及一个整数计数来说明 n 是什么。

我无法跟踪所有指针

我不怀疑。那样 C 就很棘手了。

非常感谢一些帮助,因为我很困惑。

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

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

我的第二条建议是:在编写另一行代码之前,编写规范。尝试用一个或多个函数来编写你的规范,每个函数都接受,不会改变这些值,并产生一个结果 取决于输入的值。尝试使函数足够小和足够清晰,以便可以独立理解和测试它们。

这样的函数称为纯函数,推理纯函数比推理修改其参数的函数要容易。 p>

一旦编写了规范,您就可以仔细编写代码以匹配规范。 你最终可能会复制很多状态。没关系。一旦代码正确并通过了您的大量测试套件,您就可以尝试找出如何使其更快或进行突变或其他方式。

简而言之:

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

按此顺序。

【讨论】:

  • 所以,给出一些我正在努力解决的代码,这里是函数 def 试图找到最小值,但是有问题: int minimum(int *array, int size) { int minimum , 我, 位置 = 1;最小值 = 数组 [0]; for(i = 0 ; i
  • for(k=0; k
  • 开始一个新问题并删除这个问题。确保新问题是具体的。我找不到我的错误不是一个特定的问题。
  • @user3583629:也请阅读meta.stackoverflow.com/questions/253787/…
猜你喜欢
  • 2021-01-25
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
相关资源
最近更新 更多