MIOpen Porting Guide#

The key differences between MIOpen and cuDNN:#

  • MIOpen only supports 4-D tensors in the NCHW storage format. This means all the “*Nd*” APIs in cuDNN do not have a corresponding API in MIOpen.

  • MIOpen only supports float(fp32) data-type.

  • MIOpen only supports 2D Convolutions and 2D Pooling.

  • Calling miopenFindConvolution*Algorithm() is mandatory before calling any Convolution API.

  • Typical calling sequence for Convolution APIs for MIOpen is:

    • miopenConvolution*GetWorkSpaceSize() // returns the workspace size required by Find()

    • miopenFindConvolution*Algorithm() // returns performance info about various algorithms

    • miopenConvolution*()

  • MIOpen does not support Preferences for convolutions.

  • MIOpen does not support Softmax modes. MIOpen implements the SOFTMAX_MODE_CHANNEL flavor.

  • MIOpen does not support Transform-Tensor, Dropout, RNNs, and Divisive Normalization.





Helpful MIOpen Environment Variables#

MIOPEN_ENABLE_LOGGING=1 – log all the MIOpen APIs called including the parameters passed to those APIs.
MIOPEN_DEBUG_AMD_ROCM_PRECOMPILED_BINARIES=0 – disable Winograd convolution algorithm.
MIOPEN_DEBUG_GCN_ASM_KERNELS=0 – disable hand-tuned asm. kernels for Direct convolution algorithm. Fall-back to kernels written in high-level language.
MIOPEN_DEBUG_CONV_FFT=0 – disable FFT convolution algorithm.
MIOPEN_DEBUG_CONV_DIRECT=0 – disable Direct convolution algorithm.





API differences#

Operation

cuDNN API

MIOpen API

cudnnStatus_t 
cudnnCreate(
    cudnnHandle_t *handle)
miopenStatus_t 
miopenCreate(
    miopenHandle_t *handle)
cudnnStatus_t 
cudnnDestroy(
    cudnnHandle_t handle)
miopenStatus_t 
miopenDestroy(
    miopenHandle_t handle)
Handle
cudnnStatus_t
cudnnSetStream(
    cudnnHandle_t handle, 
    cudaStream_t streamId)
miopenStatus_t
miopenSetStream(
    miopenHandle_t handle, 
    miopenAcceleratorQueue_t streamID)
cudnnStatus_t 
cudnnGetStream(
    cudnnHandle_t handle, 
    cudaStream_t *streamId)
miopenStatus_t
miopenGetStream(
    miopenHandle_t handle, 
    miopenAcceleratorQueue_t  *streamID)
cudnnStatus_t 
cudnnCreateTensorDescriptor(
    cudnnTensorDescriptor_t *tensorDesc)
miopenStatus_t 
miopenCreateTensorDescriptor(
    miopenTensorDescriptor_t  
    *tensorDesc)
cudnnStatus_t 
cudnnSetTensor4dDescriptor(
    cudnnTensorDescriptor_t tensorDesc, 
    cudnnTensorFormat_t format, 
    cudnnDataType_t dataType, 
    int n, 
    int c, 
    int h, 
    int w)
// Only `NCHW` format is supported</font> 
miopenStatus_t miopenSet4dTensorDescriptor(
    miopenTensorDescriptor_t tensorDesc, 
    miopenDataType_t dataType, 
    int n, 
    int c, 
    int h, 
    int w)
cudnnStatus_t 
cudnnGetTensor4dDescriptor(
    cudnnTensorDescriptor_t tensorDesc, 
    cudnnDataType_t *dataType, 
    int *n, 
    int *c, 
    int *h, 
    int *w, 
    int *nStride, 
    int *cStride, 
    int *hStride, 
    int *wStride)
miopenStatus_t 
miopenGet4dTensorDescriptor( 
    miopenTensorDescriptor_t tensorDesc, 
    miopenDataType_t *dataType, 
    int *n, 
    int *c, 
    int *h, 
    int *w, 
    int *nStride, 
    int *cStride, 
    int *hStride, 
    int *wStride)
Tensor
cudnnStatus_t 
cudnnDestroyTensorDescriptor(
    cudnnTensorDescriptor_t tensorDesc)
