Devices

Apple M1 Pro 16 GB

The same numbers, filterable, in the model table.

The original code, portable and Metal kernels on Apple silicon (MPS), each model at its task's standard input (the input of the reference tables; multiview models at their own), so a row compares with the same model on the RTX 5060 Ti. The tables are generated from the data file named below; the text around them is written by hand.

Memory is the process's peak footprint (Activity Monitor's "Memory": model and activations, which share the system RAM on a Mac). It is not comparable with the CUDA tables' torch peak memory. Not run: DINOv3 ViT-S/16, ViT-L/16, ViT-H+/16 and DINOv3-ConvNeXt Tiny / Base / Large (failed: their gated weights are not on this Mac; the family's ViT-B/16 and ConvNeXt-Small rows pass the goldens on MPS) and D-FINE (no rows: weights not downloaded). Reproduce or extend: uv run python tools/speed_survey.py run --device apple-m1-pro-16gb (docs/data/README.md, "Devices").

Accuracy against the CPU (float32, Middlebury ArtL for stereo): MPS float32 outputs match to 1e-3 px mean or better (most families 1e-5), except MonSter++ (0.006 px) and NMRF (0.03 px on non-occluded pixels, about 0.7 px in occlusions, where its local-maximum test flips on last-bit differences in flat cost curves; the error against ground truth is unchanged). float16 moves stereo outputs by 0.003-0.07 px mean. Depth: float32 matches the CPU to 1e-4 of the median depth, float16 moves it by 0.02-0.12 %.

deviceApple M1 Pro 16 GB
backendmps
memory16 GB unified
hardware16-core GPU
softwaremacOS 27, torch 2.14
torch (rows)2.14.1
measured2026-11-06 to 2026-11-07
rows422 in docs/data/speed/apple-m1-pro-16gb.jsonl

A survey, not a regression floor: the models and dtypes measured here, as recorded. Cells are median ms; every column names its dtype. unsupported = the card does not offer that mode or dtype on this backend, failed = it ran and raised, OOM = out of memory, – = not tested; (golden fail) = it ran but its result failed the golden check on this device (never counted as fastest). Speed-up = kernels against the fastest original and the fastest portable row of the same model (any dtype); memory = the peak of that mode's fastest row, measured the way the column says (not comparable with another device's). One input per model, the task's standard one. Each model links to its model page; benchmarks has the method and the reference device.

Protocol: first call, 4 warm-up, median of 5 synchronised calls (tools/speed_survey.py).

Stereo

Stereo, synthetic, 994x1482

