How to find details of the compiler and optimizations used by a specific installed version of Julia

I’ve noticed that there is a performance significant difference in the execution of a Julia application between “bare metal” and within a container, but only on one specific platform. So want to see if there was a difference in the underlying compiler or optimizations used between the Julia version installed on the “bare metal” and inside the container.

Is there a way of displaying these details of the compiler and optimizations used in Julia?

There’s this


but that might only get you so far

maybe ldd /PATH_TO/julia-1.7.0/lib/ might shed light

You can find the docker-library Julia images Dockerfiles ( alpine, debian; windows ):

The alpine based container is “musl” based - and maybe it has a different performance than the glibc- based. ( julia-1.7.1-musl-x86_64.tar.gz )

And has a different support level:

  • Linux (Glibc) - is “Tier 1”
  • Linux (Musl) - is “Tier 3”

So the Debian based “Julia” container ( == Glibc ; Tier 1 ) is preferred for the “end users”

As I know no performance difference on Linux with native vs. container performance .
but on MacOS and Windows … there is a known performance difference.

1 Like

Please give more information.

The execution only time for the container is slower than the are metal (host) execution time.
The vector instruction execution (operational intensity) is significantly worse for the container version.

The platform processor is a Fujitsu Arm A64FX.
OS is SLES15 Linux
Profiling was done with LIKWID

Bare metal (host) execution time:

Container execution time:

Bare metal (host) profiling:

Container profiling:

As I see - only in the OpenBLAS v0.3.19 contains A64FX optimization. - and not yet in Julia …

  • added basic support and cputype detection for Fujitsu A64FX
  • added SVE-enabled SGEMM and DGEMM kernels for ARMV8SVE and A64FX

And check the A64FX related julia issues

Please give more information:

  • minimal Dockerfile ?
  • Julia version ?
  • Source of julia image ?
    • optimized A64FX native build ?
    • or downloaded from Download Julia as a “Generic Linux on ARM - AARch64” )

other ideas:

  • If you are using the official Debian-based docker image
    • try to create SLES15 based docker images manually.
  • For A64FX try -mcpu=a64fx
    • or -mtune=a64fx -mcpu=a64fx -march=armv8.2-a+sve
  • The SLE15 based dockerfile should start with
    • FROM
  • you can start julia with --cpu-target ( check: julia --cpu-target help )
  • you can recompile/optimize the julia image for a64FX with PackageCompiler.jl

check/compare the Base.JLOptions() results.

Sorry for the delay:

I will try the A64FX options -mtune=a64fx -mcpu=a64fx -march=armv8.2-a+sve

Host Julia version:
Version 1.6.2 (2021-07-14)

FROM julia:1.6.2

RUN apt-get update -qq && apt-get install -y -qq gcc wget git apt-utils build-essential make locate

#RUN mkdir /QXContexts
#ADD . /QXContexts/

RUN git clone /QXContexts


RUN julia --project=. -e ‘using Pkg; Pkg.instantiate();’

RUN julia --project=. -e ‘using Pkg; Pkg.add(“FileIO”); Pkg.add(“ArgParse”); Pkg.add(“TimerOutputs”);’

RUN julia --project=. -e ‘using Pkg;“QXContexts”);’

run tests to verify they are working and to precompile

RUN julia --project=. examples/rqc_example.jl
CMD [“julia”, “–project=/QXContexts”]