miopenStatus_t
miopenDestroyTensorDescriptor(
    miopenTensorDescriptor_t tensorDesc)
cudnnStatus_t 
cudnnAddTensor(
    cudnnHandle_t handle, 
    const void *alpha, 
    const cudnnTensorDescriptor_t aDesc, 
    const void *A, 
    const void *beta, 
    const cudnnTensorDescriptor_t cDesc, 
    void *C)
//Set tensorOp to miopenOpTensorAdd 
miopenStatus_t 
miopenOpTensor(
    miopenHandle_t handle, 
    miopenTensorOp_t tensorOp, 
    const void *alpha1, 
    constmiopenTensorDescriptor_t  aDesc, 
    const void *A, 
    const void *alpha2, 
    const miopenTensorDescriptor_t bDesc, 
    const void *B, 
    const void *beta, 
    const miopenTensorDescriptor_t  cDesc, 
    void *C) 
// For Forward Bias use 
// miopenConvolutionForwardBias.
cudnnStatus_t 
cudnnOpTensor(
    cudnnHandle_t handle, 
    const cudnnOpTensorDescriptor_t opTensorDesc, 
    const void *alpha1, 
    const cudnnTensorDescriptor_t aDesc, 
    const void *A, 
    const void *alpha2, 
    const cudnnTensorDescriptor_t bDesc, 
    const void *B, 
    const void *beta, 
    const cudnnTensorDescriptor_t cDesc, 
    void *C)
miopenStatus_t 
miopenOpTensor(
    miopenHandle_t handle, 
    miopenTensorOp_t tensorOp, 
    const void *alpha1, 
    const miopenTensorDescriptor_t aDesc, 
    const void *A, const void *alpha2, 
    const miopenTensorDescriptor_t  bDesc, 
    const void *B, 
    const void *beta, 
    const miopenTensorDescriptor_t  cDesc, 
    void *C)
cudnnStatus_t 
cudnnSetTensor(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y, 
    const void *valuePtr)
miopenStatus_t 
miopenSetTensor(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    const void *alpha)
cudnnStatus_t 
cudnnScaleTensor(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y, 
    const void *alpha)
miopenStatus_t 
miopenScaleTensor(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    const void *alpha)
Filter
cudnnStatus_t 
cudnnCreateFilterDescriptor(
    cudnnFilterDescriptor_t *filterDesc)
// All *FilterDescriptor* APIs are substituted by 
// the respective TensorDescriptor APIs.
cudnnStatus_t 
cudnnCreateConvolutionDescriptor(
    cudnnConvolutionDescriptor_t *convDesc)
miopenStatus_t 
miopenCreateConvolutionDescriptor(
    miopenConvolutionDescriptor_t *convDesc)
cudnnStatus_t 
cudnnSetConvolution2dDescriptor(
    cudnnConvolutionDescriptor_t convDesc, 
    int pad_h, 
    int pad_w, 
    int u, 
    int v, 
    int upscalex, 
    int upscaley, 
    cudnnConvolutionMode_t mode)
miopenStatus_t 
miopenInitConvolutionDescriptor(
    miopenConvolutionDescriptor_t convDesc, 
    miopenConvolutionMode_t mode, 
    int pad_h, 
    int pad_w,  
    int u, 
    int v, 
    int upscalex, 
    int upscaley)
cudnnStatus_t 
cudnnGetConvolution2dDescriptor(
    const cudnnConvolutionDescriptor_t convDesc, 
    int *pad_h, 
    int *pad_y, 
    int *u, 
    int *v, 
    int *upscalex, 
    int *upscaley, 
    cudnnConvolutionMode_t *mode)
miopenStatus_t 
miopenGetConvolutionDescriptor(
    miopenConvolutionDescriptor_t convDesc, 
    miopenConvolutionMode_t *mode, 
    int *pad_h,
    int *pad_y, 
    int *u, 
    int *v, 
    int *upscalex, 
    int *upscaley)
cudnnStatus_t 
cudnnGetConvolution2dForwardOutputDim(
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t inputTensorDesc, 
    const cudnnFilterDescriptor_t filterDesc, 
    int *n, 
    int *c, 
    int *h, 
    int *w)
