Thanks for the replies.
After some experimentation here’s what we’re going to try for now.
JULIA_CPU_TARGET="generic;cortex-a57;thunderx2t99;carmel,clone_all;apple-m1,base(3);neoverse-n1,clone_all;neoverse-512tvb,clone_all;neoverse-v1,base(6);neoverse-v2,base(6)"
Up until apple-m1,base(3)
I’ve stuck with what Julia itself uses. After that the Arm64 processors listed are as follows:
- neoverse-n1: used in Graviton 2 EC2 instances
- neoverse-v1: used in Graviton 3 and 3E EC2 instances
- neoverse-v2: used in Graviton 4 EC2 instances
(from EC2 Instance Types)
neoverse-v1
and neoverse-v2
both use neoverse-512tvb
as a base because
neoverse-512tvb is special in that it does not refer to a specific core, but instead refers to all Neoverse cores that (a) implement SVE and (b) have a total vector bandwidth of 512 bits a cycle. Unless overridden by -march, -mcpu=neoverse-512tvb generates code that can run on a Neoverse V1 core, since Neoverse V1 is the first Neoverse core with these properties.
(from the GCC manual)
I haven’t set neoverse-n1
to use neoverse-512tvb
as a base because it predates neoverse-v1
, and so I set it to clone_all
.
There are EC2 Arm64 instances based on Apple M1 and M2 but I figure the Julia setup should be sufficient. Will find out if we ever use such an instance.
Clearly this setting for JULIA_CPU_TARGET
could be improved but so far so good. Precompilation passes without failures and the service runs inside the Docker image hosted on one of our EC2 Arm64 instances.