skills/platform/apple-silicon/SKILL.md
Apple Silicon skill for M-series development and profiling. Use when leveraging unified memory, Metal Performance Shaders, Instruments profiling, sysctl hardware queries, Rosetta 2 behavior, or 16KB page size considerations. Activates on queries about Apple Silicon, unified memory, AMX, MPS, Instruments, Rosetta, or M-series page size.
npx skillsauth add mohitmishra786/low-level-dev-skills apple-siliconInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guide agents through Apple Silicon (M-series) development: unified memory architecture, AMX matrix coprocessor access via Accelerate, Metal Performance Shaders for GPU compute, sysctl hardware queries, Instruments profiling, command-line leak tools, Rosetta 2 translation behavior, and 16KB page size implications.
Apple Silicon SoC
├── CPU cores (P + E cores)
├── GPU cores
├── Neural Engine (NPU)
└── Unified DRAM — single address space, no PCIe copy
Implications:
cudaMemcpy equivalent is unnecessary for CPU↔GPU on Metal# CPU and chip info
sysctl -n machdep.cpu.brand_string
sysctl hw.physicalcpu hw.logicalcpu
sysctl hw.memsize
# ARM64 features (keys vary by chip — grep if specific FEAT_* is missing)
sysctl -a hw.optional.arm 2>/dev/null | grep -iE 'sve|bf16|mte'
# Cache line size
sysctl hw.cachelinesize
# Page size (16KB on macOS Apple Silicon)
sysctl hw.pagesize # 16384
getconf PAGESIZE
macOS on Apple Silicon uses 16KB pages (not 4KB):
// Align hot buffers to page size
size_t page = sysconf(_SC_PAGESIZE); // 16384
void *buf = aligned_alloc(page, size);
// mmap alignment must be page-aligned
mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
Impact:
posix_memalign minimum alignment often 16KB for large allocsAMX is undocumented at ISA level; access through frameworks:
// Accelerate framework — uses AMX internally for matrix ops
#include <Accelerate/Accelerate.h>
void matrix_multiply(const float *A, const float *B, float *C,
int M, int N, int K) {
cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
M, N, K, 1.0f, A, K, B, N, 0.0f, C, N);
}
# Link Accelerate (default on macOS)
clang -framework Accelerate -o gemm gemm.c -lcblas
For custom AMX kernels: study community reverse engineering or use Metal Performance Shaders as supported path.
// Objective-C / Swift — GPU compute via MPS
#import <Metal/Metal.h>
#import <MetalPerformanceShaders/MetalPerformanceShaders.h>
id<MTLDevice> device = MTLCreateSystemDefaultDevice();
id<MTLCommandQueue> queue = [device newCommandQueue];
MPSMatrixMultiplication *gemm = [[MPSMatrixMultiplication alloc]
initWithDevice:device transposeLeft:NO transposeRight:NO
resultRows:M columns:N interiorColumns:K alpha:1.0 beta:0.0];
Metal provides unified memory path to GPU — no explicit copy for buffers allocated with MTLResourceStorageModeShared.
# Command-line Instruments (xctrace)
xctrace record --template 'Time Profiler' --launch -- /path/to/app
xctrace record --template 'Allocations' --launch -- /path/to/app
xctrace record --template 'Leaks' --launch -- /path/to/app
xctrace export --input trace.trace --toc
| Template | Use | |----------|-----| | Time Profiler | CPU hotspots, P/E core usage | | Allocations | Heap growth, allocation call trees | | Leaks | Retained memory | | System Trace | Thread scheduling, syscalls |
GUI: Xcode → Product → Profile (⌘I)
# Process memory map
vmmap <pid>
# Heap analysis
heap <pid>
heap <pid> -addresses all # all allocations
# Leak detection
leaks <pid>
leaks --list <pid>
# Sample call stacks
sample <pid> 5 -file sample.txt
# Check if process runs under Rosetta
sysctl sysctl.proc_translated # 1 = translated x86
# Force arch
arch -arm64 ./native_binary
arch -x86_64 ./x86_binary
# Universal binary info
lipo -info myapp
file myapp
| Runs native ARM64 | Runs under Rosetta |
|-------------------|-------------------|
| ARM64 build | x86_64-only binary |
| -arch arm64 compile | Downloaded Intel-only app |
Rosetta 2: translates x86_64 to ARM64 with JIT cache. AVX/AVX2 translated but may be slower. Not for kernel extensions or VM guests.
Future Apple hardware may expose MTE — monitor via:
sysctl hw.optional.arm.FEAT_MTE # when available
Prepare with pointer authentication already on ARM64e Apple platforms.
# Native optimized build
clang -arch arm64 -O3 -mcpu=apple-m1 -o app app.c
# Use -mcpu matching target: apple-m1, apple-m2, apple-m3, apple-m4
# P/E core awareness — dispatch heavy work to performance cores
# pthread_set_qos_class_self_np(QOS_CLASS_USER_INITIATED, 0);
| Symptom | Cause | Fix |
|---------|-------|-----|
| mmap fails with EINVAL | 4KB alignment on 16KB system | Align to sysconf(_SC_PAGESIZE) |
| Slow x86 binary | Rosetta overhead | Ship universal or arm64-only build |
| Metal buffer nil | Simulator vs device | Test GPU on real hardware |
| Accelerate wrong results | Row/column major mismatch | Check BLAS leading dimensions |
| Instruments empty trace | Sandbox/permissions | Run from Xcode or sign app |
| sysctl not found | Wrong key name | sysctl -a | grep -i feat |
skills/low-level-programming/assembly-arm — Darwin ABI, AArch64skills/platform/arm-sve — SVE2 on M4+skills/gpu/cuda — NVIDIA not on Apple Silicon; use Metal insteadskills/profilers/heaptrack — cross-platform heap profiling conceptsskills/compilers/clang — Apple Clang flagsskills/low-level-programming/cpu-cache-opt — cache optimization on unified memorydevelopment
QEMU/KVM skill for virtualization and kernel development. Use when running qemu-system-x86_64 with KVM, configuring virtio devices, VFIO passthrough, QMP monitor, libvirt, or booting custom kernels. Activates on queries about QEMU, KVM, virtio, VFIO, virsh, virt-install, or -kernel -append.
development
Hardware virtualization internals skill for Intel VT-x and AMD-V. Use when studying VMCS/VMCB, EPT/NPT page tables, VMEXIT handling, APIC virtualization, or building minimal hypervisors. Activates on queries about VMX, SVM, VMCS, EPT, NPT, VMEXIT, or type-1 hypervisor.
testing
Linux containers internals skill for namespaces, cgroups, and OCI. Use when understanding clone/unshare namespaces, cgroups v2 limits, overlayfs, runc, seccomp profiles, capabilities, or escape mitigations. Activates on queries about namespaces, cgroups, overlayfs, runc, seccomp-bpf, OCI spec, or container escape.
tools
Reverse engineering skill for binary analysis. Use when decompiling with Ghidra, analyzing with radare2, scripting RE tools, triaging with strings/file/xxd, or diffing binaries. Activates on queries about Ghidra, radare2, r2, decompiler, Binary Ninja, Diaphora, or stripped binary analysis.