miopenStatus_t 
miopenGetConvolutionForwardOutputDim(
    miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t inputTensorDesc, 
    const miopenTensorDescriptor_t filterDesc, 
    int *n, 
    int *c, 
    int *h, 
    int *w)
cudnnStatus_t 
cudnnDestroyConvolutionDescriptor(
    cudnnConvolutionDescriptor_t convDesc)
miopenStatus_t 
miopenDestroyConvolutionDescriptor(
    miopenConvolutionDescriptor_t convDesc)
Convolution
cudnnStatus_t 
cudnnFindConvolutionForwardAlgorithm(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const cudnnFilterDescriptor_t wDesc,
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t yDesc, 
    const int requestedAlgoCount, 
    int *returnedAlgoCount,
    cudnnConvolutionFwdAlgoPerf_t *perfResults)
      
cudnnStatus_t 
cudnnFindConvolutionForwardAlgorithmEx(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnFilterDescriptor_t wDesc, 
    const void *w, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y, 
    const int requestedAlgoCount, 
    int *returnedAlgoCount, 
    cudnnConvolutionFwdAlgoPerf_t *perfResults, 
    void *workSpace, 
    size_t workSpaceSizeInBytes) 
cudnnStatus_t 
cudnnGetConvolutionForwardAlgorithm(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const cudnnFilterDescriptor_t wDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t yDesc, 
    cudnnConvolutionFwdPreference_t preference, 
    size_t memoryLimitInBytes, 
    cudnnConvolutionFwdAlgo_t *algo)
// FindConvolution() is mandatory.
// Allocate workspace prior to running this API. 
// A table with times and memory requirements 
// for different algorithms is returned. 
// Users can choose the top-most algorithm if 
// they only care about the fastest algorithm.
miopenStatus_t 
miopenFindConvolutionForwardAlgorithm(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x,
    const miopenTensorDescriptor_t wDesc, 
    const void *w, 
    const miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    const int requestAlgoCount, 
    int *returnedAlgoCount, 
    miopenConvAlgoPerf_t *perfResults, 
    void *workSpace, 
    size_t workSpaceSize, 
    bool exhaustiveSearch)
cudnnStatus_t 
cudnnGetConvolutionForwardWorkspaceSize(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const cudnnFilterDescriptor_t wDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t yDesc, 
    cudnnConvolutionFwdAlgo_t algo, 
    size_t *sizeInBytes)
miopenStatus_t 
miopenConvolutionForwardGetWorkSpaceSize(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t wDesc, 
    const miopenTensorDescriptor_t xDesc, 
    const miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t yDesc, 
    size_t *workSpaceSize)
cudnnStatus_t 
cudnnConvolutionForward(
    cudnnHandle_t handle, 
    const void *alpha, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnFilterDescriptor_t wDesc, 
    const void *w, 
    const cudnnConvolutionDescriptor_t convDesc, 
    cudnnConvolutionFwdAlgo_t algo, 
    void *workSpace, 
    size_t workSpaceSizeInBytes, 
    const void *beta, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y)
miopenStatus_t 
miopenConvolutionForward(
    miopenHandle_t handle, 
    const void *alpha, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const miopenTensorDescriptor_t wDesc, 
    const void *w, 
    const miopenConvolutionDescriptor_t convDesc, 
    miopenConvFwdAlgorithm_t algo, 
    const void *beta, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    void *workSpace, 
    size_t workSpaceSize)
cudnnStatus_t 
cudnnConvolutionBackwardBias(
    cudnnHandle_t handle,
    const void *alpha, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const void *beta, 
    const cudnnTensorDescriptor_t dbDesc, 
    void *db)
miopenStatus_t 
miopenConvolutionBackwardBias(
    miopenHandle_t handle, 
    const void *alpha, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const void *beta, 
    const miopenTensorDescriptor_t dbDesc, 
    void *db)
cudnnStatus_t 
cudnnFindConvolutionBackwardFilterAlgorithm(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const cudnnTensorDescriptor_t dyDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnFilterDescriptor_t dwDesc, 
    const int requestedAlgoCount, 
    int *returnedAlgoCount, 
    cudnnConvolutionBwdFilterAlgoPerf_t *perfResults)  
