Arm64 julia/docker on AWS EC2: cpu target recommendations

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.

1 Like