modeltime (ms): portable fp32portable fp16kernels fp16kernels speed-up: vs portablepeak memory (MiB, process footprint, fastest dtype): portablekernels
aanet-plus-sceneflow990–8181.2x49873754
aanet-sceneflow912–6311.4x36042606
bridgedepth-rvc-pretrain4375–37561.2x81985100
bridgedepth-sf4280–36931.2x83006270
c-fast-foundationstereo4881–unsupported–12882–
c-foundationstereo-sOOM–unsupported–––
cas-gwcnet-c-sceneflow47472489unsupported–5132–
cas-gwcnet-gc-sceneflow54902995unsupported–7182–
cfnet-sceneflowOOMOOM2206––5416
coex-sceneflow784411unsupported–3576–
crestereo-eth3d4771374633421.1x27452804
defom-stereo-vitl-sceneflow11105–82241.4x131388328
dlnr-middlebury26942143unsupported–5148–
dlnr-sceneflow26992143unsupported–4094–
fast-acvnet-generalization944–unsupported–3646–
fast-acvnet-kitti12942–unsupported–3647–
fast-acvnet-kitti15943–unsupported–3646–
fast-acvnet-plus-generalization1322–unsupported–3940–
fast-acvnet-plus-kitti121321–unsupported–3938–
fast-acvnet-plus-kitti151322–unsupported–3940–
fast-acvnet-plus-sceneflow1322–unsupported–3941–
fast-acvnet-sceneflow942–unsupported–3646–
fast-foundationstereo5195–unsupported–13014–
foundationstereo-vit-lOOM25647244801.0x1376113277
foundationstereo-vit-sOOM20584194961.1x1361712980
great-igev-eth3dOOM1145996361.2x1053110133
great-igev-kitti319161107696341.1x1053810130
great-igev-middleburyOOM26930253681.1x1154412420
great-igev-sceneflow321871106298611.1x996010126
gwcnet-g-sceneflow4340–unsupported–10663–
gwcnet-gc-sceneflow4461–unsupported–12397–
hitnet-eth3d4845011363.6x55032486
hitnet-middlebury-d400115512274402.6x105634591
igev-plusplus-eth3d10444861361391.4x60404971
igev-plusplus-kitti1210398860661241.4x60344967
igev-plusplus-kitti1510489859761251.4x60344967
igev-plusplus-middlebury10399859561301.4x60374966
igev-plusplus-sceneflow10424860261351.4x60374972
igev-stereo-eth3d6407–39981.6x58743789
igev-stereo-kitti126411–40061.6x58703791
igev-stereo-kitti156407–40081.6x58713791
igev-stereo-middlebury6408–40071.6x58733792
igev-stereo-sceneflow6423–40011.6x58723793
las2-h1271–7341.7x51003771
las2-l576–5191.1x38692818
las2-m300–2811.1x40312666
las2-s245–1981.2x39832620
mocha-v1-sceneflow9065796766931.2x57655695
mocha-v2-sceneflow8887776665011.2x57504643
monster-mix-all134231137796461.2x63206330
monster-plusplus-mix-all1451911876102021.2x73697347
monster-sceneflow134261136896421.2x63206299
nmrf-sceneflow1560–12041.3x57493806
psmnet-sceneflow4615–unsupported–11257–
raft-stereo-eth3d4396393736381.1x57204721
raft-stereo-middlebury4395394036341.1x46954722
raft-stereo-sceneflow4396393836371.1x46954720
rt-monster-plusplus-mix-all663–unsupported–6986–
s2m2-l87096590unsupported–9213–
s2m2-m47143620unsupported–7941–
s2m2-s17071607unsupported–5991–
s2m2-xlOOM13398unsupported–12386–
selective-igev-eth3d-finetune9066699157081.2x38543904
selective-igev-eth3d-train9010696957101.2x38623907
selective-igev-kitti129019697157091.2x38533906
selective-igev-kitti159016696357101.2x38533905
selective-igev-middlebury-finetune9026698957781.2x38523907
selective-igev-middlebury-train9100720657381.3x38543907
selective-igev-sceneflow9010696857101.2x38593907
waft-stereo-b11022–unsupported–12854–
waft-stereo-s3360–unsupported–9608–

Note: no Metal kernels for this family (card mps_kernels).

Depth

Depth, synthetic, 994x1482

modeltime (ms): portable fp32portable fp16kernels fp32kernels fp16kernels speed-up: vs portablepeak memory (MiB, process footprint, fastest dtype): portablekernels
da3-giant-1.1833759–unsupported–7243–
da3-large-1.1334327–unsupported–2474–
da3metric-large332318–unsupported–2474–
da3mono-large277272–unsupported–2472–
da3nested-giant-large-1.112481184–unsupported–8136–
depth-anything-v2-b212––unsupported–2054–
depth-anything-v2-l622––unsupported–3975–
depth-anything-v2-s87.3––unsupported–1522–
depth-pro58795026–unsupported–7172–
marigold-depth-v1-129702498–unsupported–6640–
metric3d-vit-large1822––unsupported–4523–
midas-dpt-beit-large-512679635–unsupported–2407–
moge-2-vitl-normal1535–1454–1.1x39153992
moge-2-vits-normal363–363–1.0x26312702
moge-3-vitl3948–2764–1.4x62356119
unidepth-v2-vitl141260––unsupported–6075–
unik3d-vitl1217––unsupported–4001–
zoedepth-nk778785–unsupported–3558–

Note: no Metal kernels for this family (card mps_kernels).

Classification

Classification, synthetic, 224x224