cudnnStatus_t 
cudnnFindConvolutionBackwardFilterAlgorithmEx(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *y, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnFilterDescriptor_t dwDesc, 
    void *dw, 
    const int requestedAlgoCount, 
    int *returnedAlgoCount, 
    cudnnConvolutionBwdFilterAlgoPerf_t *perfResults, 
    void *workSpace, 
    size_t workSpaceSizeInBytes) 
   
cudnnStatus_t 
cudnnGetConvolutionBackwardFilterAlgorithm(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const cudnnTensorDescriptor_t dyDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnFilterDescriptor_t dwDesc, 
    cudnnConvolutionBwdFilterPreference_t preference, 
    size_t memoryLimitInBytes, 
    cudnnConvolutionBwdFilterAlgo_t *algo)
// FindConvolution() is mandatory.
// Allocate workspace prior to running this API. 
// A table with times and memory requirements 
// for different algorithms is returned. 
// Users can choose the top-most algorithm if 
// they only care about the fastest algorithm.
miopenStatus_t 
miopenFindConvolutionBackwardWeightsAlgorithm(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t dwDesc, 
    void *dw, 
    const int requestAlgoCount, 
    int *returnedAlgoCount, 
    miopenConvAlgoPerf_t *perfResults, 
    void *workSpace, 
    size_t workSpaceSize, 
    bool exhaustiveSearch)
cudnnStatus_t 
cudnnGetConvolutionBackwardFilterWorkspaceSize(
    cudnnHandle_t handle, 
    const cudnnTensorDescriptor_t xDesc, 
    const cudnnTensorDescriptor_t dyDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnFilterDescriptor_t gradDesc, 
    cudnnConvolutionBwdFilterAlgo_t algo, 
    size_t *sizeInBytes)
miopenStatus_t 
miopenConvolutionBackwardWeightsGetWorkSpaceSize(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t dyDesc, 
    const miopenTensorDescriptor_t xDesc, 
    const miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t dwDesc, 
    size_t *workSpaceSize)
cudnnStatus_t 
cudnnConvolutionBackwardFilter(
    cudnnHandle_t handle, 
    const void *alpha, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnConvolutionDescriptor_t convDesc, 
    cudnnConvolutionBwdFilterAlgo_t algo, 
    void *workSpace, 
    size_t workSpaceSizeInBytes, 
    const void *beta, 
    const cudnnFilterDescriptor_t dwDesc, 
    void *dw)
miopenStatus_t 
miopenConvolutionBackwardWeights(
    miopenHandle_t handle, 
    const void *alpha, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const miopenConvolutionDescriptor_t convDesc, 
    miopenConvBwdWeightsAlgorithm_t algo, 
    const void *beta, 
    const miopenTensorDescriptor_t dwDesc, 
    void *dw, 
    void *workSpace, 
    size_t workSpaceSize)
cudnnStatus_t 
cudnnGetConvolutionBackwardDataWorkspaceSize(
    cudnnHandle_t handle, 
    const cudnnFilterDescriptor_t wDesc, 
    const cudnnTensorDescriptor_t dyDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t dxDesc, 
    cudnnConvolutionBwdDataAlgo_t algo, 
    size_t *sizeInBytes)
miopenStatus_t 
miopenConvolutionBackwardDataGetWorkSpaceSize(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t dyDesc, 
    const miopenTensorDescriptor_t wDesc, 
    const miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t dxDesc, 
    size_t *workSpaceSize)
cudnnStatus_t 
cudnnFindConvolutionBackwardDataAlgorithm(
    cudnnHandle_t handle, 
    const cudnnFilterDescriptor_t wDesc, 
    const cudnnTensorDescriptor_t dyDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t dxDesc, 
    const int requestedAlgoCount, 
    int *returnedAlgoCount, 
    cudnnConvolutionBwdDataAlgoPerf_t *perfResults)
    
cudnnStatus_t 
cudnnFindConvolutionBackwardDataAlgorithmEx(
    cudnnHandle_t handle, 
    const cudnnFilterDescriptor_t wDesc, 
    const void *w, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx, 
    const int requestedAlgoCount, 
    int *returnedAlgoCount, 
    cudnnConvolutionBwdDataAlgoPerf_t *perfResults, 
    void *workSpace, 
    size_t workSpaceSizeInBytes) 
   
