测量算法的计算时间(使用MPI,并行计算)

http://pastebin.com/Xb6GLv8Y 我的代码执行以下操作: 它将在集群中并行执行。主级别将生成一个包含很多元素(最多1.6M个元素)的后代顺序数组,将该数组划分为较小的数组,并将这些部分的每一个发送到群集中的每台计算机。群集中的每台计算机都将在阵列的一部分中执行快速排序算法,并将此(按升序排列)的阵列发送回主级。然后,主等级将使用修改后的冒泡排序算法对从子等级收到的每个部分进行排序,并构建新的有序数组。 (目标是在并行计算中执行快速排序算法)。 一切工作都很好,唯一的问题是我需要测量算法的计算时间。这是大学的工作,因此PDF表示“仅计算订购算法的时间”。所以我认为不考虑网络等之间的阵列传输。 我在代码中所做的是测量每个儿童等级的快速排序经过时间。最大的时间将是计算时间。我对吗?但有一个问题。查看输出:
Array final, first 1, last 800000
Vetor de 800000 elementos ordenado com quicksort em paralelo (99 threads).
Dentre o tempo de processamento de cada node, o maior foi 140000, 0.14 seconds.

Array final, first 1, last 1600000
Vetor de 1600000 elementos ordenado com quicksort em paralelo (99 threads).
Dentre o tempo de processamento de cada node, o maior foi 560000, 0.56 seconds.
它说,一个孩子进行快速分类的最大时间是0.56秒。但是我等了30秒钟才打印出最后一个结果。那荒谬的区别正常吗?我是否正确测量时间? 谢谢您的帮助     
已邀请:
        可能会发生几件事。 子进程完成后,您无需计算rank0中sort和joinArrays的时间。 每个孩子花费0.56秒,但每个孩子的开始时间不必相同。我不知道您的集群使用哪种通信结构,但是考虑到要移动的数据量很少,我怀疑这将是一个问题。     
        如果要测量整个排序的时间,则必须测量直到最后一个处理器完成为止的时间。您可以通过在MPI_Barrier之后花费整理时间来完成此操作。 节点之间的速度差异为60倍,意味着您的负载平衡不佳。有些节点的工作量要比其他节点多,如果要获得良好的性能,则必须找到一种使负载均衡的方法。 如果您对并行排序感兴趣,那么我建议您阅读PSort算法和源代码。它先进行本地排序,然后进行一些最少的通信,以确定哪个处理器应获得哪个部分,然后将数据大规模传输到其目标处理器。它具有最小的通信开销。     

要回复问题请先登录注册