manpagez: man pages & more
man MPSNNGraph(3)
Home | html | info | man
MPSNNGraph(3)          MetalPerformanceShaders.framework         MPSNNGraph(3)




NAME

       MPSNNGraph


SYNOPSIS

       #import <MPSNNGraph.h>

       Inherits MPSKernel, <NSCopying>, and <NSSecureCoding>.

   Instance Methods
       (nullable instancetype) - initWithDevice:resultImage:
       (nullable instancetype) - initWithCoder:device:
       (nonnull instancetype) - initWithDevice:
       (MPSImage *__nonnull) -
           encodeToCommandBuffer:sourceImages:sourceStates:intermediateImages:destinationStates:
       (MPSImage *__nonnull) - encodeToCommandBuffer:sourceImages:
       (MPSImage *__nonnull) - executeAsyncWithSourceImages:completionHandler:

   Properties
       NSArray< id< MPSHandle > > * sourceImageHandles
       NSArray< id< MPSHandle > > * sourceStateHandles
       NSArray< id< MPSHandle > > * intermediateImageHandles
       NSArray< id< MPSHandle > > * resultStateHandles
       id< MPSHandle > resultHandle
       BOOL outputStateIsTemporary
       id< MPSImageAllocator > destinationImageAllocator

   Additional Inherited Members

Detailed Description

       Optimized representation of a graph of MPSNNImageNodes and
       MPSNNFilterNodes  Once you have prepared a graph of MPSNNImageNodes and
       MPSNNFilterNodes (and if needed MPSNNStateNodes), you may initialize a
       MPSNNGraph using the MPSNNImageNode that you wish to appear as the
       result. The MPSNNGraph object will introspect the graph representation
       and determine which nodes are needed for inputs, and which nodes are
       produced as output state (if any). Nodes which are not needed to
       calculate the result image node are ignored. Some nodes may be
       internally concatenated with other nodes for better performance.

       Note: the MPSNNImageNode that you choose as the result node may be
       interior to a graph. This feature is provided as a means to examine
       intermediate computations in the full graph for debugging purposes.

       During MPSNNGraph construction, the graph attached to the result node
       will be parsed and reduced to an optimized representation. This
       representation may be saved using the NSSecureCoding protocol for later
       recall.

       When decoding a MPSNNGraph using a NSCoder, it will be created against
       the system default MTLDevice. If you would like to set the MTLDevice,
       your NSCoder should conform to the <MPSDeviceProvider> protocol.

       You may find it helpful to set MPSKernelOptionsVerbose on the graph
       when debugging.