cudnnStatus_t 
cudnnGetConvolutionBackwardDataAlgorithm(
    cudnnHandle_t handle, 
    const cudnnFilterDescriptor_t wDesc, 
    const cudnnTensorDescriptor_t dyDesc, 
    const cudnnConvolutionDescriptor_t convDesc, 
    const cudnnTensorDescriptor_t dxDesc, 
    cudnnConvolutionBwdDataPreference_t preference, 
    size_t memoryLimitInBytes, 
    cudnnConvolutionBwdDataAlgo_t *algo)
// FindConvolution() is mandatory.
// Allocate workspace prior to running this API. 
// A table with times and memory requirements 
// for different algorithms is returned. 
// Users can choose the top-most algorithm if 
// they only care about the fastest algorithm.
miopenStatus_t 
miopenFindConvolutionBackwardDataAlgorithm(
    miopenHandle_t handle, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t wDesc, 
    const void *w, 
    const miopenConvolutionDescriptor_t convDesc, 
    const miopenTensorDescriptor_t dxDesc, 
    const void *dx, 
    const int requestAlgoCount, 
    int *returnedAlgoCount, 
    miopenConvAlgoPerf_t *perfResults, 
    void *workSpace, 
    size_t workSpaceSize, 
    bool exhaustiveSearch)
cudnnStatus_t 
cudnnConvolutionBackwardData(
    cudnnHandle_t handle, 
    const void *alpha, 
    const cudnnFilterDescriptor_t wDesc, 
    const void *w, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnConvolutionDescriptor_t convDesc, 
    cudnnConvolutionBwdDataAlgo_t algo, 
    void *workSpace, 
    size_t workSpaceSizeInBytes, 
    const void *beta, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx)
 miopenStatus_t 
 miopenConvolutionBackwardData(
    miopenHandle_t handle, 
    const void *alpha, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t wDesc, 
    const void *w, 
    const miopenConvolutionDescriptor_t convDesc, 
    miopenConvBwdDataAlgorithm_t algo, 
    const void *beta, 
    const miopenTensorDescriptor_t dxDesc, 
    void *dx, 
    void *workSpace, 
    size_t workSpaceSize)
Softmax
cudnnStatus_t 
cudnnSoftmaxForward(
    cudnnHandle_t handle, 
    cudnnSoftmaxAlgorithm_t algo, 
    cudnnSoftmaxMode_t mode, 
    const void *alpha, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y)
miopenStatus_t 
miopenSoftmaxForward(
    miopenHandle_t handle, 
    const void *alpha, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const miopenTensorDescriptor_t yDesc, 
    void *y)
cudnnStatus_t 
cudnnSoftmaxBackward(
    cudnnHandle_t handle, 
    cudnnSoftmaxAlgorithm_t algo, 
    cudnnSoftmaxMode_t mode, 
    const void *alpha, 
    const cudnnTensorDescriptor_t yDesc, 
    const void *y, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const void *beta, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx)
miopenStatus_t 
miopenSoftmaxBackward(
    miopenHandle_t handle, 
    const void *alpha, 
    const miopenTensorDescriptor_t yDesc, 
    const void *y, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const void *beta, 
    const miopenTensorDescriptor_t dxDesc, 
    void *dx)
cudnnStatus_t 
cudnnCreatePoolingDescriptor(
    cudnnPoolingDescriptor_t *poolingDesc)
miopenStatus_t 
miopenCreatePoolingDescriptor(
    miopenPoolingDescriptor_t *poolDesc)
cudnnStatus_t 
cudnnSetPooling2dDescriptor(
    cudnnPoolingDescriptor_t poolingDesc, 
    cudnnPoolingMode_t mode, 
    cudnnNanPropagation_t maxpoolingNanOpt, 
    int windowHeight, 
    int windowWidth, 
    int verticalPadding, 
    int horizontalPadding, 
    int verticalStride, 
    int horizontalStride)
