For the moment, this repository contains only one example (but you may also be interested by exploring_coarrays).
ppm_coarray_buddhabrot.f90 is a CLI program drawing a Buddhabrot in a portable pixmap binary format (PPM) file, a very basic uncompressed image file format. Each Fortran image is computing its own Buddhabrot, and they are finally summed using the co_sum() collective subroutine. The process is therefore very similar to what is done in astrophotography.
Starting from version 16, GFortran supports natively coarrays using shared memory mulithreading on single node machines:
$ gfortran -Ofast -march=native -mtune=native -fcoarray=lib ppm_coarray_buddhabrot.f90 -lcaf_shmem && ./a.outYou can force the number of images (8 for example) with:
$ export GFORTRAN_NUM_IMAGES=8The -lcaf_shmem is necessary until a -fcoarray=shared option is added in a later GFortran release.
You needed to install OpenCoarrays and type that command (8 images here):
$ caf -Ofast -march=native -mtune=native ppm_coarray_buddhabrot.f90 && cafrun -n 8 ./a.out$ ifx -Ofast -coarray ppm_coarray_buddhabrot.f90 && ./a.outThe number of images can be set with the option -coarray-num-images=8.
Flang 22.1 offers an experimental support for coarrays with the option -fcoarray.
- The loop computing
z(k)could be stopped byexitwhen we escape the computing window containing the whole Mandelbrot set. - We could use the symmetry of the Buddhabrot to improve computing.
- We could add colours instead of grey levels.
Distributed under the MIT license.
- Curcic, Milan. Modern Fortran - Building efficient parallel applications, Manning Publications, 1st edition, novembre 2020, ISBN 978-1-61729-528-7.
- Metcalf, Michael, John Ker Reid, et Malcolm Cohen. Modern Fortran Explained: Incorporating Fortran 2018. Numerical Mathematics and Scientific Computation. Oxford (England): Oxford University Press, 2018, ISBN 978-0-19-185002-8.
- Thomas Koenig, coarray-tutorial.
- Ondrej CERTIK's code (MIT license) for PPM format: https://github.com/certik/fortran-utils/blob/master/src/ppm.f90