2024年国科大-高性能计算编程-作业六

作业题目

提交内容一:编译运行代码、执行算例、统计运行时间并绘制加速比曲线

GhostExchange3D_ArrayAssign

  • 创建并进入build文件夹,执行cmake ..make来编译可执行文件

  • 运行算例一mpirun -np 1 ./GhostExchange -x 1 -y 1 -z 1

  • 运行算例二mpirun -np 4 ./GhostExchange -x 1 -y 2 -z 2

  • 运行算例三mpirun -np 8 ./GhostExchange -x 2 -y 2 -z 2

  • 数据统计

thread_numstencilboundary conditionghost celltotal
15.4315150.7909560.0472466.325972
40.8903510.1424880.5538221.605789
80.5339620.0758180.5996331.219806

CartExchange3D_Neighbor

  • 创建并进入build文件夹,执行cmake ..make来编译可执行文件

  • 运行算例一mpirun -np 1 ./CartExchange -x 1 -y 1 -z 1

  • 运行算例二mpirun -np 4 ./CartExchange -x 1 -y 2 -z 2

  • 运行算例三mpirun -np 8 ./CartExchange -x 2 -y 2 -z 2

  • 数据统计

thread_numstencilboundary conditionghost celltotal
15.4902870.7901110.0009846.337239
40.8823290.1481430.5026011.548727
80.4055360.0471570.4868650.947385

加速比曲线绘制

  • 曲线绘制代码
import matplotlib.pyplot as plt

# 时间数据(秒)
times = {
    1: 6.325972,
    4: 1.605789,
    8: 1.219806
}

# 计算加速比
speedup = {n: times[1] / t for n, t in times.items()}

# 绘制加速比曲线
plt.figure(figsize=(10, 6))
plt.plot(list(speedup.keys()), list(speedup.values()), marker='o', linestyle='-', color='b')

# 添加图表标题和标签
plt.title('Speedup Curve')
plt.xlabel('Number of Processes')
plt.ylabel('Speedup')
plt.grid(True)

# 显示图表
plt.show()

  • GhostExchange3D_ArrayAssign

  • CartExchange3D_Neighbor

提交内容二:说明代码中MPI函数的功能

  • MPI_Init

    它初始化MPI库,并建立MPI环境,必须在调用任何其他MPI函数之前调用MPI_Init

  • MPI_Comm_rank

    获取当前进程的秩(rank),用于区分不同的进程。MPI_COMM_WORLD 是默认的通信器,表示所有进程都参与的通信域

  • MPI_Comm_size

    获取总的进程数。nprocs 存储了当前通信域中总的进程数量

  • MPI_Irecv

    非阻塞地接收消息

  • MPI_Isend

    非阻塞地发送消息

  • MPI_Waitall

    等待一组非阻塞通信操作完成

  • MPI_Allreduce

    在所有进程中执行全局归约操作,并将结果分发给所有进程

  • MPI_Barrier

    同步所有进程,确保所有进程都到达此点后才能继续执行。MPI_Barrier是一个阻塞操作,所有进程必须都调用这个函数,才能继续执行后续代码

  • MPI_Finalize

    结束MPI环境,释放相关资源。调用MPI_Finalize后,不能再使用任何MPI函数

  • MPI_Cart_create

    创建一个笛卡尔拓扑结构的通信域。dims 数组定义每个维度上的进程数,periods 数组定义每个维度上的周期性,cart_comm 是创建的通信域

  • MPI_Cart_coords

    获取指定进程在笛卡尔拓扑结构中的坐标。coords 数组存储进程的坐标

  • MPI_Cart_shift

    计算相邻进程的秩。第一个参数是通信域,第二个参数是移动的维度,第三个参数是移动的步数,后两个参数分别存储相邻进程的秩

自评分

自评分

  • 5分(3+2)

理由

  • 完成两个提交内容,使用python绘制加速比曲线
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值