MPI 梯形积分法(Fortran)
使用MPI分布式接口,Fortran语言实现,梯形积分法实现计算函数积分,下面的代码中示例函数是
y=x^2
,可以在
f(x)
中修改成其他函数。
program main
use mpi
implicit none
! MPI 相关变量
integer :: rank, size, ierr, stat(MPI_STATUS_SIZE), i
! 运算相关变量
real :: a, b, h, local_a, local_b, local_n, local_total, total
integer :: n
! 计算运算时间相关变量
real(8) :: start_time, finish_time
real :: local_elapsed, elapsed
! 函数声明
real, external :: trap
! 初始化
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierr)
! 获取输入
call get_input(rank, size, stat, ierr, a, b, n)
! 同步各进程,各进程开始计时
call MPI_BARRIER(MPI_COMM_WORLD, ierr)
start_time = MPI_WTIME()
! 各进程计算
h = (b - a) / n
local_n = n / size
local_a = a + rank*local_n*h
local_b = local_a + local_n*h
local_total = trap(local_a, local_b, local_n, h)
! 求和并发送到0号进程
call MPI_REDUCE(local_total, total, 1, MPI_REAL, MPI_SUM,