miopenStatus_t 
miopenSet2dPoolingDescriptor(
    miopenPoolingDescriptor_t poolDesc, 
    miopenPoolingMode_t mode, 
    int windowHeight, 
    int windowWidth, 
    int pad_h, 
    int pad_w, 
    int u, 
    int v)
cudnnStatus_t 
cudnnGetPooling2dDescriptor(
    const cudnnPoolingDescriptor_t poolingDesc, 
    cudnnPoolingMode_t *mode, 
    cudnnNanPropagation_t *maxpoolingNanOpt, 
    int *windowHeight, 
    int *windowWidth, 
    int *verticalPadding, 
    int *horizontalPadding, 
    int *verticalStride, 
    int *horizontalStride)
miopenStatus_t 
miopenGet2dPoolingDescriptor(
    const miopenPoolingDescriptor_t poolDesc, 
    miopenPoolingMode_t *mode, 
    int *windowHeight, 
    int *windowWidth, 
    int *pad_h, 
    int *pad_w, 
    int *u, 
    int *v)
Pooling
cudnnStatus_t 
cudnnGetPooling2dForwardOutputDim(
    const cudnnPoolingDescriptor_t poolingDesc, 
    const cudnnTensorDescriptor_t inputTensorDesc, 
    int *n, 
    int *c, 
    int *h, 
    int *w)
miopenStatus_t 
miopenGetPoolingForwardOutputDim(
    const miopenPoolingDescriptor_t poolDesc, 
    const miopenTensorDescriptor_t tensorDesc, 
    int *n, 
    int *c, 
    int *h, 
    int *w)
cudnnStatus_t 
cudnnDestroyPoolingDescriptor(
    cudnnPoolingDescriptor_t poolingDesc)
miopenStatus_t 
miopenDestroyPoolingDescriptor(
    miopenPoolingDescriptor_t poolDesc)
cudnnStatus_t 
cudnnPoolingForward(
    cudnnHandle_t handle, 
    const cudnnPoolingDescriptor_t poolingDesc, 
    const void *alpha, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y)
miopenStatus_t 
miopenPoolingForward(
    miopenHandle_t handle,
    const miopenPoolingDescriptor_t poolDesc, 
    const void *alpha, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    bool do_backward, 
    void *workSpace, 
    size_t workSpaceSize)
miopenStatus_t 
miopenPoolingGetWorkSpaceSize(
    const miopenTensorDescriptor_t yDesc, 
    size_t *workSpaceSize)
cudnnStatus_t 
cudnnPoolingBackward(
    cudnnHandle_t handle, 
    const cudnnPoolingDescriptor_t poolingDesc, 
    const void *alpha, 
    const cudnnTensorDescriptor_t yDesc, 
    const void *y, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx)
miopenStatus_t 
miopenPoolingBackward(
    miopenHandle_t handle, 
    const miopenPoolingDescriptor_t poolDesc, 
    const void *alpha, 
    const miopenTensorDescriptor_t yDesc, 
    const void *y, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const miopenTensorDescriptor_t dxDesc, 
    void *dx, 
    const void *workspace)
cudnnStatus_t 
cudnnCreateActivationDescriptor(
    cudnnActivationDescriptor_t *activationDesc)
miopenStatus_t 
miopenCreateActivationDescriptor(
    miopenActivationDescriptor_t *activDesc)
cudnnStatus_t 
cudnnSetActivationDescriptor(
    cudnnActivationDescriptor_t activationDesc, 
    cudnnActivationMode_t mode, 
    cudnnNanPropagation_t reluNanOpt, 
    double reluCeiling)
miopenStatus_t 
miopenSetActivationDescriptor(
    const miopenActivationDescriptor_t activDesc, 
    miopenActivationMode_t mode, 
    double activAlpha, 
    double activBeta, 
    double activPower)
Activation
cudnnStatus_t 
cudnnGetActivationDescriptor(
    const cudnnActivationDescriptor_t activationDesc, 
    cudnnActivationMode_t *mode, 
    cudnnNanPropagation_t *reluNanOpt, 
    double *reluCeiling)
miopenStatus_t 
miopenGetActivationDescriptor(
    const miopenActivationDescriptor_t activDesc, 
    miopenActivationMode_t *mode, 
    double *activAlpha, 
    double *activBeta, 
    double *activPower)