Method Documentation

   - (MPSImage * __nonnull) encodeToCommandBuffer: (nonnull id<
       MTLCommandBuffer >) commandBuffer(NSArray< MPSImage * > *__nonnull)
       sourceImages
       Encode the graph to a MTLCommandBuffer

       IMPORTANT: Please use [MTLCommandBuffer addCompletedHandler:] to
       determine when this work is done. Use CPU time that would have been
       spent waiting for the GPU to encode the next command buffer and commit
       it too. That way, the work for the next command buffer is ready to go
       the moment the GPU is done. This will keep the GPU busy and running at
       top speed.

       Those who ignore this advice and use [MTLCommandBuffer
       waitUntilCompleted] instead will likely cause their code to slow down
       by a factor of two or more. The CPU clock spins down while it waits for
       the GPU. When the GPU completes, the CPU runs slowly for a while until
       it spins up. The GPU has to wait for the CPU to encode more work (at
       low clock), giving it plenty of time to spin its own clock down. In
       typical CNN graph usage, neither may ever reach maximum clock
       frequency, causing slow down far beyond what otherwise would be
       expected from simple failure to schedule CPU and GPU work concurrently.
       Regrattably, it is probable that every performance benchmark you see on
       the net will be based on [MTLCommandBuffer waitUntilCompleted].

       Parameters:
           commandBuffer The command buffer
           sourceImages A list of MPSImages to use as the source images for
           the graph. These should be in the same order as the list returned
           from MPSNNGraph.sourceImageHandles.

       Returns:
           A MPSImage or MPSTemporaryImage allocated per the
           destinationImageAllocator containing the output of the graph. It
           will be automatically released when commandBuffer completes.



   - (MPSImage * __nonnull) encodeToCommandBuffer: (nonnull id<
       MTLCommandBuffer >) commandBuffer(NSArray< MPSImage * > *__nonnull)
       sourceImages(NSArray< MPSState * > *__nullable)
       sourceStates(NSMutableArray< MPSImage * > *__nullable)
       intermediateImages(NSMutableArray< MPSState * > *__nullable)
       destinationStates
       Encode the graph to a MTLCommandBuffer

       Parameters:
           commandBuffer The command buffer
           sourceImages A list of MPSImages to use as the source images for
           the graph. These should be in the same order as the list returned
           from MPSNNGraph.sourceImageHandles. The images may be image arrays.
           Typically, this is only one or two images such as a .JPG decoded
           into a MPSImage*. If the sourceImages are MPSTemporaryImages, the
           graph will decrement the readCount by 1, even if the graph actually
           reads an image multiple times.
           sourceStates A list of MPSState objects to use as state for a
           graph. These should be in the same order as the list returned from
           MPSNNGraph.sourceStateHandles. May be nil, if there is no source
           state. If the sourceStates are temporary, the graph will decrement
           the readCount by 1, even if the graph actually reads the state
           multiple times.
           intermediateImages An optional NSMutableArray to receive any
           MPSImage objects exported as part of its operation. These are only
           the images that were tagged with MPSNNImageNode.exportFromGraph =
           YES. The identity of the states is given by -resultStateHandles. If
           temporary, each intermediateImage will have a readCount of 1. If
           the result was tagged exportFromGraph = YES, it will be here too,
           with a readCount of 2.
           destinationStates An optional NSMutableArray to receive any
           MPSState objects created as part of its operation. The identity of
           the states is given by -resultStateHandles.

       Returns:
           A MPSImage or MPSTemporaryImage allocated per the
           destinationImageAllocator containing the output of the graph. It
           will be automatically released when commandBuffer completes.



   - (MPSImage * __nonnull) executeAsyncWithSourceImages: (NSArray< MPSImage *
       > *__nonnull) sourceImages(MPSNNGraphCompletionHandler __nonnull)
       handler
       Convenience method to execute a graph without having to manage many
       Metal details  This function will synchronously encode the graph on a
       private command buffer, commit it to a MPS internal command queue and
       return. The GPU will start working. When the GPU is done, the
       completion handler will be called. You should use the intervening time
       to encode other work for execution on the GPU, so that the GPU stays
       busy and doesn't clock down.

       The work will be performed on the MTLDevice that hosts the source
       images.

       This is a convenience API. There are a few situations it does not
       handle optimally. These may be better handled using
       [encodeToCommandBuffer:sourceImages:]. Specifically:

       o     If the graph needs to be run multiple times for different images,
             it would be better to encode the graph multiple times on the same
             command buffer using [encodeToCommandBuffer:sourceImages:]  This
             will allow the multiple graphs to share memory for intermediate
             storage, dramatically reducing memory usage.

       o     If preprocessing or post-processing of the MPSImage is required,
             such as resizing or normalization outside of a convolution, it would
             be better to encode those things on the same command buffer.
             Memory may be saved here too for intermediate storage. (MPSTemporaryImage
             lifetime does not span multiple command buffers.)



       Parameters:
           sourceImages A list of MPSImages to use as the source images for
           the graph. These should be in the same order as the list returned
           from MPSNNGraph.sourceImageHandles. They should be allocated
           against the same MTLDevice. There must be at least one source
           image. Note: this array is intended to handle the case where
           multiple input images are required to generate a single graph
           result. That is, the graph itself has multiple inputs. If you need
           to execute the graph multiple times, then call this API multiple
           times, or better yet use [encodeToCommandBuffer:sourceImages:]
           multiple times. (See discussion)
           handler A block to receive any errors generated. This block may run
           on any thread and may be called before this method returns. The
           image, if any, passed to this callback is the same image as that
           returned from the left hand side.

       Returns:
           A MPSImage to receive the result. The data in the image will not be
           valid until the completionHandler is called.



   - (nullable instancetype) initWithCoder: (NSCoder *__nonnull)
       aDecoder(nonnull id< MTLDevice >) device
       NSSecureCoding compatability  While the standard
       NSSecureCoding/NSCoding method -initWithCoder: should work, since the
       file can't know which device your data is allocated on, we have to
       guess and may guess incorrectly. To avoid that problem, use
       initWithCoder:device instead.

       Parameters:
           aDecoder The NSCoder subclass with your serialized MPSKernel
           device The MTLDevice on which to make the MPSKernel

       Returns:
           A new MPSKernel object, or nil if failure.



       Reimplemented from MPSKernel.

   - (nonnull instancetype) initWithDevice: (__nonnull id< MTLDevice >) device
       Use initWithDevice:resultImage: instead

   - (nullable instancetype) initWithDevice: (nonnull id< MTLDevice >)
       device(MPSNNImageNode *__nonnull) resultImage
       Initialize a MPSNNGraph object on a device starting with resultImage
       working backward  The MPSNNGraph constructor will start with the
       indicated result image, and look to see what MPSNNFilterNode produced
       it, then look to its dependencies and so forth to reveal the subsection
       of the graph necessary to compute the image.

       Parameters:
           device The MTLDevice on which to run the graph
           resultImage The MPSNNImageNode corresponding to the last image in
           the graph. This is the image that will be returned. Note: the
           imageAllocator for this node is ignored and the
           MPSNNGraph.destinationImageAllocator is used for this node instead.

       Returns:
           A new MPSNNGraph.