modeltime (ms): portable fp32portable fp16kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
alexnet.tv_in1k4.913.04unsupported1567
convnextv2_base.fcmae_ft_in22k_in1k36.1–unsupported2301
deit_base_patch16_224.fb_in1k16.9–unsupported1314
densenet121.tv_in1k25.4–unsupported708
dinov2_vitl14_lc64.5–unsupported4419
efficientnet_b0.tv_in1k13.0–unsupported463
efficientnet_b4.tv_in1k38.3–unsupported1660
efficientnet_v2_s.tv_in1k34.0–unsupported616
efficientvit_b2.r288_in1k18.6–unsupported1698
eva02_large_patch14_448.mim_m38m_ft_in22k_in1k267235unsupported4094
fastvit_sa24.apple_dist_in1k16.8–unsupported656
inception_v3.tv_in1k17.4–unsupported746
mobilenet_v2.tv2_in1k6.48–unsupported422
mobilenet_v3_large.tv2_in1k8.54–unsupported462
mobilenetv1_100.ra4_e3600_r224_in1k4.29–unsupported437
mobilenetv4_conv_medium.e500_r256_in1k9.58–unsupported581
regnety_160.tv2_in1k38.933.1unsupported2030
resnet152.tv2_in1k25.7–unsupported1079
resnet18.tv_in1k4.67–unsupported454
resnet50.tv2_in1k11.2–unsupported643
shufflenet_v2_x1_0.tv_in1k6.33–unsupported374
squeezenet1_1.tv_in1k3.793.72unsupported340
swin_base_patch4_window7_224.ms_in22k_ft_in1k28.2–unsupported2273
vgg16.tv_in1k13.811.7unsupported2446
vit_base_patch16_224.augreg2_in21k_ft_in1k16.9–unsupported1314
vit_so400m_patch14_siglip_378.webli_ft_in1k214197unsupported5547

Note: no Metal kernels for this family (card mps_kernels).

Segmentation

Segmentation, synthetic, 1024x2048

modeltime (ms): portable fp32portable fp16kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
deeplabv3-r101-d8-ade20k721528unsupported2010
deeplabv3plus-r101-d8-ade20k516430unsupported1891
dinov2-b-linear-ade20k409–unsupported3025
dinov2-l-linear-ade20k1032–unsupported4120
dinov2-s-linear-ade20k224–unsupported2529
eomt-l-dinov2-ade20k608540unsupported4262
eomt-l-dinov3-ade20k648575unsupported4259
fcn-r101-d8-ade20k468405unsupported1875
hrnet-w48-fcn-ade20k263228unsupported2044
mask2former-swinl-ade20k909964unsupported6661
oneformer-swinl-ade20k11271161unsupported9492
pspnet-r101-d8-ade20k486411unsupported1945
sapiens-seg-0.3b-goliath29881517unsupported3748
sapiens-seg-1b-goliath50993113unsupported6340
segformer-b0-ade20k106–unsupported1523
segformer-b5-ade20k428–unsupported3113

Note: no Metal kernels for this family (card mps_kernels).

Promptable segmentation

Promptable segmentation, synthetic, 1024x1024

modeltime (ms): portable fp32portable fp16kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
sam-vit-b631–unsupported4362
sam-vit-h2518–unsupported8821
sam-vit-l1373–unsupported7227
sam2.1-hiera-base-plus424–unsupported3973
sam2.1-hiera-large613–unsupported2950
sam2.1-hiera-small177–unsupported1597
sam2.1-hiera-tiny151–unsupported1536
sam336203688unsupported5807

Note: no Metal kernels for this family (card mps_kernels).

Detection

Detection, synthetic, 800x1344

modeltime (ms): portable fp32kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
detr-r101-coco183unsupported2181
detr-r50-coco125unsupported1995
faster-rcnn-r50-fpn-3x-coco214unsupported1930
mask-rcnn-r50-fpn-3x-coco222unsupported1930
rtdetrv2-l-coco82.6unsupported1927
rtdetrv2-m-coco55.3unsupported1776
rtdetrv2-ms-coco67.9unsupported1872
rtdetrv2-s-coco44.0unsupported1650
rtdetrv2-x-coco114unsupported2189

