mcpField
A
apple-silicon

apple-silicon

github.com/mohitmishra786開発269310 回インストール18 週間前に更新
リポジトリ

apple-silicon について

Apple Silicon 向けの開発を案内するエージェントスキルです。ネイティブ ARM64 の macOS アプリを開発するエンジニア向けに、ユニファイドメモリ、Metal、16 KB ページ、Rosetta 2 を扱います。

主な機能

  1. 01ユニファイドメモリアーキテクチャの理解
  2. 02Accelerate による行列演算
  3. 03Metal Performance Shaders による GPU 計算
  4. 04ハードウェア情報の取得と性能分析
  5. 0516 KB ページと Rosetta 2 への対応

活用シーン

  1. 01M1 から M4 の ARM64 アプリの最適化
  2. 02CPU とメモリの性能問題の調査
  3. 03GPU 計算での Metal の選択
  4. 04x86 バイナリの Rosetta 互換性の確認

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/apple-siliconを入力して読み込まれたか確認します。

詳細

Apple Silicon

目的

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 をプロファイリングする場合
  • x86 バイナリの Rosetta 2 互換性を把握する場合
  • 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 では CPU↔GPU 間の cudaMemcpy に相当する処理は不要です
  • メモリ帯域幅はエージェント間で共有されるため、全体を考慮してプロファイリングしてください
  • プロセスメモリには、ユニファイドメモリによるすべての割り当てが含まれます
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 では、4KB ではなく16KB ページが使われます。

// 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 Matrix Coprocessor)

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スレッドのスケジューリング、システムコール

GUI: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 も変換されますが、速度が低下する場合があります。カーネル拡張や VM ゲストには対応していません。

9. メモリタグ付け(ARM MTE)

将来の Apple ハードウェアでは MTE が利用可能になる可能性があります。次の方法で確認してください。

sysctl hw.optional.arm.FEAT_MTE  # when available

Apple の ARM64e プラットフォームでは、すでにポインター認証が有効になっています。これを踏まえて準備してください。

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 — ユニファイドメモリでのキャッシュ最適化

コメント