---
title: Metal Performance Shaders
framework: metalperformanceshaders
role: collection
role_heading: Framework
path: metalperformanceshaders
---

# Metal Performance Shaders

Optimize graphics and compute performance with kernels that are fine-tuned for the unique characteristics of each Metal GPU family.

## Overview

Overview The Metal Performance Shaders framework contains a collection of highly optimized compute and graphics shaders that are designed to integrate easily and efficiently into your Metal app. These data-parallel primitives are specially tuned to take advantage of the unique hardware characteristics of each GPU family to ensure optimal performance. Apps adopting the Metal Performance Shaders framework achieve great performance without needing to create and maintain hand-written shaders for each GPU family. Metal Performance Shaders can be used along with your app’s existing Metal resources (such as the MTLCommandBuffer, MTLTexture, and MTLBuffer objects) and shaders. The Metal Performance Shaders framework supports the following functionality: Apply high-performance filters to, and extract statistical and histogram data from images. Implement and run neural networks for machine learning training and inference. Solve systems of equations, factorize matrices and multiply matrices and vectors. Accelerate ray tracing with high-performance ray-geometry intersection testing.

## Topics

### Fundamentals

- [The MPSKernel Class](metalperformanceshaders/the-mpskernel-class.md)
- [Tuning Hints](metalperformanceshaders/tuning-hints.md)

### Device Support

- [MPSSupportsMTLDevice(_:)](metalperformanceshaders/mpssupportsmtldevice(_:).md)

### Image Filters

- [Image Filters](metalperformanceshaders/image-filters.md)

### Neural Networks

- [Training a Neural Network with Metal Performance Shaders](metalperformanceshaders/training-a-neural-network-with-metal-performance-shaders.md)
- [MPSImage](metalperformanceshaders/mpsimage.md)
- [MPSTemporaryImage](metalperformanceshaders/mpstemporaryimage.md)
- [Objects that Simplify the Creation of Neural Networks](metalperformanceshaders/objects-that-simplify-the-creation-of-neural-networks.md)
- [Convolutional Neural Network Kernels](metalperformanceshaders/convolutional-neural-network-kernels.md)
- [Recurrent Neural Networks](metalperformanceshaders/recurrent-neural-networks.md)

### Matrices and Vectors

- [Matrices and Vectors](metalperformanceshaders/matrices-and-vectors.md)

### Kernel Base Classes

- [MPSKernel](metalperformanceshaders/mpskernel.md)

### Keyed Archivers

- [NSKeyedArchiver](foundation/nskeyedarchiver.md)
- [MPSKeyedUnarchiver](metalperformanceshaders/mpskeyedunarchiver.md)
- [MPSDeviceProvider](metalperformanceshaders/mpsdeviceprovider.md)

### Ray Tracing

- [Accelerating ray tracing and motion blur using Metal](metal/accelerating-ray-tracing-and-motion-blur-using-metal.md)
- [MPSRayIntersector](metalperformanceshaders/mpsrayintersector.md)
- [MPSAccelerationStructureGroup](metalperformanceshaders/mpsaccelerationstructuregroup.md)
- [MPSInstanceAccelerationStructure](metalperformanceshaders/mpsinstanceaccelerationstructure.md)
- [MPSTriangleAccelerationStructure](metalperformanceshaders/mpstriangleaccelerationstructure.md)
- [MPSAccelerationStructure](metalperformanceshaders/mpsaccelerationstructure.md)

### Articles

- [MetalPerformanceShaders Constants](metalperformanceshaders/metalperformanceshaders-constants.md)
- [MetalPerformanceShaders Data Types](metalperformanceshaders/metalperformanceshaders-data-types.md)
- [MetalPerformanceShaders Enumerations](metalperformanceshaders/metalperformanceshaders-enumerations.md)
- [MetalPerformanceShaders Functions](metalperformanceshaders/metalperformanceshaders-functions.md)
- [MetalPerformanceShaders Structures](metalperformanceshaders/metalperformanceshaders-structures.md)

### Classes