cudnnStatus_t 
cudnnDestroyActivationDescriptor(
    cudnnActivationDescriptor_t activationDesc)
miopenStatus_t 
miopenDestroyActivationDescriptor(
    miopenActivationDescriptor_t activDesc)
cudnnStatus_t 
cudnnActivationForward(
    cudnnHandle_t handle, 
    cudnnActivationDescriptor_t activationDesc, 
    const void *alpha, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y)
miopenStatus_t 
miopenActivationForward(
    miopenHandle_t handle, 
    const miopenActivationDescriptor_t activDesc, 
    const void *alpha, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const miopenTensorDescriptor_t yDesc, 
    void *y)
cudnnStatus_t 
cudnnActivationBackward(
    cudnnHandle_t handle, 
    cudnnActivationDescriptor_t activationDesc, 
    const void *alpha, 
    const cudnnTensorDescriptor_t yDesc, 
    const void *y, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx)
miopenStatus_t 
miopenActivationBackward(
    miopenHandle_t handle, 
    const miopenActivationDescriptor_t activDesc, 
    const void *alpha, 
    const miopenTensorDescriptor_t yDesc, 
    const void *y, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const miopenTensorDescriptor_t dxDesc, 
    void *dx)
cudnnStatus_t 
cudnnCreateLRNDescriptor(
    cudnnLRNDescriptor_t *normDesc)
miopenStatus_t 
miopenCreateLRNDescriptor(
    miopenLRNDescriptor_t  
    *lrnDesc)
cudnnStatus_t 
cudnnSetLRNDescriptor(
    cudnnLRNDescriptor_t normDesc, 
    unsigned lrnN, 
    double lrnAlpha, 
    double lrnBeta, 
    double lrnK)
miopenStatus_t 
miopenSetLRNDescriptor(
    const miopenLRNDescriptor_t lrnDesc, 
    miopenLRNMode_t mode, 
    unsigned lrnN, 
    double lrnAlpha, 
    double lrnBeta, 
    double lrnK)
cudnnStatus_t 
cudnnGetLRNDescriptor(
    cudnnLRNDescriptor_t normDesc, 
    unsigned* lrnN, 
    double* lrnAlpha, 
    double* lrnBeta, 
    double* lrnK)
miopenStatus_t 
miopenGetLRNDescriptor(
    const miopenLRNDescriptor_t lrnDesc, 
    miopenLRNMode_t *mode, 
    unsigned *lrnN, 
    double *lrnAlpha, 
    double *lrnBeta, 
    double *lrnK)
LRN
cudnnStatus_t 
cudnnDestroyLRNDescriptor(
    cudnnLRNDescriptor_t lrnDesc)
miopenStatus_t 
miopenDestroyLRNDescriptor(
    miopenLRNDescriptor_t lrnDesc)
cudnnStatus_t 
cudnnLRNCrossChannelForward(
    cudnnHandle_t handle, 
    cudnnLRNDescriptor_t normDesc, 
    cudnnLRNMode_t lrnMode, 
    const void* alpha, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y)
miopenStatus_t 
miopenLRNForward(
    miopenHandle_t handle, 
    const miopenLRNDescriptor_t lrnDesc, 
    const void *alpha, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    bool do_backward, 
    void  *workspace)
cudnnStatus_t 
cudnnLRNCrossChannelBackward(
    cudnnHandle_t handle, 
    cudnnLRNDescriptor_t normDesc, 
    cudnnLRNMode_t lrnMode, 
    const void* alpha, 
    const cudnnTensorDescriptor_t yDesc, 
    const void *y, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const void *beta, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx)
miopenStatus_t 
miopenLRNBackward(
    miopenHandle_t handle, 
    const miopenLRNDescriptor_t lrnDesc, 
    const void *alpha, 
    const miopenTensorDescriptor_t yDesc, 
    const void *y, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, const void *beta, 
    const miopenTensorDescriptor_t dxDesc, 
    void *dx, 
    const void *workspace)
miopenStatus_t 
miopenLRNGetWorkSpaceSize(
    const miopenTensorDescriptor_t yDesc, 
    size_t *workSpaceSize)
