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

versioninfo(verbose=true)

but that might only get you so far

maybe ldd /PATH_TO/julia-1.7.0/lib/libjulia.so 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:
image

Container execution time:
image

Bare metal (host) profiling:
image

Container profiling:
image

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 registry.suse.com/suse/sle15:latest
  • 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)

Dockerfile:
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 https://github.com/JuliaQX/QXContexts.jl.git /QXContexts
WORKDIR /QXContexts

ENV JULIA_DEPOT_PATH /opt/julia

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; Pkg.build(“QXContexts”);’

run tests to verify they are working and to precompile

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