mcpField
A
apple-silicon

apple-silicon

github.com/mohitmishra786开发269310 次安装18 周前更新
代码仓库

关于 apple-silicon

面向 Apple Silicon(M 系列)开发的 Agent 技能,涵盖硬件特性、性能优化与调试方法。适用于开发 macOS 原生 ARM64 应用的工程师,重点包括统一内存、Metal、16 KB 页及 Rosetta 2。

主要功能

  1. 01理解统一内存架构
  2. 02通过 Accelerate 使用矩阵运算
  3. 03使用 Metal Performance Shaders 进行 GPU 计算
  4. 04查询硬件信息并分析性能
  5. 05处理 16 KB 页与 Rosetta 2

适用场景

  1. 01优化 M1 至 M4 上的 ARM64 应用
  2. 02分析 CPU 与内存性能问题
  3. 03为 GPU 计算选择 Metal 路径
  4. 04排查 x86 二进制的 Rosetta 兼容性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill apple-silicon

安装后在 Claude Code 中输入/apple-silicon确认已加载。

详细介绍

Apple Silicon

用途

指导 Agent 进行 Apple Silicon(M 系列)开发:统一内存架构、通过 Accelerate 访问 AMX 矩阵协处理器、用于 GPU 计算的 Metal Performance Shaders、sysctl 硬件查询、Instruments 性能分析、命令行内存泄漏工具、Rosetta 2 转译行为,以及 16KB 页大小的影响。

适用场景

  • 在 macOS 上为 M1/M2/M3/M4 优化原生 ARM64 应用
  • 无需通过独立 GPU PCIe 传输即可使用 GPU/NPU 计算
  • 使用 Instruments 或命令行工具分析内存和 CPU
  • 了解 Rosetta 2 对 x86 二进制文件的兼容性
  • 调整代码以适配 Apple Silicon 上的 16KB 页大小
  • 通过 Accelerate/vDSP/BLAS 使用矩阵加速

工作流

1. 统一内存架构
Apple Silicon SoC
├── CPU cores (P + E cores)
├── GPU cores
├── Neural Engine (NPU)
└── Unified DRAM — single address space, no PCIe copy

影响:

  • Metal 中无需使用等效的 cudaMemcpy 进行 CPU↔GPU 传输
  • Agent 共享内存带宽——应全面分析性能
  • 进程内存包含所有统一内存分配
2. 硬件信息
# 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
3. 16KB 页大小注意事项

Apple Silicon 上的 macOS 使用 16KB 页(而非 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);

影响:

  • 大型分配的 posix_memalign 最小对齐值通常为 16KB
  • JVM/Go 运行时会自动调整;自定义分配器必须适配
  • 在设备上测试——x86 CI 可能使用 4KB 页
4. AMX(Apple 矩阵协处理器)

AMX 的 ISA 级别文档尚未公开;请通过框架访问:

// 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

对于自定义 AMX 内核:可研究社区的逆向工程成果,或使用 Metal Performance Shaders 这一受支持的途径。

5. Metal Performance Shaders(MPS)
// 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 提供通往 GPU 的统一内存路径——对于使用 MTLResourceStorageModeShared 分配的缓冲区,无需显式复制。

6. 使用 Instruments 进行性能分析
# 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
模板用途
Time ProfilerCPU 热点、P/E 核心使用情况
Allocations堆增长、分配调用树
Leaks保留的内存
System Trace线程调度、系统调用

图形界面:Xcode → Product → Profile(⌘I)

7. 命令行调试工具
# 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
8. Rosetta 2 转译
# 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
原生 ARM64 运行在 Rosetta 下运行
ARM64 构建仅支持 x86_64 的二进制文件
使用 -arch arm64 编译下载的 Intel 专用应用

Rosetta 2:使用 JIT 缓存将 x86_64 转译为 ARM64。AVX/AVX2 会进行转译,但速度可能较慢。不适用于内核扩展或虚拟机客户机。

9. 内存标记(ARM MTE)

未来的 Apple 硬件可能会提供 MTE——可通过以下方式监控:

sysctl hw.optional.arm.FEAT_MTE  # when available

在 ARM64e Apple 平台上预先启用指针认证,为此做好准备。

10. 构建与性能提示
# 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);

常见问题

症状原因解决方法
mmap 因 EINVAL 失败在 16KB 系统上使用 4KB 对齐按 sysconf(_SC_PAGESIZE) 对齐
x86 二进制文件运行缓慢Rosetta 开销发布通用构建或仅支持 arm64 的构建
Metal 缓冲区为 nil模拟器与设备的差异在真实硬件上测试 GPU
Accelerate 结果错误行优先/列优先不匹配检查 BLAS 前导维度
Instruments 跟踪记录为空沙盒/权限问题从 Xcode 运行或对应用签名
找不到 sysctl键名错误`sysctl -a

相关技能

  • skills/low-level-programming/assembly-arm — Darwin ABI、AArch64
  • skills/platform/arm-sve — M4+ 上的 SVE2
  • skills/gpu/cuda — Apple Silicon 不支持 NVIDIA;请改用 Metal
  • skills/profilers/heaptrack — 跨平台堆分析概念
  • skills/compilers/clang — Apple Clang 标志
  • skills/low-level-programming/cpu-cache-opt — 统一内存上的缓存优化

评论

支持 Markdown