-
Notifications
You must be signed in to change notification settings - Fork 514
MPSNDArray iOS xcode16.0 b1
Rolf Bjarne Kvinge edited this page Aug 30, 2024
·
3 revisions
#MPSNDArray.framework https://github.com/xamarin/xamarin-macios/pull/21155
diff -ruN /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArray.h /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArray.h
--- /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArray.h 2024-04-13 15:19:17
+++ /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArray.h 2024-05-30 10:46:00
@@ -10,3 +10,6 @@
#import <MPSNDArray/MPSNDArrayMatrixMultiplication.h>
#import <MPSNDArray/MPSNDArrayStridedSlice.h>
#import <MPSNDArray/MPSNDArrayGather.h>
+#import <MPSNDArray/MPSNDArrayIdentity.h>
+#import <MPSNDArray/MPSNDArrayQuantization.h>
+#import <MPSNDArray/MPSNDArrayQuantizedMatrixMultiplication.h>
diff -ruN /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayIdentity.h /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayIdentity.h
--- /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayIdentity.h 1970-01-01 01:00:00
+++ /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayIdentity.h 2024-05-30 10:46:03
@@ -0,0 +1,65 @@
+//
+// MPSNDArrayIdentity.h
+// MPS
+//
+// Created by Dhruv Saksena on 8/3/19.
+// Copyright © 2019 Apple. All rights reserved.
+//
+
+#ifndef MPSNDArrayIdentity_h
+#define MPSNDArrayIdentity_h
+
+#import <MPSNDArray/MPSNDArrayKernel.h>
+
+#pragma mark - Base class Identity Kernels
+
+/*!
+ * @class MPSNDArrayIdentityKernel
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract An efficient kernel to handle copies, transposed-copies and reshapes.
+ *
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayIdentity : MPSNDArrayUnaryKernel
+
+-(nonnull instancetype) initWithDevice: (nonnull id <MTLDevice>) device NS_DESIGNATED_INITIALIZER;
+
+/*! @abstract Do a reshape operation, either by trying to alias the array, returning an arrayview, or by copying.
+ * @param cmdBuf The command buffer into which to encode the kernel, or to create a temporary array alias.
+ * @param sourceArray Source array. If this function returns a non-nil result, then the readCount of `sourceArray` is decremented.
+ * @param shape The new shape, given in TF dimension ordering (as always with MPSShape).
+ * @param destinationArray If not nil, then the result of reshape will be copied to this. Shape of `destinationArray` must match `shape`.
+ * @result If `destinationArray` is not nil, then `destinationArray`. Otherwise aliasing is tried, and if aliasing is not possible
+ * due to existing slices or transposes nil is returned. If aliasing is successful, then a new arrayview of `sourceArray`
+ * is returned; If `sourceArray` is a `MPSTemporaryArray` then a `MPSTemporaryArray` is returned referencing the same data,
+ * otherwise a `MPSNDArray` type result is returned.
+ * */
+-(MPSNDArray * __nullable) reshapeWithCommandBuffer: (__nullable id <MTLCommandBuffer>) cmdBuf
+ sourceArray: (MPSNDArray * __nonnull) sourceArray
+ shape: (MPSShape * __nonnull) shape
+ destinationArray: (MPSNDArray * __nullable) destinationArray;
+// Variant with MPS dimension-ordering
+-(MPSNDArray * __nullable) reshapeWithCommandBuffer: (__nullable id <MTLCommandBuffer>) cmdBuf
+ sourceArray: (MPSNDArray * __nonnull) sourceArray
+ dimensionCount: (NSUInteger) numberOfDimensions
+ dimensionSizes: (NSUInteger*__nonnull) dimensionSizes
+ destinationArray: (MPSNDArray * __nullable) destinationArray;
+
+-(MPSNDArray * __nullable) reshapeWithCommandEncoder: (__nullable id <MTLComputeCommandEncoder>) encoder
+ commandBuffer: (__nullable id <MTLCommandBuffer>) cmdBuf
+ sourceArray: (MPSNDArray * __nonnull) sourceArray
+ shape: (MPSShape * __nonnull) shape
+ destinationArray: (MPSNDArray * __nullable) destinationArray;
+// Variant with MPS dimension-ordering
+-(MPSNDArray * __nullable) reshapeWithCommandEncoder: (__nullable id <MTLComputeCommandEncoder>) encoder
+ commandBuffer: (__nullable id <MTLCommandBuffer>) cmdBuf
+ sourceArray: (MPSNDArray * __nonnull) sourceArray
+ dimensionCount: (NSUInteger) numberOfDimensions
+ dimensionSizes: (NSUInteger*__nonnull) dimensionSizes
+ destinationArray: (MPSNDArray * __nullable) destinationArray;
+
+@end // MPSNDArrayIdentity
+
+#endif /* MPSNDArrayIdentity_h */
diff -ruN /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantization.h /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantization.h
--- /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantization.h 1970-01-01 01:00:00
+++ /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantization.h 2024-05-30 05:07:59
@@ -0,0 +1,125 @@
+//
+// MPSNDArrayQuantization.h
+// MPSNDArray
+//
+// Created by Saharsh Oza on 4/24/23.
+// Copyright © 2023 Apple. All rights reserved.
+//
+
+#ifndef MPSNDArrayQuantization_h
+#define MPSNDArrayQuantization_h
+
+#import <MPSCore/MPSCoreTypes.h>
+#import <MPSCore/MPSKernel.h>
+#import <MPSCore/MPSNDArray.h>
+
+/*! @enum MPSNDArrayQuantizationScheme
+ * @discussion Which quantization mode is applied to an MPSNDArray
+ *
+ * @constant MPSNDArrayQuantizationTypeNone No quantization - inputs are read and outputs are produced in the original datatype.
+ * @constant MPSNDArrayQuantizationTypeAffine Dequantization with: y = scale( input - zeroPoint) + minValue
+ * @constant MPSNDArrayQuantizationTypeLUT Dequantization with y = lookuptable[ input ]
+ */
+
+#if defined(DOXYGEN)
+ typedef enum MPSNDArrayQuantizationScheme
+#else
+ typedef NS_OPTIONS(NSUInteger, MPSNDArrayQuantizationScheme)
+#endif
+{
+ MPSNDArrayQuantizationTypeNone MPS_ENUM_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) ) MPS_SWIFT_NAME( none ) = 0,
+ MPSNDArrayQuantizationTypeAffine MPS_ENUM_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) ),
+ MPSNDArrayQuantizationTypeLUT MPS_ENUM_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) ),
+}
+#if defined(DOXYGEN)
+ MPSNDArrayQuantizationScheme
+#endif
+;
+
+
+/*!
+ * @class MPSNDArrayQuantizationDescriptor
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract Common methods for quantization descriptors
+ *
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayQuantizationDescriptor : NSObject <NSCopying>
+
+/*! @property quantizationDataType
+ * @abstract The datatype to use with quantization - the default is MPSDataTypeUint8
+ */
+@property (readonly, nonatomic) MPSDataType quantizationDataType;
+
+/*! @property quantizationScheme
+ * @abstract The quantization scheme for this descriptor. The default is MPSNDArrayQuantizationTypeNone.
+ */
+@property (readonly, nonatomic) MPSNDArrayQuantizationScheme quantizationScheme;
+
+@end
+
+/*!
+ * @class MPSNDArrayAffineQuantizationDescriptor
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract Describes an affine quantization scheme
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayAffineQuantizationDescriptor : MPSNDArrayQuantizationDescriptor
+
+/*! @property hasZeroPoint
+ * @abstract If yes then asymmetric quantization is used. See MPSNDArrayQuantizationScheme.
+ */
+@property (readwrite, nonatomic) BOOL hasZeroPoint;
+
+/*! @property hasMinValue
+ * @abstract If yes then offset is used. See MPSNDArrayQuantizationScheme.
+ */
+@property (readwrite, nonatomic) BOOL hasMinValue;
+
+
+- (nonnull instancetype) init;
+
+/*! @abstract Initializes an affine quantization descriptor.
+ * @param quantizationDataType Which quantized datatype is used.
+ * @param hasZeroPoint A flag indicating that a zero-point input is expected.
+ * @param hasMinValue A flag indicating that a minimum value input is expected.
+ * @result A new quantization descriptor.
+ * */
+- (nonnull instancetype) initWithDataType: (MPSDataType) quantizationDataType
+ hasZeroPoint: (BOOL) hasZeroPoint
+ hasMinValue: (BOOL) hasMinValue;
+
+@end
+
+
+/*!
+ * @class MPSNDArrayLUTQuantizationDescriptor
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract Describes a lookup-table based quantization scheme
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayLUTQuantizationDescriptor : MPSNDArrayQuantizationDescriptor
+
+/*! @abstract Initializes a scalar lookup-table quantization descriptor.
+ * @param quantizationDataType Which quantized datatype is used.
+ * @result A new quantization descriptor.
+ * */
+- (nonnull instancetype) initWithDataType: (MPSDataType) quantizationDataType;
+
+/*! @abstract Initializes a vector lookup-table quantization descriptor.
+ * @param quantizationDataType Which quantized datatype is used.
+ * @param vectorAxis The quantization vector axis - this axis will receive the vector component in the destination.
+ * @result A new quantization descriptor.
+ * */
+- (nonnull instancetype) initWithDataType: (MPSDataType) quantizationDataType
+ vectorAxis: (NSUInteger) vectorAxis;
+
+@end
+
+#endif /* MPSNDArrayQuantization_h */
diff -ruN /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantizedMatrixMultiplication.h /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantizedMatrixMultiplication.h
--- /Applications/Xcode_15.4.0.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantizedMatrixMultiplication.h 1970-01-01 01:00:00
+++ /Applications/Xcode_16.0.0-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/MetalPerformanceShaders.framework/Frameworks/MPSNDArray.framework/Headers/MPSNDArrayQuantizedMatrixMultiplication.h 2024-05-30 03:40:26
@@ -0,0 +1,127 @@
+//
+// MPSNDArrayQuantizedMatrixMultiplication.h
+// MPSNDArray
+//
+// Copyright © 2023 Apple. All rights reserved.
+//
+
+#ifndef MPSNDArrayQuantizedMatrixMultiplication_h
+#define MPSNDArrayQuantizedMatrixMultiplication_h
+
+#import <MPSNDArray/MPSNDArrayMatrixMultiplication.h>
+#import <MPSNDArray/MPSNDArrayQuantization.h>
+
+/*!
+ * @class MPSNDArrayQuantizedMatrixMultiplication
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract A quantized matrix multiplication kernel: C = AB, where each input A and B can be quantized.
+ * @discussion The kernel works with 2-8 inputs, order of inputs: First all LHS inputs, then all RHS inputs.
+ * The order of inputs for LUT based LHS or RHS: 1) quantized input 2) Lookup Table.
+ * The order of inputs for affine LHS or RHS: 1) quantized input 2) scale 3) zeropoint 4) minValue.
+ * The full order of inputs for the encode methods is:
+ * `[LHS, RHS, <LHS quantization inputs>, <RHS quantization inputs>]`,
+ * where `LHS` is the left input (quantized or float) `RHS` is the right input (quantized or float) and
+ * `<LHS quantization inputs>` are the auxiliary quantization inputs for the LHS array (scales, zeropoints etc).
+ * and `<RHS quantization inputs>` are the auxiliary quantization input for the RHS array.
+ * The inputs are provided as a compacted `NSArray<MPSNDArray *>`, for example for computing
+ * `C = A * B^T` where `A` is quantized with a LUT and `B` is quantized with affine quantization that
+ * uses scale and minValue the array of inputs is:
+ * ` [ Aq, Bq^T, ALUT, BScale^T, BMin^T ] `.
+ * NOTE: For affine scale, zeropoint and minValue must have same transposes as quantized input.
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayQuantizedMatrixMultiplication : MPSNDArrayMatrixMultiplication
+
+-(nonnull instancetype) initWithDevice:(nonnull id<MTLDevice>)device
+ sourceCount:(NSUInteger) sourceCount NS_UNAVAILABLE;
+
+/*! @abstract Initializes a quantized matrix multiplication kernel.
+ * @param leftQuantizationDescriptor The quantization definition for the LHS input.
+ * @param rightQuantizationDescriptor The quantization definition for the RHS input.
+ * @result A new valid quantized matrix multiplication kernel.
+ * */
+- (nonnull instancetype) initWithDevice: (nonnull id<MTLDevice>) device
+ leftQuantizationDescriptor: (MPSNDArrayQuantizationDescriptor* _Nullable) leftQuantizationDescriptor
+ rightQuantizationDescriptor: (MPSNDArrayQuantizationDescriptor* _Nullable) rightQuantizationDescriptor;
+
+@end
+
+/*!
+ * @class MPSNDArrayLUTDequantize
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract A kernel which dequantizes a lookup-table based NDArray.
+ * @discussion The kernel works with 2 inputs: 1) The quantized input, 2) The LookUp table array.
+ *
+ */
+
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayLUTDequantize : MPSNDArrayMultiaryKernel
+
+-(nonnull instancetype) initWithDevice: (nonnull id <MTLDevice>) device
+NS_DESIGNATED_INITIALIZER;
+
+-(nonnull instancetype) initWithDevice:(nonnull id<MTLDevice>)device
+ sourceCount:(NSUInteger) sourceCount NS_UNAVAILABLE;
+
+@end
+
+/*!
+ * @class MPSNDArrayVectorLUTDequantize
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract A kernel which dequantizes a lookup-table based NDArray with vector LUT support.
+ * @discussion The kernel works with 2 inputs: 1) The quantized input, 2) The LookUp table array.
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayVectorLUTDequantize : MPSNDArrayMultiaryKernel
+
+/*! @property vectorAxis
+ * @abstract Which axis in the destination will receive the vector component, must be less than 4.
+ */
+@property(readwrite, nonatomic) NSUInteger vectorAxis;
+
+/*! @abstract Initializes a kernel for vector-based LUT dequantization.
+ * @param device The Metal device to be used with this kernel.
+ * @param axis The vector axis in the output.
+ * @result A new vector LUT dequantization kernel.
+ * */
+-(nonnull instancetype) initWithDevice: (nonnull id <MTLDevice>) device
+ axis: (NSUInteger) axis
+NS_DESIGNATED_INITIALIZER;
+
+-(nonnull instancetype) initWithDevice:(nonnull id<MTLDevice>)device
+ sourceCount:(NSUInteger) sourceCount NS_UNAVAILABLE;
+
+@end
+
+/*!
+ * @class MPSNDArrayAffineInt4Dequantize
+ *
+ * @dependency This depends on Metal.framework.
+ * @abstract A kernel which dequantizes an input with affine quantization scheme.
+ * @discussion The kernel works with 2-4 inputs, order of inputs: 1) quantized input, 2) scale, 3) zeropoint, 4) minValue
+ *
+ */
+MPS_CLASS_AVAILABLE_STARTING( macos(15.0), ios(18.0), macCatalyst(18.0), tvos(18.0), xros(2.0) )
+@interface MPSNDArrayAffineInt4Dequantize : MPSNDArrayMultiaryKernel
+
+-(nonnull instancetype) initWithDevice: (nonnull id <MTLDevice>) device NS_UNAVAILABLE;
+
+/*! @abstract Initializes a kernel for 4-bit affine dequantization.
+ * @param device The Metal device to be used with this kernel.
+ * @param quantizationDescriptor Describes the quantization scheme.
+ * @result A new vector LUT dequantization kernel.
+ * */
+-(nonnull instancetype) initWithDevice:(nonnull id<MTLDevice>)device
+ quantizationDescriptor:(MPSNDArrayAffineQuantizationDescriptor* __nonnull) quantizationDescriptor;
+
+-(nonnull instancetype) initWithDevice:(nonnull id<MTLDevice>)device
+ sourceCount:(NSUInteger) sourceCount NS_UNAVAILABLE;
+
+@end
+
+#endif /* MPSNDArrayQuantizedMatrixMultiplication_h */
- README
- xcode13.0 Binding Status
- xcode13.1 Binding Status
- xcode13.2 Binding Status
- xcode13.3 Binding Status
- xcode13.4 Binding Status
- xcode14.0 Binding Status
- xcode14.1 Binding Status
- xcode14.2 Binding Status
- xcode14.3 Binding Status
- xcode15.0 Binding Status
- xcode15.1 Binding Status
- xcode15.3 Binding Status
- xcode15.4 Binding Status
- xcode16.0 Binding Status
- xcode16.1 Binding Status
- xcode16.2 Binding Status