- [MPSCNNConvolutionTransposeGradient](metalperformanceshaders/mpscnnconvolutiontransposegradient.md)
- [MPSCNNConvolutionTransposeGradientNode](metalperformanceshaders/mpscnnconvolutiontransposegradientnode.md)
- [MPSCNNConvolutionTransposeGradientState](metalperformanceshaders/mpscnnconvolutiontransposegradientstate.md)
- [MPSCNNConvolutionTransposeGradientStateNode](metalperformanceshaders/mpscnnconvolutiontransposegradientstatenode.md)
- [MPSCNNFullyConnectedGradientNode](metalperformanceshaders/mpscnnfullyconnectedgradientnode.md)
- [MPSCNNGroupNormalization](metalperformanceshaders/mpscnngroupnormalization.md)
- [MPSCNNGroupNormalizationGradient](metalperformanceshaders/mpscnngroupnormalizationgradient.md)
- [MPSCNNGroupNormalizationGradientNode](metalperformanceshaders/mpscnngroupnormalizationgradientnode.md)
- [MPSCNNGroupNormalizationGradientState](metalperformanceshaders/mpscnngroupnormalizationgradientstate.md)
- [MPSCNNGroupNormalizationNode](metalperformanceshaders/mpscnngroupnormalizationnode.md)
- [MPSCNNMultiaryKernel](metalperformanceshaders/mpscnnmultiarykernel.md)
- [MPSCNNNeuronGeLUNode](metalperformanceshaders/mpscnnneurongelunode.md)
- [MPSCommandBuffer](metalperformanceshaders/mpscommandbuffer.md)
- [MPSFColorConversion](metalperformanceshaders/mpsfcolorconversion.md)
- [MPSFunction](metalperformanceshaders/mpsfunction.md)
- [MPSImageCanny](metalperformanceshaders/mpsimagecanny.md)
- [MPSImageEDLines](metalperformanceshaders/mpsimageedlines.md)
- [MPSImageNormalizedHistogram](metalperformanceshaders/mpsimagenormalizedhistogram.md)
- [MPSMatrixRandom](metalperformanceshaders/mpsmatrixrandom.md)
- [MPSMatrixRandomDistributionDescriptor](metalperformanceshaders/mpsmatrixrandomdistributiondescriptor.md)
- [MPSMatrixRandomMTGP32](metalperformanceshaders/mpsmatrixrandommtgp32.md)
- [MPSMatrixRandomPhilox](metalperformanceshaders/mpsmatrixrandomphilox.md)
- [MPSNDArray](metalperformanceshaders/mpsndarray.md)
- [MPSNDArrayAffineInt4Dequantize](metalperformanceshaders/mpsndarrayaffineint4dequantize.md)
- [MPSNDArrayAffineQuantizationDescriptor](metalperformanceshaders/mpsndarrayaffinequantizationdescriptor.md)
- [MPSNDArrayBinaryKernel](metalperformanceshaders/mpsndarraybinarykernel.md)
- [MPSNDArrayBinaryPrimaryGradientKernel](metalperformanceshaders/mpsndarraybinaryprimarygradientkernel.md)
- [MPSNDArrayBinarySecondaryGradientKernel](metalperformanceshaders/mpsndarraybinarysecondarygradientkernel.md)
- [MPSNDArrayDescriptor](metalperformanceshaders/mpsndarraydescriptor.md)
- [MPSNDArrayGather](metalperformanceshaders/mpsndarraygather.md)
- [MPSNDArrayGatherGradient](metalperformanceshaders/mpsndarraygathergradient.md)
- [MPSNDArrayGatherGradientState](metalperformanceshaders/mpsndarraygathergradientstate.md)
- [MPSNDArrayGradientState](metalperformanceshaders/mpsndarraygradientstate.md)
- [MPSNDArrayIdentity](metalperformanceshaders/mpsndarrayidentity.md)
- [MPSNDArrayLUTDequantize](metalperformanceshaders/mpsndarraylutdequantize.md)
- [MPSNDArrayLUTQuantizationDescriptor](metalperformanceshaders/mpsndarraylutquantizationdescriptor.md)
- [MPSNDArrayMatrixMultiplication](metalperformanceshaders/mpsndarraymatrixmultiplication.md)
- [MPSNDArrayMultiaryBase](metalperformanceshaders/mpsndarraymultiarybase.md)
- [MPSNDArrayMultiaryGradientKernel](metalperformanceshaders/mpsndarraymultiarygradientkernel.md)
- [MPSNDArrayMultiaryKernel](metalperformanceshaders/mpsndarraymultiarykernel.md)
- [MPSNDArrayQuantizationDescriptor](metalperformanceshaders/mpsndarrayquantizationdescriptor.md)
- [MPSNDArrayQuantizedMatrixMultiplication](metalperformanceshaders/mpsndarrayquantizedmatrixmultiplication.md)
- [MPSNDArrayStridedSlice](metalperformanceshaders/mpsndarraystridedslice.md)
- [MPSNDArrayStridedSliceGradient](metalperformanceshaders/mpsndarraystridedslicegradient.md)
- [MPSNDArrayUnaryGradientKernel](metalperformanceshaders/mpsndarrayunarygradientkernel.md)
- [MPSNDArrayUnaryKernel](metalperformanceshaders/mpsndarrayunarykernel.md)
- [MPSNDArrayVectorLUTDequantize](metalperformanceshaders/mpsndarrayvectorlutdequantize.md)
- [MPSNNCompare](metalperformanceshaders/mpsnncompare.md)
- [MPSNNComparisonNode](metalperformanceshaders/mpsnncomparisonnode.md)
- [MPSNNCropAndResizeBilinear](metalperformanceshaders/mpsnncropandresizebilinear.md)
- [MPSNNForwardLoss](metalperformanceshaders/mpsnnforwardloss.md)
- [MPSNNForwardLossNode](metalperformanceshaders/mpsnnforwardlossnode.md)
- [MPSNNGramMatrixCalculation](metalperformanceshaders/mpsnngrammatrixcalculation.md)
- [MPSNNGramMatrixCalculationGradient](metalperformanceshaders/mpsnngrammatrixcalculationgradient.md)
- [MPSNNGramMatrixCalculationGradientNode](metalperformanceshaders/mpsnngrammatrixcalculationgradientnode.md)
- [MPSNNGramMatrixCalculationNode](metalperformanceshaders/mpsnngrammatrixcalculationnode.md)
- [MPSNNGridSample](metalperformanceshaders/mpsnngridsample.md)
- [MPSNNInitialGradient](metalperformanceshaders/mpsnninitialgradient.md)
- [MPSNNInitialGradientNode](metalperformanceshaders/mpsnninitialgradientnode.md)
- [MPSNNLocalCorrelation](metalperformanceshaders/mpsnnlocalcorrelation.md)
- [MPSNNLossGradient](metalperformanceshaders/mpsnnlossgradient.md)
- [MPSNNLossGradientNode](metalperformanceshaders/mpsnnlossgradientnode.md)
- [MPSNNMultiaryGradientState](metalperformanceshaders/mpsnnmultiarygradientstate.md)
- [MPSNNMultiaryGradientStateNode](metalperformanceshaders/mpsnnmultiarygradientstatenode.md)
- [MPSNNPad](metalperformanceshaders/mpsnnpad.md)
- [MPSNNPadGradient](metalperformanceshaders/mpsnnpadgradient.md)
- [MPSNNPadGradientNode](metalperformanceshaders/mpsnnpadgradientnode.md)
- [MPSNNPadNode](metalperformanceshaders/mpsnnpadnode.md)
- [MPSNNReductionColumnMaxNode](metalperformanceshaders/mpsnnreductioncolumnmaxnode.md)
- [MPSNNReductionColumnMeanNode](metalperformanceshaders/mpsnnreductioncolumnmeannode.md)
- [MPSNNReductionColumnMinNode](metalperformanceshaders/mpsnnreductioncolumnminnode.md)
- [MPSNNReductionColumnSumNode](metalperformanceshaders/mpsnnreductioncolumnsumnode.md)
- [MPSNNReductionFeatureChannelsArgumentMaxNode](metalperformanceshaders/mpsnnreductionfeaturechannelsargumentmaxnode.md)
- [MPSNNReductionFeatureChannelsArgumentMinNode](metalperformanceshaders/mpsnnreductionfeaturechannelsargumentminnode.md)
- [MPSNNReductionFeatureChannelsMaxNode](metalperformanceshaders/mpsnnreductionfeaturechannelsmaxnode.md)
- [MPSNNReductionFeatureChannelsMeanNode](metalperformanceshaders/mpsnnreductionfeaturechannelsmeannode.md)
- [MPSNNReductionFeatureChannelsMinNode](metalperformanceshaders/mpsnnreductionfeaturechannelsminnode.md)
- [MPSNNReductionFeatureChannelsSumNode](metalperformanceshaders/mpsnnreductionfeaturechannelssumnode.md)
- [MPSNNReductionRowMaxNode](metalperformanceshaders/mpsnnreductionrowmaxnode.md)
- [MPSNNReductionRowMeanNode](metalperformanceshaders/mpsnnreductionrowmeannode.md)
- [MPSNNReductionRowMinNode](metalperformanceshaders/mpsnnreductionrowminnode.md)
- [MPSNNReductionRowSumNode](metalperformanceshaders/mpsnnreductionrowsumnode.md)
- [MPSNNReductionSpatialMeanGradientNode](metalperformanceshaders/mpsnnreductionspatialmeangradientnode.md)
- [MPSNNReductionSpatialMeanNode](metalperformanceshaders/mpsnnreductionspatialmeannode.md)
- [MPSNNReshapeGradient](metalperformanceshaders/mpsnnreshapegradient.md)
- [MPSNNReshapeGradientNode](metalperformanceshaders/mpsnnreshapegradientnode.md)
- [MPSNNReshapeNode](metalperformanceshaders/mpsnnreshapenode.md)
- [MPSNNResizeBilinear](metalperformanceshaders/mpsnnresizebilinear.md)
- [MPSNNUnaryReductionNode](metalperformanceshaders/mpsnnunaryreductionnode.md)
- [MPSPolygonAccelerationStructure](metalperformanceshaders/mpspolygonaccelerationstructure.md)
- [MPSPolygonBuffer](metalperformanceshaders/mpspolygonbuffer.md)
- [MPSPredicate](metalperformanceshaders/mpspredicate.md)
- [MPSQuadrilateralAccelerationStructure](metalperformanceshaders/mpsquadrilateralaccelerationstructure.md)
- [MPSSVGF](metalperformanceshaders/mpssvgf.md)
- [MPSSVGFDefaultTextureAllocator](metalperformanceshaders/mpssvgfdefaulttextureallocator.md)
- [MPSSVGFDenoiser](metalperformanceshaders/mpssvgfdenoiser.md)
- [MPSStateResourceList](metalperformanceshaders/mpsstateresourcelist.md)
- [MPSTemporalAA](metalperformanceshaders/mpstemporalaa.md)
- [MPSTemporaryNDArray](metalperformanceshaders/mpstemporaryndarray.md)

