bruce@k3:~$ ./test_memcpy
Byte size : ns Speed
0 : 6.3 0.0 MB/s
1 : 6.5 147.6 MB/s
2 : 6.5 295.7 MB/s
4 : 6.3 602.7 MB/s
8 : 6.4 1193.6 MB/s
16 : 6.4 2402.1 MB/s
32 : 6.4 4796.1 MB/s
64 : 7.1 8558.1 MB/s
128 : 7.1 17313.7 MB/s
256 : 12.6 19444.2 MB/s
512 : 20.8 23424.8 MB/s
1024 : 39.8 24563.3 MB/s
2048 : 80.4 24284.2 MB/s
4096 : 158.0 24722.1 MB/s
8192 : 312.5 24997.6 MB/s
16384 : 609.6 25630.4 MB/s
32768 : 1287.0 24281.6 MB/s
65536 : 2761.8 22630.4 MB/s
131072 : 6463.0 19340.9 MB/s
262144 : 12897.6 19383.5 MB/s
524288 : 25779.1 19395.6 MB/s
1048576 : 52356.4 19099.9 MB/s
2097152 : 111030.3 18013.1 MB/s
4194304 : 569240.2 7026.9 MB/s
8388608 : 1468409.2 5448.1 MB/s
16777216 : 2905474.6 5506.8 MB/s
33554432 : 5769324.2 5546.6 MB/s
67108864 : 11967851.6 5347.7 MB/s
And on A100: bruce@k3:~$ ai ./test_memcpy
Byte size : ns Speed
0 : 21.0 0.0 MB/s
1 : 82.7 11.5 MB/s
2 : 82.9 23.0 MB/s
4 : 82.9 46.0 MB/s
8 : 82.8 92.2 MB/s
16 : 82.9 184.2 MB/s
32 : 82.9 368.2 MB/s
64 : 87.2 699.7 MB/s
128 : 87.1 1401.7 MB/s
256 : 87.2 2799.1 MB/s
512 : 77.2 6326.1 MB/s
1024 : 82.9 11784.2 MB/s
2048 : 98.4 19855.9 MB/s
4096 : 193.5 20191.4 MB/s
8192 : 313.5 24916.8 MB/s
16384 : 627.0 24919.0 MB/s
32768 : 1254.2 24915.7 MB/s
65536 : 2508.0 24920.1 MB/s
131072 : 5017.3 24913.6 MB/s
262144 : 10036.5 24909.0 MB/s
524288 : 20075.0 24906.6 MB/s
1048576 : 62556.9 15985.4 MB/s
2097152 : 152324.5 13129.9 MB/s
4194304 : 303466.3 13181.0 MB/s
8388608 : 610230.0 13109.8 MB/s
16777216 : 1186394.5 13486.2 MB/s
33554432 : 2317591.8 13807.4 MB/s
67108864 : 4838988.3 13225.9 MB/s
That's using the following `memcpy()` in both cases. .globl memcpy
memcpy:
mv a3, a0
0: vsetvli a4, a2, e8, m4, ta, ma
vle8.v v0, (a1)
sub a2, a2, a4
add a1, a1, a4
vse8.v v0, (a3)
add a3, a3, a4
bnez a2, 0b
ret Build Linux kernel 7503345ac5f5
14m25.56s SpacemiT K3 8 X100 cores plus 8x A100 cores distcc
18m3.871s SpacemiT K3 8 X100 cores @2.4 GHz
19m12.787s i9-13900HX, 24C/32T @5.4 GHz, riscv64/ubuntu docker
39m23.187s SpacemiT K3 8 A100 cores @2.0 GHz
42m12.414s Milk-V Megrez 4 P550 cores @1.8 GHz
67m35.189s VisionFive 2, 4 U74 cores @1.5 GHz
70m57.001s LicheePi 3A, 8 X60 cores @1.6 GHz
88m04.185s LicheePi 4A, 4 C910 cores @1.85 GHz
The A100 cores, all by themselves, give more normal processing power e.g. `gcc` than any previous RISC-V SBC except the $2500 64 core Milk-V Pioneer. > What does auipc do?
`auipc` stands for "Add Upper Immediate to PC" and is a RISC-V instruction that:
## What it does:
- Takes a 20-bit immediate value and adds it to the program counter (PC)
- The immediate is sign-extended and shifted left by 12 bits
- The result is stored in a destination register
## Syntax:
```
auipc rd, imm
```
## Key characteristics:
- **PC-relative addressing**: Uses the current program counter as a base
- **12-bit offset**: The immediate is shifted left by 12 bits, so it's effectively a 32-bit value
- **No memory access**: Only performs arithmetic, no memory operations
- **Used for**: Creating 32-bit immediate values, setting up base addresses for other instructions
## Example:
```assembly
auipc x5, 0x1000 # x5 = PC + (0x1000 << 12)
```
## Common uses:
- Setting up base addresses for load/store instructions
- Creating 32-bit immediate values when the standard `li` instruction can't handle the full range
- Jump table setup
- Address calculation for large data structures
The instruction is particularly useful in RISC-V because it allows for efficient 32-bit address generation while maintaining the 16-bit instruction size constraint.
[ Prompt: 20.6 t/s | Generation: 6.5 t/s ]
Output started in about 2 seconds. > what is the airspeed velocity of an unladen swallow?
The classic answer to this question comes from Monty Python's "Holy Grail" - when asked about the airspeed velocity of an unladen swallow, the character replies "What do you mean? An African or European swallow?"
But in reality, the airspeed velocity depends on the species:
**European Swallow (Hirundo rustica):**
- Typical flight speed: 15-20 mph (24-32 km/h)
- Maximum speed: around 25 mph (40 km/h)
**African Swallow (Hirundo sp.):**
- Similar speeds to European swallows, though some species can reach up to 30 mph (48 km/h)
The "unladen" part refers to the swallow not carrying anything, which would slow it down. Swallows are quite agile birds that can fly at impressive speeds while maneuvering through the air.
So while the Python reference is the more famous answer, the real-world airspeed of an unladen swallow is roughly 15-25 mph, depending on the specific species and conditions.
[ Prompt: 25.5 t/s | Generation: 6.6 t/s ]
Again, output starts in about two seconds. # just run a single program on the A100 cores
ai as hello.s -o hello.o
# same thing but maybe 1ms faster
aix /usr/bin/as hello.s -o hello.o
# run a whole build. All processes started by `make` will run on the A100 cores.
ai make -j8 test
# start a shell on the A100 cores. All programs run from it will be run only on the A100 cores
ai bash
https://github.com/brucehoult/k3_ai Build Linux kernel 7503345ac5f5
14m25.56s SpacemiT K3 8 X100 cores plus 8x A100 cores distcc
18m3.871s SpacemiT K3 8 X100 cores @2.4 GHz
19m12.787s i9-13900HX, 24C/32T @5.4 GHz, riscv64/ubuntu docker
39m23.187s SpacemiT K3 8 A100 cores @2.0 GHz
42m12.414s Milk-V Megrez 4 P550 cores @1.8 GHz
67m35.189s VisionFive 2, 4 U74 cores @1.5 GHz
70m57.001s LicheePi 3A, 8 X60 cores @1.6 GHz
88m04.185s LicheePi 4A, 4 C910 cores @1.85 GHz
The K3 is also faster than using QEMU/Docker on my 24 core i9-13900 laptop, and while using 25W instead of 200W. add r0,r0,#1
adc r1,r1,#0
But even on RISC-V, often criticised for not having a carry flag, it's not hard: addi a0,a0,1
sltiu t1,a0,1 # set to 1 if a0 wrapped back to 0
add a1,a1,t1
Checking also...
https://www.macrumors.com/2026/03/05/mac-studio-no-512gb-ram...
... confirms that, but I'm not clear on which config the $4000 upgrade was starting from, but I think it's from the M3 Ultra's standard 96 GB.
Both articles say that previously 256 GB RAM was a $1600 upgrade from 96 GB but "now" is a $2000 upgrade.
Now "now" even 256 GB isn't available and 96 GB is the only option with the M3 Ultra.
M3 Ultra is currently $3999 with 96 GB and 28 core CPU 60 core GPU, or +$1500 with 32 core CPU 80 core GPU. If the base price was the same prior to March then yeah $3999+$1500+$4000 = $9499 would have been the price for a maxed out CPU/GPU/RAM config with a 1 TB disk.
I wasn't looking at Mac Studio prices back then so unfortunately articles such as these are my only clue. I'm still more than happy with my original M1 Mini with 16 GB RAM as I don't work with local LLMs — only on my little NUC-like RISC-V "K3" machine with 32 GB RAM and regular RISC-V cores with 1024 bit vectors as the "NPU", doing around 7 tok/s on 32B models while using 14W of power.