What toolchain or libraries are recommended for developing applications for Ampere processors?

What software tools (compilers, debuggers, or libraries) should you use when you want to create or optimize applications to run on Ampere processors?

1 Like

I generally use LLVM’s clang for C. Though I mostly code in Zig. Just set the CPU optimizations to use neoverse-n1. You can use bolt for profile-guided optimizations.

1 Like

GCC 14 is also advisable… https://www.phoronix.com/review/ubuntu-2504-ampere-altra

3 Likes

I’ve found that recent Clang compilers often perform as well (sometimes a bit better, sometimes a bit worse) as latest GCC. However I do occasionally hit hit compilation warnings or errors for source written for GCC.

I use GDB for debugging C/C++.

Perf is my go-to for performance analysis, but GprogNG is sometimes very useful to get a graphical view of my application and performance. (For now you do have to build the tool from Binutils as well as the GUI, but hopefully this will be included in Linux distros before too long).

2 Likes

64K page makes builds faster

1 Like

64K page size is definitely faster - but for some types of work it can chew up memory.

If it’s possible to customize your kernel I suggest building and installing a kernel with 16K page size. It’s not available as a boot option so you’d have to roll your own kernel, which is what I’ve done on my dual Q80-30 processor server.

I did some performance testing recently, it’s detailed in a different thread here on the site, and found that 16K page size was a great compromise between 4KB and 64KB.

I used a recent stable kernel - it was 6.12.28 at the time - and built and installed it. I’ve been running it ever since and it performs quite well. I’ve also installed a kubernetes cluster and a worker node and found no problems deploying pods and testing my local golang application I’ve been playing around with to teach myself how to use golang.

Some details:

[g.v.rose@BigAarch64 linux]$ uname -a
Linux BigAarch64 6.12.28-stable #2 SMP PREEMPT_DYNAMIC Sat May 10 11:12:24 PDT 2025 aarch64 aarch64 aarch64 GNU/Linux

[g.v.rose@BigAarch64 linux]$ getconf PAGESIZE
16384

[g.v.rose@BigAarch64 linux-6.12.28]$ grep PAGE .config | grep 16K
CONFIG_ARM64_16K_PAGES=y
CONFIG_HAVE_PAGE_SIZE_16KB=y
CONFIG_PAGE_SIZE_16KB=y

Happy hacking!

1 Like

I would say “Use the most recent version of what you want” - most language compilers or runtimes have dramatically improved out of the box performance on Arm64 over the past 5-6 years (the three pronged effect of cheap Arm64 hardware with Raspberry Pi, developer workstations with Macbooks, and server class CPUs with Graviton and Ampere).

I’m a fan of C and Java myself, Rust came a bit late for me, and I’ve always wrestled with 3rd party dependencies in Python and Go myself. Not for architecture, just in terms of checking API compatibility with build tools

1 Like

You might want to try GCC 15 now! https://www.phoronix.com/news/GCC-15-AArch64-Early-Sched

I wrote a whole thing on the trade offs of 64K pages!

2 Likes