Files
TheRock/rocm-libraries/projects/miopen/docs/conceptual/porting-guide.rst
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

1520 lines
52 KiB
ReStructuredText

.. meta::
:description: Porting to MIOpen
:keywords: MIOpen, ROCm, API, documentation, porting
********************************************************************
Porting to MIOpen
********************************************************************
The following is a summary of the key differences between MIOpen and NVIDIA CUDA cuDNN.
* Calling ``miopenFindConvolution*Algorithm()`` is **mandatory** before calling any Convolution API
* The typical calling sequence for the MIOpen Convolution APIs is:
* ``miopenConvolution*GetWorkSpaceSize()`` (returns the workspace size required by ``Find()``)
* ``miopenFindConvolution*Algorithm()`` (returns the performance information for various algorithms)
* ``miopenConvolution*()``
MIOpen supports:
* 4D tensors in the NCHW and NHWC storage format. The CUDA cuDNN ``__“\*Nd\*”__`` APIs don't have a
corresponding MIOpen API.
* The ``__`float(fp32)`__`` datatype
* ``__2D Convolutions__`` and ``__3D Convolutions__``
* ``__2D Pooling__``
MIOpen doesn't support:
* ``__Preferences__`` for convolutions
* Softmax modes (MIOpen implements the ``__SOFTMAX_MODE_CHANNEL__`` flavor)
* ``__Transform-Tensor__``, ``__Dropout__``, ``__RNNs__``, and ``__Divisive Normalization__``
Useful MIOpen environment variables include:
* ``MIOPEN_ENABLE_LOGGING=1``: Logs all the MIOpen APIs that are called, including the parameters passed
to those APIs
* ``MIOPEN_DEBUG_GCN_ASM_KERNELS=0``: Disables hand-tuned ASM kernels (the fallback is to use
kernels written in a high-level language)
* ``MIOPEN_DEBUG_CONV_FFT=0``: Disables the FFT convolution algorithm
* ``MIOPEN_DEBUG_CONV_DIRECT=0``: Disables the direct convolution algorithm
CUDA cuDNN versus MIOpen APIs
===================================================
The following sections compare the CUDA cuDNN and MIOpen APIs with similar functions.
Handle operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreate(
cudnnHandle_t *handle)
- .. code-block:: cpp
miopenStatus_t
miopenCreate(
miopenHandle_t *handle)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDestroy(
cudnnHandle_t handle)
- .. code-block:: cpp
miopenStatus_t
miopenDestroy(
miopenHandle_t handle)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnSetStream(
cudnnHandle_t handle,
cudaStream_t streamId)
- .. code-block:: cpp
miopenStatus_t
miopenSetStream(
miopenHandle_t handle,
miopenAcceleratorQueue_t streamID)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnGetStream(
cudnnHandle_t handle,
cudaStream_t *streamId)
- .. code-block:: cpp
miopenStatus_t
miopenGetStream(
miopenHandle_t handle,
miopenAcceleratorQueue_t *streamID)
Tensor operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreateTensorDescriptor(
cudnnTensorDescriptor_t *tensorDesc)
- .. code-block:: cpp
miopenStatus_t
miopenCreateTensorDescriptor(
miopenTensorDescriptor_t
*tensorDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDestroyTensorDescriptor(
cudnnTensorDescriptor_t tensorDesc)
- .. code-block:: cpp
miopenStatus_t
miopenDestroyTensorDescriptor(
miopenTensorDescriptor_t tensorDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnSetTensor(
cudnnHandle_t handle,
const cudnnTensorDescriptor_t yDesc,
void *y,
const void *valuePtr)
- .. code-block:: cpp
miopenStatus_t
miopenSetTensor(
miopenHandle_t handle,
const miopenTensorDescriptor_t yDesc,
void *y,
const void *alpha)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnSetTensor4dDescriptor(
cudnnTensorDescriptor_t tensorDesc,
cudnnTensorFormat_t format,
cudnnDataType_t dataType,
int n,
int c,
int h,
int w)
- .. code-block:: cpp
miopenStatus_t miopenSet4dTensorDescriptor(
miopenTensorDescriptor_t tensorDesc,
miopenDataType_t dataType,
int n,
int c,
int h,
int w)
Only the ``NCHW`` format is supported
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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``
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnScaleTensor(
cudnnHandle_t handle,
const cudnnTensorDescriptor_t yDesc,
void *y,
const void *alpha)
- .. code-block:: cpp
miopenStatus_t
miopenScaleTensor(
miopenHandle_t handle,
const miopenTensorDescriptor_t yDesc,
void *y,
const void *alpha)
Filter operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreateFilterDescriptor(
cudnnFilterDescriptor_t *filterDesc)
- All ``TensorDescriptor`` APIs substitute for the respective ``FilterDescriptor`` APIs.
Convolution operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreateConvolutionDescriptor(
cudnnConvolutionDescriptor_t *convDesc)
- .. code-block:: cpp
miopenStatus_t
miopenCreateConvolutionDescriptor(
miopenConvolutionDescriptor_t *convDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDestroyConvolutionDescriptor(
cudnnConvolutionDescriptor_t convDesc)
- .. code-block:: cpp
miopenStatus_t
miopenDestroyConvolutionDescriptor(
miopenConvolutionDescriptor_t convDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnGetConvolution2dDescriptor(
const cudnnConvolutionDescriptor_t convDesc,
int *pad_h,
int *pad_y,
int *u,
int *v,
int *upscalex,
int *upscaley,
cudnnConvolutionMode_t *mode)
- .. code-block:: cpp
miopenStatus_t
miopenGetConvolutionDescriptor(
miopenConvolutionDescriptor_t convDesc,
miopenConvolutionMode_t *mode,
int *pad_h,
int *pad_y,
int *u,
int *v,
int *upscalex,
int *upscaley)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnGetConvolution2dForwardOutputDim(
const cudnnConvolutionDescriptor_t convDesc,
const cudnnTensorDescriptor_t inputTensorDesc,
const cudnnFilterDescriptor_t filterDesc,
int *n,
int *c,
int *h,
int *w)
- .. code-block:: cpp
miopenStatus_t
miopenGetConvolutionForwardOutputDim(
miopenConvolutionDescriptor_t convDesc,
const miopenTensorDescriptor_t inputTensorDesc,
const miopenTensorDescriptor_t filterDesc,
int *n,
int *c,
int *h,
int *w)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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 the workspace prior to running this API.
A table with times and memory requirements for different algorithms is returned.
Choose the top-most algorithm if you only want the fastest algorithm.
.. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
.. important::
``miopenConvolutionBackwardBias`` is deprecated and will be removed in a future
release. This function now
returns ``miopenStatusNotImplemented``.
*
- .. code-block:: cpp
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 the workspace prior to running this API.
A table with times and memory requirements for different algorithms is returned.
Choose the top-most algorithm if you only want the fastest algorithm.
.. code-block:: cpp
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)
*
- .. code-block:: cpp
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 the workspace prior to running this API.
A table with times and memory requirements for different algorithms is returned.
Choose the top-most algorithm if you only want the fastest algorithm.
.. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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 operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
Pooling operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreatePoolingDescriptor(
cudnnPoolingDescriptor_t *poolingDesc)
- .. code-block:: cpp
miopenStatus_t
miopenCreatePoolingDescriptor(
miopenPoolingDescriptor_t *poolDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnSetPooling2dDescriptor(
cudnnPoolingDescriptor_t poolingDesc,
cudnnPoolingMode_t mode,
cudnnNanPropagation_t maxpoolingNanOpt,
int windowHeight,
int windowWidth,
int verticalPadding,
int horizontalPadding,
int verticalStride,
int horizontalStride)
- .. code-block:: cpp
miopenStatus_t
miopenSet2dPoolingDescriptor(
miopenPoolingDescriptor_t poolDesc,
miopenPoolingMode_t mode,
int windowHeight,
int windowWidth,
int pad_h,
int pad_w,
int u,
int v)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
miopenStatus_t
miopenGet2dPoolingDescriptor(
const miopenPoolingDescriptor_t poolDesc,
miopenPoolingMode_t *mode,
int *windowHeight,
int *windowWidth,
int *pad_h,
int *pad_w,
int *u,
int *v)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnGetPooling2dForwardOutputDim(
const cudnnPoolingDescriptor_t poolingDesc,
const cudnnTensorDescriptor_t inputTensorDesc,
int *n,
int *c,
int *h,
int *w)
- .. code-block:: cpp
miopenStatus_t
miopenGetPoolingForwardOutputDim(
const miopenPoolingDescriptor_t poolDesc,
const miopenTensorDescriptor_t tensorDesc,
int *n,
int *c,
int *h,
int *w)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDestroyPoolingDescriptor(
cudnnPoolingDescriptor_t poolingDesc)
- .. code-block:: cpp
miopenStatus_t
miopenDestroyPoolingDescriptor(
miopenPoolingDescriptor_t poolDesc)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- NA
- .. code-block:: cpp
miopenStatus_t
miopenPoolingGetWorkSpaceSize(
const miopenTensorDescriptor_t yDesc,
size_t *workSpaceSize)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
Activation operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreateActivationDescriptor(
cudnnActivationDescriptor_t *activationDesc)
- .. code-block:: cpp
miopenStatus_t
miopenCreateActivationDescriptor(
miopenActivationDescriptor_t *activDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnSetActivationDescriptor(
cudnnActivationDescriptor_t activationDesc,
cudnnActivationMode_t mode,
cudnnNanPropagation_t reluNanOpt,
double reluCeiling)
- .. code-block:: cpp
miopenStatus_t
miopenSetActivationDescriptor(
const miopenActivationDescriptor_t activDesc,
miopenActivationMode_t mode,
double activAlpha,
double activBeta,
double activPower)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnGetActivationDescriptor(
const cudnnActivationDescriptor_t activationDesc,
cudnnActivationMode_t *mode,
cudnnNanPropagation_t *reluNanOpt,
double *reluCeiling)
- .. code-block:: cpp
miopenStatus_t
miopenGetActivationDescriptor(
const miopenActivationDescriptor_t activDesc,
miopenActivationMode_t *mode,
double *activAlpha,
double *activBeta,
double *activPower)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDestroyActivationDescriptor(
cudnnActivationDescriptor_t activationDesc)
- .. code-block:: cpp
miopenStatus_t
miopenDestroyActivationDescriptor(
miopenActivationDescriptor_t activDesc)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
LRN operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
cudnnStatus_t
cudnnCreateLRNDescriptor(
cudnnLRNDescriptor_t *normDesc)
- .. code-block:: cpp
miopenStatus_t
miopenCreateLRNDescriptor(
miopenLRNDescriptor_t
*lrnDesc)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnSetLRNDescriptor(
cudnnLRNDescriptor_t normDesc,
unsigned lrnN,
double lrnAlpha,
double lrnBeta,
double lrnK)
- .. code-block:: cpp
miopenStatus_t
miopenSetLRNDescriptor(
const miopenLRNDescriptor_t lrnDesc,
miopenLRNMode_t mode,
unsigned lrnN,
double lrnAlpha,
double lrnBeta,
double lrnK)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnGetLRNDescriptor(
cudnnLRNDescriptor_t normDesc,
unsigned* lrnN,
double* lrnAlpha,
double* lrnBeta,
double* lrnK)
- .. code-block:: cpp
miopenStatus_t
miopenGetLRNDescriptor(
const miopenLRNDescriptor_t lrnDesc,
miopenLRNMode_t *mode,
unsigned *lrnN,
double *lrnAlpha,
double *lrnBeta,
double *lrnK)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDestroyLRNDescriptor(
cudnnLRNDescriptor_t lrnDesc)
- .. code-block:: cpp
miopenStatus_t
miopenDestroyLRNDescriptor(
miopenLRNDescriptor_t lrnDesc)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- NA
- .. code-block:: cpp
miopenStatus_t
miopenLRNGetWorkSpaceSize(
const miopenTensorDescriptor_t yDesc,
size_t *workSpaceSize)
*
- .. code-block:: cpp
cudnnStatus_t
cudnnDeriveBNTensorDescriptor(
cudnnTensorDescriptor_t derivedBnDesc,
const cudnnTensorDescriptor_t xDesc,
cudnnBatchNormMode_t mode)
- .. code-block:: cpp
miopenStatus_t
miopenDeriveBNTensorDescriptor(
miopenTensorDescriptor_t derivedBnDesc,
const miopenTensorDescriptor_t xDesc,
miopenBatchNormMode_t bn_mode)
Batch normalization operations
-------------------------------------------------------------------------------------------
.. list-table::
:header-rows: 1
*
- cuDNN
- MIOpen
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)
*
- .. code-block:: cpp
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)
- .. code-block:: cpp
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)