0. 读懂程序mpisum.c,并进行编译、运行。 1. 将mpisum.c改为打印出最大值和包含最大值的一个进程号及该进程中最大值所在的数 组位置。给出用不同进程数、不同数组长度进行性能测试的结果。(提示:用MPI_MAXLOC) 2. 编写一个环形通信程序ring.c。该程序中首先由进程0随机产生一个整数,然后将该整 数发给进程1,进程1收到后将该数打印出来,然后再发送给进程2,依次类推,直到最后 一个进程收到后再发回给进程0。最后,进程0将所收到的数与原来的数进行比较,如果它 们一样则打印出"ring test passed.",否则则打印出"ring test failed."。下面是用4个 进程运行程序时的输出示例: % mpirun -np 4 ./ring proc 0: the number is 35678 proc 1: got 35678 proc 2: got 35678 proc 3: got 35678 proc 0: ring test passed. 3. 将mpisum.c中的MPI_Reduce改为用点对点通信来完成。给出不同进程数、不同数组长度 的性能测试结果并与原始程序进行比较。 4. 编写一个测试点对点通信的程序pingpong.c,该程序在进程0和1之间重复进行指定长度 的消息往返传递并统计消息往返传递花费的时间。这里,一次消息往返指由进程0发送一个 指定长度的消息给进程1,进程1收到消息后再把它发回给进程0的过程。消息长度和消息往 返的重复次数在运行程序时的命令行参数中给出。程序完成指定次数的消息往返操作后, 由进程0打印出消息长度、重复次数和平均每次消息往返所花费的时间。 (1) 编写pingpong.c。 (2)利用pingpong.c,统计不同消息长度 (建议从1字节倍增到8M字节) 的平均往返时间, 并填写在如下形式的表格中(表格太长的话可分成多个): -------------------------------------------------------------------------- 消息长度 1B 2B 4B 8B 16B 32B 64B 128B ... 1KB 2KB 4KB ... 1MB 2MB 4MB 8MB -------------------------------------------------------------------------- 往返时间 ... ... -------------------------------------------------------------------------- 5. (选做题) 假设一次消息传递的时间可由公式size/B+L给出,其中size为消息长度(MB), B为网络带宽(MB/s),L为延迟(s)。利4-(2)题得到的结果通过数据拟合估计B和L的值,它 们可以近似刻划互联网络的实际通信性能。如果有条件的话画图比较用公式计算出的消息 往返往返时间和实测的消息往返时间(采用log坐标)。(注:4-(2)题中一次消息往返时间 等于两次消息传递时间) 6. “二维Poisson方程”课件中的习题5和习题9。 7. 高级题: ftp://ftp.cc.ac.cn/pub/home/zlb/PCcourse/allgather.pdf ftp://ftp.cc.ac.cn/pub/home/zlb/PCcourse/numbering.pdf