Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not create file if not writing #2815

Merged
merged 5 commits into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- Updated `checkpoint_simulator` to not create and close file if not writing

### Fixed

### Removed
Expand Down
6 changes: 3 additions & 3 deletions benchmarks/io/checkpoint_simulator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ The code has the following options and needs an ESMF rc file named checkpoint\_b
- "NX:" the x distribution for each face
- "NY:" the y distribution for each face
- "IM\_WORLD:" the cube resolution
- "LM:" the nubmer of levels
- "LM:" the number of levels
- "NUM\_WRITERS:" the number of writing processes either to a single or independent files
- "NUM\_ARRAYS:" the number of 3D variables to write to the file
- "CHUNK:" whether to chunk, default true
- "GATHER\_3D:" gather all levels at once (default is false which means a level at a time is gathered)
- "SPLIT\_FILE:" default false, if true, each writer writes to and independent file
- "WRITE\_BARRIER:" default false, add a barrier before each write to for synchronization
- "DO\_WRITES:" default true, if false skips writing (so just an mpi test at that point)
- "NTRIAL:" default 1, the number of trials to make writing
- "NTRIALS:" default 1, the number of trials to make writing
- "RANDOM\_DATA:" default true, if true will arrays with random data, if false sets the array to the rank of the process

Note that whatever you set NX and NY to the program must be run on 6*NY*NY processors and the number of writers must evenly divide 6*NY
Note that whatever you set NX and NY to the program must be run on `6*NX*NY` processors and the number of writers must evenly divide `6*NY`
38 changes: 19 additions & 19 deletions benchmarks/io/checkpoint_simulator/checkpoint_simulator.F90
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ module mapl_checkpoint_support_mod
procedure :: write_level
procedure :: write_variable
procedure :: reset
end type
end type

contains

Expand Down Expand Up @@ -98,7 +98,7 @@ subroutine set_parameters(this,config_file)
this%mpi_time = 0.0
call MPI_COMM_SIZE(MPI_COMM_WORLD,comm_size,status)
if (comm_size /= (this%nx*this%ny*6)) call MPI_Abort(mpi_comm_world,error_code,status)

contains

function get_logical_key(config,label,default_val) result(val)
Expand All @@ -115,7 +115,7 @@ function get_logical_key(config,label,default_val) result(val)
val = default_val
end if
end function

function get_integer_key(config,label,default_val) result(val)
integer :: val
type(ESMF_Config), intent(Inout) :: config
Expand All @@ -130,7 +130,7 @@ function get_integer_key(config,label,default_val) result(val)
val = default_val
end if
end function

end subroutine

subroutine reset(this)
Expand All @@ -144,7 +144,7 @@ subroutine reset(this)
this%time_writing = 0.d0
this%mpi_time = 0.0
end subroutine

function compute_decomposition(this,axis) result(decomp)
integer, allocatable :: decomp(:)
class(test_support), intent(inout) :: this
Expand Down Expand Up @@ -172,7 +172,7 @@ subroutine allocate_n_arrays(this,im,jm)
class(test_support), intent(inout) :: this
integer, intent(in) :: im
integer, intent(in) :: jm

integer :: n,rank,status
character(len=3) :: formatted_int
integer :: seed_size
Expand Down Expand Up @@ -201,7 +201,7 @@ subroutine create_arrays(this)
integer, allocatable :: ims(:),jms(:)
integer :: rank, status,comm_size,n,i,j,rank_counter,offset,index_offset

call MPI_Comm_Rank(MPI_COMM_WORLD,rank,status)
call MPI_Comm_Rank(MPI_COMM_WORLD,rank,status)
call MPI_Comm_Size(MPI_COMM_WORLD,comm_size,status)
allocate(this%bundle(this%num_arrays))
ims = this%compute_decomposition(axis=1)
Expand Down Expand Up @@ -244,13 +244,13 @@ subroutine create_arrays(this)
rank_counter = rank_counter + 1
enddo
enddo
enddo
enddo

end subroutine

subroutine create_communicators(this)
class(test_support), intent(inout) :: this

integer :: myid,status,nx0,ny0,color,j,ny_by_writers,local_ny,key

local_ny = this%ny*6
Expand Down Expand Up @@ -280,7 +280,7 @@ subroutine create_communicators(this)

call MPI_BARRIER(mpi_comm_world,status)


end subroutine

subroutine close_file(this)
Expand Down Expand Up @@ -344,7 +344,7 @@ subroutine create_file(this)
status = nf90_def_dim(this%ncid,"lon",this%im_world,xdim)
if (this%split_file) then
y_size = this%im_world*6/this%num_writers
else
else
y_size = this%im_world*6
end if
status = nf90_def_dim(this%ncid,"lat",y_size,ydim)
Expand Down Expand Up @@ -384,7 +384,7 @@ subroutine create_file(this)
subroutine write_file(this)
class(test_support), intent(inout) :: this
integer :: status,i,l

integer(kind=INT64) :: sub_start,sub_end

call MPI_BARRIER(MPI_COMM_WORLD,status)
Expand Down Expand Up @@ -619,7 +619,7 @@ subroutine write_level(this,var_name,local_var,z_index)
io_time = end_time-start_time
this%data_volume = this%data_volume+byte_to_mega*4.d0*size(var,kind=INT64)
this%time_writing = this%time_writing + real(io_time,kind=REAL64)/real(count_rate,kind=REAL64)

deallocate(VAR, stat=status)

endif ! myiorank
Expand Down Expand Up @@ -676,13 +676,13 @@ program checkpoint_tester

call system_clock(count=start_write)
call MPI_Barrier(MPI_COMM_WORLD,status)
call support%create_file()
if (support%do_writes) call support%create_file()
call MPI_Barrier(MPI_COMM_WORLD,status)

call support%write_file()
call MPI_Barrier(MPI_COMM_WORLD,status)

call support%close_file()
if (support%do_writes) call support%close_file()
call MPI_Barrier(MPI_COMM_WORLD,status)

call system_clock(count=end_time)
Expand All @@ -707,7 +707,7 @@ program checkpoint_tester
all_proc_throughput(i) = real(support%num_writers,kind=REAL32)*average_volume/average_time
end if
enddo

call system_clock(count=end_app)
application_time = real(end_app - start_app,kind=REAL64)/real(count_rate,kind=REAL64)
if (rank == 0) then
Expand Down Expand Up @@ -741,7 +741,7 @@ program checkpoint_tester
std_fs_throughput = sqrt(std_fs_throughput/real(support%n_trials,kind=REAL64))
write(*,'(G16.8,G16.8,G16.8,G16.8)')mean_throughput,std_throughput,mean_fs_throughput,std_fs_throughput
end if


call MPI_Finalize(status)
end program