Property Documentation

   - (id<MPSImageAllocator>) destinationImageAllocator [read],  [write],
       [nonatomic],  [retain]
       Method to allocate the result image from -encodeToCommandBuffer...
       This property overrides the allocator for the final result image in the
       graph. Default: defaultAllocator (MPSImage)

   - (NSArray<id <MPSHandle> >*) intermediateImageHandles [read],
       [nonatomic],  [copy]
       Get a list of identifiers for intermediate images objects produced by
       the graph

   - (BOOL) outputStateIsTemporary [read],  [write],  [nonatomic],  [assign]
       Should MPSState objects produced by -encodeToCommandBuffer... be
       temporary objects.  See MPSState description. Default: YES

   - (id<MPSHandle>) resultHandle [read],  [nonatomic],  [assign]
       Get a handle for the graph result image

   - (NSArray<id <MPSHandle> >*) resultStateHandles [read],  [nonatomic],
       [copy]
       Get a list of identifiers for result state objects produced by the
       graph  Not guaranteed to be in the same order as sourceStateHandles

   - (NSArray<id <MPSHandle> >*) sourceImageHandles [read],  [nonatomic],
       [copy]
       Get a list of identifiers for source images needed to calculate the
       result image

   - (NSArray<id <MPSHandle> >*) sourceStateHandles [read],  [nonatomic],
       [copy]
       Get a list of identifiers for source state objects needed to calculate
       the result image  Not guaranteed to be in the same order as
       resultStateHandles



Author

       Generated automatically by Doxygen for
       MetalPerformanceShaders.framework from the source code.





Version MetalPerformanceShaders-Thu2Jul 13 2017                  MPSNNGraph(3)


Mac OS X 10.12.6 - Generated Tue Oct 31 16:17:49 CDT 2017
© manpagez.com 2000-2025
Individual documents may contain additional copyright information.