A project switched to Fortran
mpi_f08
after realizing runtime crashes in very large simulations were due to MPI-2.
The Fortran mpi_f08 interface was released in 2012 and is well supported by contemporary compilers and MPI libraries.
MPICH reqiures
ISO_Fortran_binding.h.
GCC + MPICH or Clang + OpenMPI and many other combinations work.
CMake can retrieve the current time in local (default), UTC, or other timezone via
string(TIMESTAMP).
Elapsed time can also readily be computed or compared using timestamp format %s
Currently, CMake
math
command cannot handle floating point numbers, only integers.
Git
history browsing
can be easier with a GUI, which are available for most platforms.
Git installs
can come with a GUI by default.
However, many package managers make the GUI a separate install to save considerable time and space on cloud servers, virtual machines and similar.
Here are a few example commands to install
gitk,
a basic Git history browser:
macOS: brew install git-gui
Linux: apt install gitk or dnf install gitk or similar
Windows: winget install Git.Git that comes with “gitk”
For those using GitHub,
GitHub Desktop
is a popular Git GUI.
The GitHub Actions CI runners have a recent release of CMake and update regularly, often within weeks of a new CMake release.
There are Actions in the GitHub Marketplace allowing one to pick specific CMake versions for testing the build system if desired.
CMake
environment variables
are handy to set in top level “env” to avoid forgetting to specify them.
Note that Windows compiler tests in general, including CMake, are often done with distinct setups.
These are best shown by example using
MSYS2
or
MSVC.
Programs across programming languages can make
system calls.
System calls can be a significant
security concern.
For example, allowing unsanitized user input is an obvious hazard.
A modern method of making system calls in C and C++ across operating systems is
exec,
known on Windows as
_exec.
An
execlp example
demonstrates casting intptr_t to int for the specific cases where a function is known to use
intptr_t
in this way.
The Fortran 2003 standard
ieee_arithmetic
intrinsic module gives a robust standard way to use NaN and other functions.
However, on certain CPU arches such as PPC, GCC does
not yet support
ieee_arithmetic.
An example of robust NaN is given in
nans.f90.
A Fortran standard way to make NaN constant is:
Example NaN memory hex value–can be distinct on older/other compilers:
GCC 12.2.0; Intel oneAPI 2021, 2023
IEEE value isnan hex
real 32 NaN T 7FC00000
real 64 NaN T 7FF8000000000000
real128 NaN T 7FFF8000000000000000000000000000
complex 64 NaN T 7FC00000
complex128 NaN T 7FF8000000000000
complex256 NaN T 7FFF8000000000000000000000000000
When using an Apple Silicon CPU, it’s usually desirable to run the native version of the app rather than the Rosetta translated version for efficiency.
If the app is live media based such as Zoom, using the native app version reduces CPU usage and helps avoid latency and jittering in the audio and video.
Determine if an app is native, Universal, or other architecture (Rosetta translated) by going to Applications in Finder. Highlight the application name and press
โI
to see the “kind” of application.
If the app is Universal, there will be a check box to force the app to run in Rosetta mode, which can be useful if an app has non-native plugins.
Each application and its plugins must all be native or Rosetta.
To ensure created path names are compatible across computing platforms, it is useful to sanitize strings in general so that only alphanumeric characters are used to avoid adverse or accidental use of
confusable UTF8
characters.
In CMake this is accomplished like: