fengyanshi / FUNWAVE-TVD

43 stars 51 forks source link

Binary Field Output in Parallel #20

Closed mayhl closed 7 years ago

mayhl commented 7 years ago

@fengyanshi -- @malej and I have been working on the parallel I/O for FUNWAVE (Matt mentioned it to you during the last FUNWAVE-TVD teleconference). This one pertains only to field variables (eta, u, v, etc. etc.) and not the station output. This was implemented so that each process/rank can write to an offset (different memory location) based on its rank. All is written in binary. We have tested it and it performs well. We tested it on a local laptop (2,4,8 cores), as well as Topaz for several hundred (144, 288 for St. George Harbor) and even 1300 ranks for Carrara Harbor.

The major gains are for larger problems (thousand+ by thousand+ points), see example below. We have observed at least a 30% speed up for larger problems, and for smaller problems we were slightly faster than the original ASCII method of 1 process/rank writing to a file (~5-10%). Another benefit is that the file output size is immediately 50% smaller when compared to the the original ASCII output.

Once you test and merge this branch into your master, you will not have to add an option in the input.txt file for specifying FIELD_IO_TYPE as either ASCII or BINARY (all lower or uppercase works and default is ASCII),

Also note that this pull request may show you that many files have been changed, but all we did is ran dos2unix command on all Fortran files (*.F), as someone is editing them in a non-standard editor, which is adding hidden characters (e.g., ^M) to the source files.

fengyanshi commented 7 years ago

thanks @mayhl and @malej. I will re-run 'simple_cases' with the new code