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.
In the Buddhabrot, the intensity of a pixel is proportional to the number of times it was visited by the
Instead of partitioning the complex plane in several images, we have chose to simply use a Monte Carlo algorithm: each image is computing a lot of co_sum() collective subroutine.
You can modify the contrast by setting the multiplication factor parameter used in the grey level computation.
You can also study the Anti-Buddhabrot by reversing the modulus test:
if (real(z(iterations))**2 + aimag(z(iterations))**2 < 4._wp) thento consider only
Starting from version 16, GFortran supports natively coarrays using shared memory mulithreading on single node machines:
$ gfortran -Ofast -fcoarray=lib ppm_coarray_buddhabrot.f90 -lcaf_shmem && ./a.outThe -lcaf_shmem is necessary until a -fcoarray=shared option is added in a later GFortran release.
You can force the number of images (8 for example) with:
$ export GFORTRAN_NUM_IMAGES=8You can also add the -march=native -mtune=native options for further optimization.
You needed to install OpenCoarrays and type that command (8 images here):
$ caf -Ofast 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. But the value of the counter should be memorized. - 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, Malcolm Cohen and Reinhold Bader. Modern Fortran Explained: Incorporating Fortran 2023 (6th edn). Numerical Mathematics and Scientific Computation. Oxford (England): Oxford University Press, 2023, ISBN 978-0-19-887657-1.
- Thomas Koenig, coarray-tutorial.
- Ondrej CERTIK's code (MIT license) for PPM format: https://github.com/certik/fortran-utils/blob/master/src/ppm.f90