cudnnStatus_t 
cudnnDeriveBNTensorDescriptor(
    cudnnTensorDescriptor_t derivedBnDesc, 
    const cudnnTensorDescriptor_t xDesc, 
    cudnnBatchNormMode_t mode)
miopenStatus_t 
miopenDeriveBNTensorDescriptor(
    miopenTensorDescriptor_t derivedBnDesc, 
    const miopenTensorDescriptor_t xDesc, 
    miopenBatchNormMode_t bn_mode)
cudnnStatus_t 
cudnnBatchNormalizationForwardTraining(
    cudnnHandle_t handle, 
    cudnnBatchNormMode_t mode, 
    void *alpha, 
    void *beta, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y, 
    const cudnnTensorDescriptor_t 
        bnScaleBiasMeanVarDesc, 
    void *bnScale, 
    void *bnBias, 
    double exponentialAverageFactor, 
    void *resultRunningMean, 
    void *resultRunningVariance, 
    double epsilon, 
    void *resultSaveMean, 
    void *resultSaveInvVariance)
miopenStatus_t 
miopenBatchNormalizationForwardTraining(
    miopenHandle_t handle, 
    miopenBatchNormMode_t bn_mode, 
    void *alpha, 
    void *beta, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    const miopenTensorDescriptor_t 
        bnScaleBiasMeanVarDesc, 
    void *bnScale, 
    void *bnBias, 
    double expAvgFactor, 
    void *resultRunningMean, 
    void *resultRunningVariance, 
    double epsilon, 
    void *resultSaveMean, 
    void *resultSaveInvVariance)
Batch Normalization
cudnnStatus_t 
cudnnnBatchNormalizationForwardInference(
    cudnnHandle_t handle, 
    cudnnBatchNormMode_t mode, 
    void *alpha, 
    void *beta, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnTensorDescriptor_t yDesc, 
    void *y, 
    const cudnnTensorDescriptor_t 
        bnScaleBiasMeanVarDesc, 
    const void *bnScale, 
    void *bnBias, 
    const void *estimatedMean, 
    const void *estimatedVariance, 
    double epsilon)
miopenStatus_t 
miopenBatchNormalizationForwardInference(
    miopenHandle_t handle, 
    miopenBatchNormMode_t bn_mode, 
    void *alpha, 
    void *beta, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const miopenTensorDescriptor_t yDesc, 
    void *y, 
    const miopenTensorDescriptor_t 
        bnScaleBiasMeanVarDesc,
    void *bnScale, 
    void *bnBias, 
    void *estimatedMean, 
    void *estimatedVariance, 
    double epsilon)
cudnnStatus_t 
cudnnBatchNormalizationBackward(
    cudnnHandle_t handle, 
    cudnnBatchNormMode_t mode, 
    const void *alphaDataDiff, 
    const void *betaDataDiff, 
    const void *alphaParamDiff, 
    const void *betaParamDiff, 
    const cudnnTensorDescriptor_t xDesc, 
    const void *x, 
    const cudnnTensorDescriptor_t dyDesc, 
    const void *dy, 
    const cudnnTensorDescriptor_t dxDesc, 
    void *dx, 
    const cudnnTensorDescriptor_t 
        bnScaleBiasDiffDesc, 
    const void *bnScale, 
    void *resultBnScaleDiff, 
    void *resultBnBiasDiff, 
    double epsilon, 
    const void *savedMean, 
    const void *savedInvVariance)
miopenStatus_t 
miopenBatchNormalizationBackward(
    miopenHandle_t handle, 
    miopenBatchNormMode_t bn_mode, 
    const void *alphaDataDiff, 
    const void *betaDataDiff, 
    const void *alphaParamDiff, 
    const void *betaParamDiff, 
    const miopenTensorDescriptor_t xDesc, 
    const void *x, 
    const miopenTensorDescriptor_t dyDesc, 
    const void *dy, 
    const miopenTensorDescriptor_t dxDesc, 
    void *dx, 
    const miopenTensorDescriptor_t 
        bnScaleBiasDiffDesc, 
    const void *bnScale, 
    void *resultBnScaleDiff, 
    void *resultBnBiasDiff, 
    double epsilon, 
    const void *savedMean, 
    const void *savedInvVariance)