Package apple.metalperformanceshaders
Class MPSCNNConvolutionGradientState
- java.lang.Object
-
- org.moe.natj.general.NativeObject
-
- org.moe.natj.objc.ObjCObject
-
- apple.NSObject
-
- apple.metalperformanceshaders.MPSState
-
- apple.metalperformanceshaders.MPSNNGradientState
-
- apple.metalperformanceshaders.MPSCNNConvolutionGradientState
-
- All Implemented Interfaces:
MPSImageSizeEncodingState,NSObject
- Direct Known Subclasses:
MPSCNNConvolutionTransposeGradientState
public class MPSCNNConvolutionGradientState extends MPSNNGradientState implements MPSImageSizeEncodingState
MPSCNNConvolutionGradientState The MPSCNNConvolutionGradientState is returned by resultStateForSourceImage:sourceStates method on MPSCNNConvolution object. Note that resultStateForSourceImage:sourceStates:destinationImage creates the object on autoreleasepool. It will be consumed by MPSCNNConvolutionGradient. This is also used by MPSCNNConvolutionTranspose encode call that returns MPSImage on left hand side to correctly size the destination. Note that state objects are not usable across batches i.e. when batch is done you should nuke the state object and create new one for next batch. This state exposes the gradient with respect to weights and biases, as computed by the MPSCNNConvolutionGradient kernel, as a metal buffer to be used during weights and biases update. The standard weights and biases update formula is: weights(t+1) = f(weights(t), gradientForWeights(t)) and biases(t+1) = f(biases(t), gradientForBiases(t)), where the weights(t)/biases(t) are the wegihts and the biases at step t that are provided by data source provider used to create MPSCNNConvolution and MPSCNNConvoltuionGradient objects. There are multiple ways user can update weights and biases as described below: 1) For check pointing, i.e. updating weights/biases and storing: once the command buffer on which MPSCNNConvolutionGradient is enqueued is done (e.g. in command buffer completion callback), the application can simply use float* delta_w = (float*)((char*)[gradientForWeights contents]); float* delta_b = (float*)((char*)[gradientForBiases contents]); to update the weights and biases in the data provider directly. The application can instead provide a metal kernel that reads from gradientForWeights and gradientForBiases buffer and the buffer created using data provided by the data source to do any kind of update it will like to do, then read back the updated weights/biases and store to the data source. Note that lifetime of the gradientForWeights and gradientForBiases buffer is the same as the MPSCNNConvolutionGradientState. So it's the applications's responsibility to make sure the buffer is alive (retained) when the update kernel is running if the command buffer doesn't retain the buffer. Also, in order to gaurantee that the buffer is correctly synchronized for CPU side access, it is the application's responsibility to call [gradientState synchronizeOnCommandBuffer:] before accessing data from the buffer. 2) For a CPU side update, once the weights and biases in the data source provider are updated as above, the original MPSCNNConvolution and MPSCNNConvolutionGradient objects need to be updated with the new weigths and biases by calling the -(void) reloadWeightsAndBiasesFromDataSource method. Again application needs to call [gradientState synchronizeOnCommandBuffer:] before touching data on CPU side. 3) The above CPU side update requires command buffer to be done. If the application doesn't want to update its data source provider object and would prefer to directly enqueue an update of the internal MPSCNNConvolution and MPSCNNConvolutionGradient weights/biases buffers on the GPU without CPU side involvement, it needs to do following: i) get gradientForWeights and gradientForBiases buffers from this gradient state object and set it as source of update kernel ii) create a temporary buffer, dest, of same size and set it as destination of update kernel iii) enqueue update kernel on command buffer iv) call reloadWeightsAndBiasesWithCommandBuffer:dest:weightsOffset:biasesOffset on MPSCNNConvolution and MPSCNNConvolutionGradient objects. This will reload the weights from application's update kernel in dest on GPU without CPU side involvement.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class apple.NSObject
NSObject.Function_instanceMethodForSelector_ret, NSObject.Function_methodForSelector_ret
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedMPSCNNConvolutionGradientState(org.moe.natj.general.Pointer peer)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static booleanaccessInstanceVariablesDirectly()static MPSCNNConvolutionGradientStatealloc()static java.lang.ObjectallocWithZone(org.moe.natj.general.ptr.VoidPtr zone)static booleanautomaticallyNotifiesObserversForKey(java.lang.String key)static voidcancelPreviousPerformRequestsWithTarget(java.lang.Object aTarget)static voidcancelPreviousPerformRequestsWithTargetSelectorObject(java.lang.Object aTarget, org.moe.natj.objc.SEL aSelector, java.lang.Object anArgument)static NSArray<java.lang.String>classFallbacksForKeyedArchiver()static org.moe.natj.objc.ClassclassForKeyedUnarchiver()MPSCNNConvolutionconvolution()[@property] convolution The convolution filter that produced the state.static java.lang.StringdebugDescription_static()static java.lang.Stringdescription_static()MTLBuffergradientForBiases()[@property] gradientForBiases A buffer that contains the loss function gradients with respect to biases.MTLBuffergradientForWeights()[@property] gradientForWeights A buffer that contains the loss function gradients with respect to weights.intgradientForWeightsLayout()[@property] gradientForWeightsLayout Layout of gradient with respect to weights in gradientForWeights buffer.static longhash_static()MPSCNNConvolutionGradientStateinit()MPSCNNConvolutionGradientStateinitWithDeviceBufferSize(MTLDevice device, long bufferSize)MPSCNNConvolutionGradientStateinitWithDeviceResourceList(MTLDevice device, MPSStateResourceList resourceList)Initialize a non-temporary state to hold a number of textures and buffers The allocation of each resource will be deferred until it is needed.MPSCNNConvolutionGradientStateinitWithDeviceTextureDescriptor(MTLDevice device, MTLTextureDescriptor descriptor)MPSCNNConvolutionGradientStateinitWithResource(MTLResource resource)Create a MPSState with a non-temporary MTLResourceMPSCNNConvolutionGradientStateinitWithResources(NSArray<?> resources)Create a state object with a list of MTLResources Because MPS prefers deferred allocation of resources your application should use -initWithTextures:bufferSizes:bufferCount: whenever possible.static NSObject.Function_instanceMethodForSelector_retinstanceMethodForSelector(org.moe.natj.objc.SEL aSelector)static NSMethodSignatureinstanceMethodSignatureForSelector(org.moe.natj.objc.SEL aSelector)static booleaninstancesRespondToSelector(org.moe.natj.objc.SEL aSelector)static booleanisSubclassOfClass(org.moe.natj.objc.Class aClass)static NSSet<java.lang.String>keyPathsForValuesAffectingValueForKey(java.lang.String key)static java.lang.Objectnew_objc()static booleanresolveClassMethod(org.moe.natj.objc.SEL sel)static booleanresolveInstanceMethod(org.moe.natj.objc.SEL sel)static voidsetVersion_static(long aVersion)longsourceHeight()The height of the source image passed to MPSCNNConvolution encode call.longsourceWidth()The width of the source image passed to MPSCNNConvolution encode call.static org.moe.natj.objc.Classsuperclass_static()static java.lang.ObjecttemporaryStateWithCommandBuffer(MTLCommandBuffer cmdBuf)static java.lang.ObjecttemporaryStateWithCommandBufferBufferSize(MTLCommandBuffer cmdBuf, long bufferSize)static java.lang.ObjecttemporaryStateWithCommandBufferResourceList(MTLCommandBuffer commandBuffer, MPSStateResourceList resourceList)static java.lang.ObjecttemporaryStateWithCommandBufferTextureDescriptor(MTLCommandBuffer cmdBuf, MTLTextureDescriptor descriptor)static longversion_static()-
Methods inherited from class apple.metalperformanceshaders.MPSState
bufferSizeAtIndex, destinationImageDescriptorForSourceImagesSourceStatesForKernelSuggestedDescriptor, isTemporary, label, readCount, resource, resourceAtIndexAllocateMemory, resourceCount, resourceSize, resourceTypeAtIndex, setLabel, setReadCount, synchronizeOnCommandBuffer, textureInfoAtIndex
-
Methods inherited from class apple.NSObject
accessibilityActivate, accessibilityActivationPoint, accessibilityAssistiveTechnologyFocusedIdentifiers, accessibilityAttributedHint, accessibilityAttributedLabel, accessibilityAttributedUserInputLabels, accessibilityAttributedValue, accessibilityContainerType, accessibilityCustomActions, accessibilityCustomRotors, accessibilityDecrement, accessibilityDragSourceDescriptors, accessibilityDropPointDescriptors, accessibilityElementAtIndex, accessibilityElementCount, accessibilityElementDidBecomeFocused, accessibilityElementDidLoseFocus, accessibilityElementIsFocused, accessibilityElements, accessibilityElementsHidden, accessibilityFrame, accessibilityHint, accessibilityIncrement, accessibilityLabel, accessibilityLanguage, accessibilityNavigationStyle, accessibilityPath, accessibilityPerformEscape, accessibilityPerformMagicTap, accessibilityRespondsToUserInteraction, accessibilityScroll, accessibilityTextualContext, accessibilityTraits, accessibilityUserInputLabels, accessibilityValue, accessibilityViewIsModal, addObserverForKeyPathOptionsContext, attemptRecoveryFromErrorOptionIndex, attemptRecoveryFromErrorOptionIndexDelegateDidRecoverSelectorContextInfo, autoContentAccessingProxy, awakeAfterUsingCoder, awakeFromNib, class_objc, classForCoder, classForKeyedArchiver, copy, dealloc, debugDescription, description, dictionaryWithValuesForKeys, didChangeValueForKey, didChangeValueForKeyWithSetMutationUsingObjects, didChangeValuesAtIndexesForKey, doesNotRecognizeSelector, fileManagerShouldProceedAfterError, fileManagerWillProcessPath, finalize_objc, forwardingTargetForSelector, forwardInvocation, hash, indexOfAccessibilityElement, isAccessibilityElement, isEqual, isKindOfClass, isMemberOfClass, isProxy, methodForSelector, methodSignatureForSelector, mutableArrayValueForKey, mutableArrayValueForKeyPath, mutableCopy, mutableOrderedSetValueForKey, mutableOrderedSetValueForKeyPath, mutableSetValueForKey, mutableSetValueForKeyPath, observationInfo, observeValueForKeyPathOfObjectChangeContext, performSelector, performSelectorInBackgroundWithObject, performSelectorOnMainThreadWithObjectWaitUntilDone, performSelectorOnMainThreadWithObjectWaitUntilDoneModes, performSelectorOnThreadWithObjectWaitUntilDone, performSelectorOnThreadWithObjectWaitUntilDoneModes, performSelectorWithObject, performSelectorWithObjectAfterDelay, performSelectorWithObjectAfterDelayInModes, performSelectorWithObjectWithObject, prepareForInterfaceBuilder, provideImageDataBytesPerRowOrigin_Size_UserInfo, removeObserverForKeyPath, removeObserverForKeyPathContext, replacementObjectForCoder, replacementObjectForKeyedArchiver, respondsToSelector, self, setAccessibilityActivationPoint, setAccessibilityAttributedHint, setAccessibilityAttributedLabel, setAccessibilityAttributedUserInputLabels, setAccessibilityAttributedValue, setAccessibilityContainerType, setAccessibilityCustomActions, setAccessibilityCustomRotors, setAccessibilityDragSourceDescriptors, setAccessibilityDropPointDescriptors, setAccessibilityElements, setAccessibilityElementsHidden, setAccessibilityFrame, setAccessibilityHint, setAccessibilityLabel, setAccessibilityLanguage, setAccessibilityNavigationStyle, setAccessibilityPath, setAccessibilityRespondsToUserInteraction, setAccessibilityTextualContext, setAccessibilityTraits, setAccessibilityUserInputLabels, setAccessibilityValue, setAccessibilityViewIsModal, setIsAccessibilityElement, setNilValueForKey, setObservationInfo, setShouldGroupAccessibilityChildren, setValueForKey, setValueForKeyPath, setValueForUndefinedKey, setValuesForKeysWithDictionary, shouldGroupAccessibilityChildren, superclass, validateValueForKeyError, validateValueForKeyPathError, valueForKey, valueForKeyPath, valueForUndefinedKey, willChangeValueForKey, willChangeValueForKeyWithSetMutationUsingObjects, willChangeValuesAtIndexesForKey
-
-
-
-
Method Detail
-
accessInstanceVariablesDirectly
public static boolean accessInstanceVariablesDirectly()
-
alloc
public static MPSCNNConvolutionGradientState alloc()
-
allocWithZone
public static java.lang.Object allocWithZone(org.moe.natj.general.ptr.VoidPtr zone)
-
automaticallyNotifiesObserversForKey
public static boolean automaticallyNotifiesObserversForKey(java.lang.String key)
-
cancelPreviousPerformRequestsWithTarget
public static void cancelPreviousPerformRequestsWithTarget(java.lang.Object aTarget)
-
cancelPreviousPerformRequestsWithTargetSelectorObject
public static void cancelPreviousPerformRequestsWithTargetSelectorObject(java.lang.Object aTarget, org.moe.natj.objc.SEL aSelector, java.lang.Object anArgument)
-
classFallbacksForKeyedArchiver
public static NSArray<java.lang.String> classFallbacksForKeyedArchiver()
-
classForKeyedUnarchiver
public static org.moe.natj.objc.Class classForKeyedUnarchiver()
-
convolution
public MPSCNNConvolution convolution()
[@property] convolution The convolution filter that produced the state. For child MPSCNNConvolutionTrasposeGradientState object, convolution below refers to MPSCNNConvolution object that produced MPSCNNConvolutionGradientState object which was used to create MPSCNNConvolutionTransposeGradientState object. See resultStateForSourceImage:sourceStates method of MPSCNNConvolutionTranspose below.
-
debugDescription_static
public static java.lang.String debugDescription_static()
-
description_static
public static java.lang.String description_static()
-
gradientForBiases
public MTLBuffer gradientForBiases()
[@property] gradientForBiases A buffer that contains the loss function gradients with respect to biases.
-
gradientForWeights
public MTLBuffer gradientForWeights()
[@property] gradientForWeights A buffer that contains the loss function gradients with respect to weights. Each value in the buffer is a float. The layout of the gradients with respect to the weights is the same as the weights layout provided by data source i.e. it can be interpreted as 4D array gradientForWeights[outputFeatureChannels][kernelHeight][kernelWidth][inputFeatureChannels/groups] For depthwise convolution it will be (since we only support channel multiplier of 1 currently) gradientForWeights[outputFeatureChannels][kernelHeight][kernelWidth]
-
gradientForWeightsLayout
public int gradientForWeightsLayout()
[@property] gradientForWeightsLayout Layout of gradient with respect to weights in gradientForWeights buffer. Currently only MPSCNNConvolutionWeightsLayoutOHWI is supported.
-
hash_static
public static long hash_static()
-
init
public MPSCNNConvolutionGradientState init()
- Overrides:
initin classMPSNNGradientState
-
initWithDeviceBufferSize
public MPSCNNConvolutionGradientState initWithDeviceBufferSize(MTLDevice device, long bufferSize)
- Overrides:
initWithDeviceBufferSizein classMPSNNGradientState
-
initWithDeviceResourceList
public MPSCNNConvolutionGradientState initWithDeviceResourceList(MTLDevice device, MPSStateResourceList resourceList)
Description copied from class:MPSStateInitialize a non-temporary state to hold a number of textures and buffers The allocation of each resource will be deferred until it is needed. This occurs when -resource or -resourceAtIndex: is called.- Overrides:
initWithDeviceResourceListin classMPSNNGradientStateresourceList- The list of resources to create.
-
initWithDeviceTextureDescriptor
public MPSCNNConvolutionGradientState initWithDeviceTextureDescriptor(MTLDevice device, MTLTextureDescriptor descriptor)
- Overrides:
initWithDeviceTextureDescriptorin classMPSNNGradientState
-
initWithResource
public MPSCNNConvolutionGradientState initWithResource(MTLResource resource)
Description copied from class:MPSStateCreate a MPSState with a non-temporary MTLResource- Overrides:
initWithResourcein classMPSNNGradientState- Parameters:
resource- A MTLBuffer or MTLTexture. May be nil.
-
initWithResources
public MPSCNNConvolutionGradientState initWithResources(NSArray<?> resources)
Description copied from class:MPSStateCreate a state object with a list of MTLResources Because MPS prefers deferred allocation of resources your application should use -initWithTextures:bufferSizes:bufferCount: whenever possible. This method is useful for cases when the MTLResources must be initialized by the CPU.- Overrides:
initWithResourcesin classMPSNNGradientState
-
instanceMethodForSelector
public static NSObject.Function_instanceMethodForSelector_ret instanceMethodForSelector(org.moe.natj.objc.SEL aSelector)
-
instanceMethodSignatureForSelector
public static NSMethodSignature instanceMethodSignatureForSelector(org.moe.natj.objc.SEL aSelector)
-
instancesRespondToSelector
public static boolean instancesRespondToSelector(org.moe.natj.objc.SEL aSelector)
-
isSubclassOfClass
public static boolean isSubclassOfClass(org.moe.natj.objc.Class aClass)
-
keyPathsForValuesAffectingValueForKey
public static NSSet<java.lang.String> keyPathsForValuesAffectingValueForKey(java.lang.String key)
-
new_objc
public static java.lang.Object new_objc()
-
resolveClassMethod
public static boolean resolveClassMethod(org.moe.natj.objc.SEL sel)
-
resolveInstanceMethod
public static boolean resolveInstanceMethod(org.moe.natj.objc.SEL sel)
-
setVersion_static
public static void setVersion_static(long aVersion)
-
sourceHeight
public long sourceHeight()
Description copied from interface:MPSImageSizeEncodingStateThe height of the source image passed to MPSCNNConvolution encode call.- Specified by:
sourceHeightin interfaceMPSImageSizeEncodingState
-
sourceWidth
public long sourceWidth()
Description copied from interface:MPSImageSizeEncodingStateThe width of the source image passed to MPSCNNConvolution encode call.- Specified by:
sourceWidthin interfaceMPSImageSizeEncodingState
-
superclass_static
public static org.moe.natj.objc.Class superclass_static()
-
temporaryStateWithCommandBuffer
public static java.lang.Object temporaryStateWithCommandBuffer(MTLCommandBuffer cmdBuf)
-
temporaryStateWithCommandBufferBufferSize
public static java.lang.Object temporaryStateWithCommandBufferBufferSize(MTLCommandBuffer cmdBuf, long bufferSize)
-
temporaryStateWithCommandBufferResourceList
public static java.lang.Object temporaryStateWithCommandBufferResourceList(MTLCommandBuffer commandBuffer, MPSStateResourceList resourceList)
-
temporaryStateWithCommandBufferTextureDescriptor
public static java.lang.Object temporaryStateWithCommandBufferTextureDescriptor(MTLCommandBuffer cmdBuf, MTLTextureDescriptor descriptor)
-
version_static
public static long version_static()
-
-