### Protocols

- [MPSCNNGroupNormalizationDataSource](metalperformanceshaders/mpscnngroupnormalizationdatasource.md)
- [MPSHeapProvider](metalperformanceshaders/mpsheapprovider.md)
- [MPSNDArrayAllocator](metalperformanceshaders/mpsndarrayallocator.md)
- [MPSNNGramMatrixCallback](metalperformanceshaders/mpsnngrammatrixcallback.md)
- [MPSNNLossCallback](metalperformanceshaders/mpsnnlosscallback.md)
- [MPSSVGFTextureAllocator](metalperformanceshaders/mpssvgftextureallocator.md)

### Structures

- [MPSFColorConversionOptions](metalperformanceshaders/mpsfcolorconversionoptions.md)
- [MPSFunctions_AABB](metalperformanceshaders/mpsfunctions_aabb.md)
- [MPSOrigin](metalperformanceshaders/mpsorigin.md)
- [MPSSize](metalperformanceshaders/mpssize.md)

### Variables

- [MPSCustomKernelIndexDestIndex](metalperformanceshaders/mpscustomkernelindexdestindex.md)
- [MPSCustomKernelIndexSrc0Index](metalperformanceshaders/mpscustomkernelindexsrc0index.md)
- [MPSCustomKernelIndexSrc1Index](metalperformanceshaders/mpscustomkernelindexsrc1index.md)
- [MPSCustomKernelIndexSrc2Index](metalperformanceshaders/mpscustomkernelindexsrc2index.md)
- [MPSCustomKernelIndexSrc3Index](metalperformanceshaders/mpscustomkernelindexsrc3index.md)
- [MPSCustomKernelIndexSrc4Index](metalperformanceshaders/mpscustomkernelindexsrc4index.md)
- [MPSCustomKernelIndexUserDataIndex](metalperformanceshaders/mpscustomkernelindexuserdataindex.md)
- [MPSDeviceCapsLast](metalperformanceshaders/mpsdevicecapslast.md)
- [MPSDeviceCapsNull](metalperformanceshaders/mpsdevicecapsnull.md)
- [MPSDeviceIsAppleDevice](metalperformanceshaders/mpsdeviceisappledevice.md)
- [MPSDeviceSupportsBFloat16Arithmetic](metalperformanceshaders/mpsdevicesupportsbfloat16arithmetic.md)
- [MPSDeviceSupportsFloat16BicubicFiltering](metalperformanceshaders/mpsdevicesupportsfloat16bicubicfiltering.md)
- [MPSDeviceSupportsFloat32Filtering](metalperformanceshaders/mpsdevicesupportsfloat32filtering.md)
- [MPSDeviceSupportsNorm16BicubicFiltering](metalperformanceshaders/mpsdevicesupportsnorm16bicubicfiltering.md)
- [MPSDeviceSupportsQuadShuffle](metalperformanceshaders/mpsdevicesupportsquadshuffle.md)
- [MPSDeviceSupportsReadWriteTextures](metalperformanceshaders/mpsdevicesupportsreadwritetextures.md)
- [MPSDeviceSupportsReadableArrayOfTextures](metalperformanceshaders/mpsdevicesupportsreadablearrayoftextures.md)
- [MPSDeviceSupportsSimdReduction](metalperformanceshaders/mpsdevicesupportssimdreduction.md)
- [MPSDeviceSupportsSimdShuffle](metalperformanceshaders/mpsdevicesupportssimdshuffle.md)
- [MPSDeviceSupportsSimdShuffleAndFill](metalperformanceshaders/mpsdevicesupportssimdshuffleandfill.md)
- [MPSDeviceSupportsSimdgroupBarrier](metalperformanceshaders/mpsdevicesupportssimdgroupbarrier.md)
- [MPSDeviceSupportsWritableArrayOfTextures](metalperformanceshaders/mpsdevicesupportswritablearrayoftextures.md)
- [MPSFColorConversion_h](metalperformanceshaders/mpsfcolorconversion_h.md)
- [MPSFunctions_AABB_SDR](metalperformanceshaders/mpsfunctions_aabb_sdr.md)
- [MPSFunctions_AABB_Unbounded](metalperformanceshaders/mpsfunctions_aabb_unbounded.md)
- [MPSImageType2d](metalperformanceshaders/mpsimagetype2d.md)
- [MPSImageType2d_array](metalperformanceshaders/mpsimagetype2d_array.md)
- [MPSImageType2d_array_noAlpha](metalperformanceshaders/mpsimagetype2d_array_noalpha.md)
- [MPSImageType2d_noAlpha](metalperformanceshaders/mpsimagetype2d_noalpha.md)
- [MPSImageTypeArray2d](metalperformanceshaders/mpsimagetypearray2d.md)
- [MPSImageTypeArray2d_array](metalperformanceshaders/mpsimagetypearray2d_array.md)
- [MPSImageTypeArray2d_array_noAlpha](metalperformanceshaders/mpsimagetypearray2d_array_noalpha.md)
- [MPSImageTypeArray2d_noAlpha](metalperformanceshaders/mpsimagetypearray2d_noalpha.md)
- [MPSImageType_ArrayMask](metalperformanceshaders/mpsimagetype_arraymask.md)
- [MPSImageType_BatchMask](metalperformanceshaders/mpsimagetype_batchmask.md)
- [MPSImageType_bitCount](metalperformanceshaders/mpsimagetype_bitcount.md)
- [MPSImageType_mask](metalperformanceshaders/mpsimagetype_mask.md)
- [MPSImageType_noAlpha](metalperformanceshaders/mpsimagetype_noalpha.md)
- [MPSImageType_texelFormatBFloat16](metalperformanceshaders/mpsimagetype_texelformatbfloat16.md)
- [MPSImageType_texelFormatFloat16](metalperformanceshaders/mpsimagetype_texelformatfloat16.md)
- [MPSImageType_texelFormatMask](metalperformanceshaders/mpsimagetype_texelformatmask.md)
- [MPSImageType_texelFormatShift](metalperformanceshaders/mpsimagetype_texelformatshift.md)
- [MPSImageType_texelFormatStandard](metalperformanceshaders/mpsimagetype_texelformatstandard.md)
- [MPSImageType_texelFormatUnorm8](metalperformanceshaders/mpsimagetype_texelformatunorm8.md)
- [MPSImageType_typeMask](metalperformanceshaders/mpsimagetype_typemask.md)
- [MPSRectNoClip](metalperformanceshaders/mpsrectnoclip.md)

### Type Aliases

- [MPSPackedFloat3](metalperformanceshaders/mpspackedfloat3-swift.typealias.md)

## See Also

### Related Documentation

- [Metal](metal.md)
- [Metal Programming Guide](apple-archive/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Introduction.md)
