分析并行代码
并行分析器提供了一个扩展的配置文件
命令和配置文件查看器专门为工人在一个平行的游泳池,让你看到每个工人花多少时间评估每个函数和交流或等待多少时间通信与其他工人。关于标准的更多信息分析器及其观点,明白了概要文件代码来提高性能。
针对并行分析使用mpiprofile
你如何使用命令以类似的方式配置文件
。
概要文件并行代码
这个例子展示了如何使用并行概要文件并行代码分析器对工人在一个平行的池。
创建一个平行的池。
numberOfWorkers = 3;池= parpool (numberOfWorkers);
开始平行池(parpool)使用“本地”概要文件…连接到平行池(工人数量:3)。
通过启用收集平行配置文件数据mpiprofile。
mpiprofile在
并行运行的代码。对于本示例,我们使用一个简单的parfor
循环遍历一系列值。
值= (5 12 13 1 12 5);抽搐;parforidx = 1:元素个数(值)u =兰德(值(idx) * 3 e4, 1);(idx) = max (conv (u, u));结束toc
运行时间是51.886814秒。
代码完成后,从并行分析器通过调用查看结果mpiprofile查看器
。这一行动也停止概要数据收集。
mpiprofile查看器
报告显示了每个函数执行时间信息,运行在工人。你可以探索在每个工人功能需要很长时间。
一般来说,比较总执行时间最小和最大的工人是有用的。为此,单击最大值与最小值的总时间在报告中。在这个例子中,观察到conv
多次执行和花费的时间大大比另一名工人。这个观察表明,负载可能不是均匀地分布在工人。
如果你不知道每次迭代的工作负载,那么一个良好的实践是随机迭代,如以下示例代码。
值=值(randperm(元素个数(值)));
如果你知道在每个迭代的工作量
parfor
循环,那么您可以使用parforOptions
来控制迭代分割成子范围的工人。有关更多信息,请参见parforOptions
。
在这个例子中,大值(idx)
迭代,计算量。每个连续的值值
平衡低和高强度计算。更好地分布工作负载,创建一个组parfor
选项来划分parfor
迭代子范围的大小2
。
选择= parforOptions(池,“RangePartitionMethod”,“固定”,“SubrangeSize”2);
使并行分析器。
mpiprofile在
运行相同的代码。使用parfor
选项,通过他们的第二个输入参数parfor
。
值= (5 12 13 1 12 5);抽搐;parfor(idx = 1:元素个数(值),选择)u =兰德(值(idx) * 3 e4, 1);(idx) = max (conv (u, u));结束toc
运行时间是33.813523秒。
可视化并行分析器的结果。
mpiprofile查看器
在报告中,选择最大值与最小值的总时间比较的工人总执行时间最小值和最大值。注意到,这一次,多次执行的conv
采取类似的时间在所有的工人。工作负载现在更好的分布。
分析并行配置文件数据
分析器收集信息代码的执行每个工人和工人之间的沟通。这些信息包括:
每个函数的执行时间在每个工人。
在每个函数的每一行代码的执行时间。
每个工人之间传输的数据量。
每个工人的时间花在等待通信。
本节的其余部分是一个例子,说明了并行配置文件查看器的一些特性。矩阵乘法的示例配置文件并行执行分布式阵列并行集群的工人。
parpool
开始平行池(parpool)使用“MyCluster”概要文件…连接到平行池(工人数量:64)。
R1 =兰德(5 e4,“分布式”);R2 =兰德(5 e4,“分布式”);mpiprofile R = R1 * R2;mpiprofile查看器
最后一个命令窗口打开分析器,首先显示并行概要总结总结报告(或函数)为职工1。
每个函数的函数总结报告显示数据上执行一个工人在使用以下标题可排序的列:
列标题 | 描述 |
---|---|
调用 | 多少次的函数被称为工人 |
总时间 | 时间的总量这个工人在执行这个函数 |
自我的时间 | 这个工人在这个函数所花费的时间,而不是在儿童或本地函数 |
总通讯时间 | 传输数据所花费的总时间这个工人和其他工人,包括等待时间接收数据 |
自我通讯等待时间 | 这个工人在这个函数所花费的时间等待接收数据从其他工人 |
总Inter-worker数据 | 传输的数据量,这对这个函数工人 |
计算时间比 | 时间的比率在计算这个函数和总时间(包括沟通时间)这个函数 |
总时间的情节 | 条形图显示相对大小的自我,自我通讯等待时间和总时间为这个函数在这个工人 |
选择列表中的任何函数的名字更多细节关于这个函数的执行。函数详细报告codistributor1d.hMtimesImpl
包括这个清单:
报告显示的代码来自客户端。如果代码已经改变了在客户端自工作在工人们交流,或者如果工人们正在运行一个不同版本的功能,显示可能不准确地反映实际执行。
为每个工人可以显示信息,或使用比较控制显示信息同时几个工人。两个按钮提供自动比较选择,所以你可以比较的数据从工人最和最少的时间来执行代码,或数据的工人花了大部分与最少的时间在执行交织在一起交流。手动的比较选择可以比较的数据满足一定标准的特定工人或工人。
下面的清单的汇总报告显示使用的结果自动比较选择的比较(最大和最小TotalTime)。比较显示数据从62年职工50相比,职工,因为这些工人最和最少的时间执行的代码。
下图显示了执行的所有函数摘要在资料收集时间。的手动的比较选择的最大时间总意味着数据被认为是所有工人的所有功能,以确定哪些工人花了最长时间在每个函数。每个函数的名字旁边的工人花了最长的时间来执行这个函数。工人的其他列列表的数据。
下一个图显示了工人们的总结报告,为每个函数最和最不花时间。一个手动的比较选择的最大时间总对分钟时间> 0聚合生成这个总结。总设置表明分析器从所有工人应考虑数据功能,最大和最小。这份报告列出的数据codistributor1d.hMtimesImpl
从工人50到62年,因为他们的最大和最小时间花在这个函数。同样,列出了其他功能。
选择一个函数名的汇总清单比较详细的比较。的详细比较codistributor1d.hMtimesImpl
就像这样,逐行显示数据从两个工人:
块通信数据,选择所有人均通信在显示数据菜单。顶部的部分情节视图报告情节互相每个工人多少数据接收工人对所有功能。
只看到一个情节交织在一起交流的时代,选择每个工人的沟通时间在显示数据菜单。
情节类似于前两个数据可以帮助你确定你的工人之间的平衡工作,最好的办法也许是通过改变你的分区方案codistributed数组。