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 %.
| device | Apple M1 Pro 16 GB |
| backend | mps |
| memory | 16 GB unified |
| hardware | 16-core GPU |
| software | macOS 27, torch 2.14 |
| torch (rows) | 2.14.1 |
| measured | 2026-11-06 to 2026-11-07 |
| rows | 422 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
| model | time (ms): portable fp32 | portable fp16 | kernels fp16 | kernels speed-up: vs portable | peak memory (MiB, process footprint, fastest dtype): portable | kernels |
|---|---|---|---|---|---|---|
aanet-plus-sceneflow | 990 | – | 818 | 1.2x | 4987 | 3754 |
aanet-sceneflow | 912 | – | 631 | 1.4x | 3604 | 2606 |
bridgedepth-rvc-pretrain | 4375 | – | 3756 | 1.2x | 8198 | 5100 |
bridgedepth-sf | 4280 | – | 3693 | 1.2x | 8300 | 6270 |
c-fast-foundationstereo | 4881 | – | unsupported | – | 12882 | – |
c-foundationstereo-s | OOM | – | unsupported | – | – | – |
cas-gwcnet-c-sceneflow | 4747 | 2489 | unsupported | – | 5132 | – |
cas-gwcnet-gc-sceneflow | 5490 | 2995 | unsupported | – | 7182 | – |
cfnet-sceneflow | OOM | OOM | 2206 | – | – | 5416 |
coex-sceneflow | 784 | 411 | unsupported | – | 3576 | – |
crestereo-eth3d | 4771 | 3746 | 3342 | 1.1x | 2745 | 2804 |
defom-stereo-vitl-sceneflow | 11105 | – | 8224 | 1.4x | 13138 | 8328 |
dlnr-middlebury | 2694 | 2143 | unsupported | – | 5148 | – |
dlnr-sceneflow | 2699 | 2143 | unsupported | – | 4094 | – |
fast-acvnet-generalization | 944 | – | unsupported | – | 3646 | – |
fast-acvnet-kitti12 | 942 | – | unsupported | – | 3647 | – |
fast-acvnet-kitti15 | 943 | – | unsupported | – | 3646 | – |
fast-acvnet-plus-generalization | 1322 | – | unsupported | – | 3940 | – |
fast-acvnet-plus-kitti12 | 1321 | – | unsupported | – | 3938 | – |
fast-acvnet-plus-kitti15 | 1322 | – | unsupported | – | 3940 | – |
fast-acvnet-plus-sceneflow | 1322 | – | unsupported | – | 3941 | – |
fast-acvnet-sceneflow | 942 | – | unsupported | – | 3646 | – |
fast-foundationstereo | 5195 | – | unsupported | – | 13014 | – |
foundationstereo-vit-l | OOM | 25647 | 24480 | 1.0x | 13761 | 13277 |
foundationstereo-vit-s | OOM | 20584 | 19496 | 1.1x | 13617 | 12980 |
great-igev-eth3d | OOM | 11459 | 9636 | 1.2x | 10531 | 10133 |
great-igev-kitti | 31916 | 11076 | 9634 | 1.1x | 10538 | 10130 |
great-igev-middlebury | OOM | 26930 | 25368 | 1.1x | 11544 | 12420 |
great-igev-sceneflow | 32187 | 11062 | 9861 | 1.1x | 9960 | 10126 |
gwcnet-g-sceneflow | 4340 | – | unsupported | – | 10663 | – |
gwcnet-gc-sceneflow | 4461 | – | unsupported | – | 12397 | – |
hitnet-eth3d | 484 | 501 | 136 | 3.6x | 5503 | 2486 |
hitnet-middlebury-d400 | 1155 | 1227 | 440 | 2.6x | 10563 | 4591 |
igev-plusplus-eth3d | 10444 | 8613 | 6139 | 1.4x | 6040 | 4971 |
igev-plusplus-kitti12 | 10398 | 8606 | 6124 | 1.4x | 6034 | 4967 |
igev-plusplus-kitti15 | 10489 | 8597 | 6125 | 1.4x | 6034 | 4967 |
igev-plusplus-middlebury | 10399 | 8595 | 6130 | 1.4x | 6037 | 4966 |
igev-plusplus-sceneflow | 10424 | 8602 | 6135 | 1.4x | 6037 | 4972 |
igev-stereo-eth3d | 6407 | – | 3998 | 1.6x | 5874 | 3789 |
igev-stereo-kitti12 | 6411 | – | 4006 | 1.6x | 5870 | 3791 |
igev-stereo-kitti15 | 6407 | – | 4008 | 1.6x | 5871 | 3791 |
igev-stereo-middlebury | 6408 | – | 4007 | 1.6x | 5873 | 3792 |
igev-stereo-sceneflow | 6423 | – | 4001 | 1.6x | 5872 | 3793 |
las2-h | 1271 | – | 734 | 1.7x | 5100 | 3771 |
las2-l | 576 | – | 519 | 1.1x | 3869 | 2818 |
las2-m | 300 | – | 281 | 1.1x | 4031 | 2666 |
las2-s | 245 | – | 198 | 1.2x | 3983 | 2620 |
mocha-v1-sceneflow | 9065 | 7967 | 6693 | 1.2x | 5765 | 5695 |
mocha-v2-sceneflow | 8887 | 7766 | 6501 | 1.2x | 5750 | 4643 |
monster-mix-all | 13423 | 11377 | 9646 | 1.2x | 6320 | 6330 |
monster-plusplus-mix-all | 14519 | 11876 | 10202 | 1.2x | 7369 | 7347 |
monster-sceneflow | 13426 | 11368 | 9642 | 1.2x | 6320 | 6299 |
nmrf-sceneflow | 1560 | – | 1204 | 1.3x | 5749 | 3806 |
psmnet-sceneflow | 4615 | – | unsupported | – | 11257 | – |
raft-stereo-eth3d | 4396 | 3937 | 3638 | 1.1x | 5720 | 4721 |
raft-stereo-middlebury | 4395 | 3940 | 3634 | 1.1x | 4695 | 4722 |
raft-stereo-sceneflow | 4396 | 3938 | 3637 | 1.1x | 4695 | 4720 |
rt-monster-plusplus-mix-all | 663 | – | unsupported | – | 6986 | – |
s2m2-l | 8709 | 6590 | unsupported | – | 9213 | – |
s2m2-m | 4714 | 3620 | unsupported | – | 7941 | – |
s2m2-s | 1707 | 1607 | unsupported | – | 5991 | – |
s2m2-xl | OOM | 13398 | unsupported | – | 12386 | – |
selective-igev-eth3d-finetune | 9066 | 6991 | 5708 | 1.2x | 3854 | 3904 |
selective-igev-eth3d-train | 9010 | 6969 | 5710 | 1.2x | 3862 | 3907 |
selective-igev-kitti12 | 9019 | 6971 | 5709 | 1.2x | 3853 | 3906 |
selective-igev-kitti15 | 9016 | 6963 | 5710 | 1.2x | 3853 | 3905 |
selective-igev-middlebury-finetune | 9026 | 6989 | 5778 | 1.2x | 3852 | 3907 |
selective-igev-middlebury-train | 9100 | 7206 | 5738 | 1.3x | 3854 | 3907 |
selective-igev-sceneflow | 9010 | 6968 | 5710 | 1.2x | 3859 | 3907 |
waft-stereo-b | 11022 | – | unsupported | – | 12854 | – |
waft-stereo-s | 3360 | – | unsupported | – | 9608 | – |
Note: no Metal kernels for this family (card mps_kernels).
Depth
Depth, synthetic, 994x1482
| model | time (ms): portable fp32 | portable fp16 | kernels fp32 | kernels fp16 | kernels speed-up: vs portable | peak memory (MiB, process footprint, fastest dtype): portable | kernels |
|---|---|---|---|---|---|---|---|
da3-giant-1.1 | 833 | 759 | – | unsupported | – | 7243 | – |
da3-large-1.1 | 334 | 327 | – | unsupported | – | 2474 | – |
da3metric-large | 332 | 318 | – | unsupported | – | 2474 | – |
da3mono-large | 277 | 272 | – | unsupported | – | 2472 | – |
da3nested-giant-large-1.1 | 1248 | 1184 | – | unsupported | – | 8136 | – |
depth-anything-v2-b | 212 | – | – | unsupported | – | 2054 | – |
depth-anything-v2-l | 622 | – | – | unsupported | – | 3975 | – |
depth-anything-v2-s | 87.3 | – | – | unsupported | – | 1522 | – |
depth-pro | 5879 | 5026 | – | unsupported | – | 7172 | – |
marigold-depth-v1-1 | 2970 | 2498 | – | unsupported | – | 6640 | – |
metric3d-vit-large | 1822 | – | – | unsupported | – | 4523 | – |
midas-dpt-beit-large-512 | 679 | 635 | – | unsupported | – | 2407 | – |
moge-2-vitl-normal | 1535 | – | 1454 | – | 1.1x | 3915 | 3992 |
moge-2-vits-normal | 363 | – | 363 | – | 1.0x | 2631 | 2702 |
moge-3-vitl | 3948 | – | 2764 | – | 1.4x | 6235 | 6119 |
unidepth-v2-vitl14 | 1260 | – | – | unsupported | – | 6075 | – |
unik3d-vitl | 1217 | – | – | unsupported | – | 4001 | – |
zoedepth-nk | 778 | 785 | – | unsupported | – | 3558 | – |
Note: no Metal kernels for this family (card mps_kernels).
Classification
Classification, synthetic, 224x224
Note: no Metal kernels for this family (card mps_kernels).
Segmentation
Segmentation, synthetic, 1024x2048
| model | time (ms): portable fp32 | portable fp16 | kernels fp16 | peak memory (MiB, process footprint, fastest dtype): portable |
|---|---|---|---|---|
deeplabv3-r101-d8-ade20k | 721 | 528 | unsupported | 2010 |
deeplabv3plus-r101-d8-ade20k | 516 | 430 | unsupported | 1891 |
dinov2-b-linear-ade20k | 409 | – | unsupported | 3025 |
dinov2-l-linear-ade20k | 1032 | – | unsupported | 4120 |
dinov2-s-linear-ade20k | 224 | – | unsupported | 2529 |
eomt-l-dinov2-ade20k | 608 | 540 | unsupported | 4262 |
eomt-l-dinov3-ade20k | 648 | 575 | unsupported | 4259 |
fcn-r101-d8-ade20k | 468 | 405 | unsupported | 1875 |
hrnet-w48-fcn-ade20k | 263 | 228 | unsupported | 2044 |
mask2former-swinl-ade20k | 909 | 964 | unsupported | 6661 |
oneformer-swinl-ade20k | 1127 | 1161 | unsupported | 9492 |
pspnet-r101-d8-ade20k | 486 | 411 | unsupported | 1945 |
sapiens-seg-0.3b-goliath | 2988 | 1517 | unsupported | 3748 |
sapiens-seg-1b-goliath | 5099 | 3113 | unsupported | 6340 |
segformer-b0-ade20k | 106 | – | unsupported | 1523 |
segformer-b5-ade20k | 428 | – | unsupported | 3113 |
Note: no Metal kernels for this family (card mps_kernels).
Promptable segmentation
Promptable segmentation, synthetic, 1024x1024
| model | time (ms): portable fp32 | portable fp16 | kernels fp16 | peak memory (MiB, process footprint, fastest dtype): portable |
|---|---|---|---|---|
sam-vit-b | 631 | – | unsupported | 4362 |
sam-vit-h | 2518 | – | unsupported | 8821 |
sam-vit-l | 1373 | – | unsupported | 7227 |
sam2.1-hiera-base-plus | 424 | – | unsupported | 3973 |
sam2.1-hiera-large | 613 | – | unsupported | 2950 |
sam2.1-hiera-small | 177 | – | unsupported | 1597 |
sam2.1-hiera-tiny | 151 | – | unsupported | 1536 |
sam3 | 3620 | 3688 | unsupported | 5807 |
Note: no Metal kernels for this family (card mps_kernels).
Detection
Detection, synthetic, 800x1344
| model | time (ms): portable fp32 | kernels fp16 | peak memory (MiB, process footprint, fastest dtype): portable |
|---|---|---|---|
detr-r101-coco | 183 | unsupported | 2181 |
detr-r50-coco | 125 | unsupported | 1995 |
faster-rcnn-r50-fpn-3x-coco | 214 | unsupported | 1930 |
mask-rcnn-r50-fpn-3x-coco | 222 | unsupported | 1930 |
rtdetrv2-l-coco | 82.6 | unsupported | 1927 |
rtdetrv2-m-coco | 55.3 | unsupported | 1776 |
rtdetrv2-ms-coco | 67.9 | unsupported | 1872 |
rtdetrv2-s-coco | 44.0 | unsupported | 1650 |
rtdetrv2-x-coco | 114 | unsupported | 2189 |
Note: no Metal kernels for this family (card mps_kernels).
Features
Features, synthetic, 224x224
| model | time (ms): portable fp32 | portable fp16 | kernels fp16 | peak memory (MiB, process footprint, fastest dtype): portable |
|---|---|---|---|---|
dinov2-vitb14 | 23.3 | 21.7 | unsupported | 774 |
dinov2-vitb14-reg | 44.3 | 42.8 | unsupported | 775 |
dinov2-vitg14 | 221 | 193 | unsupported | 4502 |
dinov2-vitg14-reg | 263 | 235 | unsupported | 4502 |
dinov2-vitl14 | 68.0 | 59.4 | unsupported | 1562 |
dinov2-vitl14-reg | 96.1 | 86.3 | unsupported | 1563 |
dinov2-vits14 | 12.2 | 11.2 | unsupported | 341 |
dinov2-vits14-reg | 22.2 | 22.1 | unsupported | 344 |
dinov3-convnext-base | failed | failed | unsupported | – |
dinov3-convnext-large | failed | failed | unsupported | – |
dinov3-convnext-small | 23.4 | 21.7 | unsupported | 614 |
dinov3-convnext-tiny | failed | failed | unsupported | – |
dinov3-vitb16 | 25.0 | 22.7 | unsupported | 726 |
dinov3-vith16plus | failed | failed | unsupported | – |
dinov3-vitl16 | failed | failed | unsupported | – |
dinov3-vits16 | failed | failed | unsupported | – |
Note: no Metal kernels for this family (card mps_kernels).
Multiview
Multiview, synthetic, 336x518
| model | time (ms): portable fp32 | portable fp16 | kernels fp32 | kernels fp16 | kernels speed-up: vs portable | peak memory (MiB, process footprint, fastest dtype): portable | kernels |
|---|---|---|---|---|---|---|---|
mapanything-apache | 7357 | 6369 | – | unsupported | – | 7218 | – |
vggt-1b | 7209 | – | 7016 | – | 1.0x | 10654 | 10692 |
vggt-omega-1b-512 | 7938 | 7242 | – | unsupported | – | 8602 | – |
Note: no Metal kernels for this family (card mps_kernels).
Multiview, synthetic, 448x672
| model | time (ms): portable fp32 | kernels fp16 | peak memory (MiB, process footprint, fastest dtype): portable |
|---|---|---|---|
mvsanywhere | 1051 | unsupported | 3534 |
Note: no Metal kernels for this family (card mps_kernels).
Multiview, synthetic, 1536x1024
| model | time (ms): portable fp32 | kernels fp16 | peak memory (MiB, process footprint, fastest dtype): portable |
|---|---|---|---|
patchmatchnet | 1010 | unsupported | 7593 |
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.