Note: no Metal kernels for this family (card mps_kernels).

Features

Features, synthetic, 224x224

modeltime (ms): portable fp32portable fp16kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
dinov2-vitb1423.321.7unsupported774
dinov2-vitb14-reg44.342.8unsupported775
dinov2-vitg14221193unsupported4502
dinov2-vitg14-reg263235unsupported4502
dinov2-vitl1468.059.4unsupported1562
dinov2-vitl14-reg96.186.3unsupported1563
dinov2-vits1412.211.2unsupported341
dinov2-vits14-reg22.222.1unsupported344
dinov3-convnext-basefailedfailedunsupported–
dinov3-convnext-largefailedfailedunsupported–
dinov3-convnext-small23.421.7unsupported614
dinov3-convnext-tinyfailedfailedunsupported–
dinov3-vitb1625.022.7unsupported726
dinov3-vith16plusfailedfailedunsupported–
dinov3-vitl16failedfailedunsupported–
dinov3-vits16failedfailedunsupported–

Note: no Metal kernels for this family (card mps_kernels).

Multiview

Multiview, synthetic, 336x518

modeltime (ms): portable fp32portable fp16kernels fp32kernels fp16kernels speed-up: vs portablepeak memory (MiB, process footprint, fastest dtype): portablekernels
mapanything-apache73576369–unsupported–7218–
vggt-1b7209–7016–1.0x1065410692
vggt-omega-1b-51279387242–unsupported–8602–

Note: no Metal kernels for this family (card mps_kernels).

Multiview, synthetic, 448x672

modeltime (ms): portable fp32kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
mvsanywhere1051unsupported3534

Note: no Metal kernels for this family (card mps_kernels).

Multiview, synthetic, 1536x1024

modeltime (ms): portable fp32kernels fp16peak memory (MiB, process footprint, fastest dtype): portable
patchmatchnet1010unsupported7593

Note: no Metal kernels for this family (card mps_kernels).

Notes on kernels

These notes come from an earlier comparison at 384x1248 (not in the tables): kernels (float16; Metal ConvGRUs, correlation / geometry lookups, cost volumes, warp costs, deformable sampling, window attention) against the fastest validated portable dtype, each run in its own process (median of 5, peak footprint).

Most of the IGEV family's gain is the lookup (the portable one gathers from each pyramid level separately); the fused ConvGRUs add about 5 % (Selective-IGEV and MoCha get the lookup only: a selective GRU and an LSTM). IGEV-Stereo portable is validated in float32 only on MPS, hence its larger factor (as DEFOM-Stereo's: fused lookup and ConvGRUs in float16). CFNet's gain is the warped volumes of its refinement stages built by one kernel (and 2.5 GB less memory); HITNet's is the warp costs of its tile hypotheses, which portable builds from many small ops. FoundationStereo's Metal geometry lookup gains little: its hourglass and transformer dominate. NMRF and BridgeDepth get their window attention with relative-position embeddings as one kernel (2.5-4x faster than the float16 module); BridgeDepth's time is mostly its ViT and alignment layers.

RAFT-Stereo kernels (Metal ConvGRU and correlation lookup, float16) against float16 portable, interleaved runs in separate processes: 1.08x at 480x640, 1.12x at 992x1440, about 30 MiB less. Its convolutions already run near the M1 Pro's peak, so fusing the elementwise steps gains little.

Both modes, in every dtype, replace the transposed convolutions MPS runs slowly: a stride-2 one as one convolution per output parity (four conv2d or eight conv3d calls; MPS has no float16 3-D kernel at all), a 2-D one whose kernel equals its stride (ViT necks, DPT heads) as a 1 x 1 convolution and pixel_shuffle. End to end at 384x1248 that makes CAS-GwcNet float16 2.3x, CoEx float16 1.9x, GwcNet 1.3x and PSMNet 1.15x faster, and Sapiens 1.9x at 1024x768.