This SYSTEM_CLOCK approach is best for Windows 10 (and probably +) and Gfortran.
The best way to check is to report “clock_rate” as it can show the update rate of “clock_reading”.
Unfortunately for some implementations ( eg Intel Ifort from a few years ago provided SYSTEM_CLOCK updating at 64 cps ) where the “clock_rate” did not represent the frequency at which “clock_reading” was updated.
On windows, CPU_TIME and OMP_get_wtime did also suffer from awful precision, being updated only 64 cycles per second. I do not know if this has been improved with recent updates.
I understand that for linux, this update frequency issue is not as serious a problem.
However, even for Windows 10, Gfortran and integer(8), the clock_rate is about processor clock rate / 1024, so this can not be used to time smaller packets of computation.
For higher precision, you need to sample the rdtsc clock. This should be an intrinsic function extension provided by the compiler. Unfortunately I do not know how this timer varies when the processor rate varies, ie over-clocks, but all high frequency timers have problems !