我需要编写一个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)到我调用的1D数组,semiSortedArrays.
首先,我不太确定如何定义一个接受n值的函数.我无法跟踪所有指针以及如何将n个参数传递给函数调用.我真的很感激一些帮助,因为我很困惑.
非常感谢,斯科特
首先,我不太确定如何定义一个接受n值的函数.
别试试.创建一个方法,该方法将指针指向值数组的第一个元素,并使用整数计数来表示n是什么.
我无法跟踪所有指针
我不怀疑.C这样很棘手.
我真的很感激一些帮助,因为我很困惑.
我的第一点建议是:删除这个问题,然后提出一个关于实际代码的更集中的技术问题.
棘手的部分是结果来自阻塞MPI_Recv(),输出不仅要计算n个输入的当前最小值,还需要跟踪结果数组中已插入的值,以便它们可以作为未来n个输入组的考虑因素.
我的第二点建议是:在编写另一行代码之前,编写一个规范.尝试根据一个或多个函数编写规范,每个函数都取值,不改变这些值,并仅根据输入的值生成结果.尝试使功能足够小并且足够清晰,以便可以独立地理解和测试它们.
这种功能被称为纯函数,这是远远容易推理纯函数比它来思考该修改其参数的函数.
一旦编写了该规范,就可以仔细编写代码以符合规范. 你最终可能会制作很多州的副本.没关系.一旦代码正确并通过了您广泛的测试套件,那么您可以尝试弄清楚如何使其更快或做突变或其他什么.
简而言之:
以该顺序.