Skip to content

MIOpen Logger to Driver Decoder for Recurrent

Daniel Lowell edited this page Apr 4, 2018 · 4 revisions

Example miopenRNNForwardTraining log:

miopenStatus_t miopenRNNForwardTraining(miopenHandle_t, miopenRNNDescriptor_t, int, miopenTensorDescriptor**, const void*, miopenTensorDescriptor_t, const void*, miopenTensorDescriptor_t, const void*,                      miopenTensorDescriptor_t, const void*, miopenTensorDescriptor**, void*, miopenTensorDescriptor_t, void*, miopenTensorDescriptor_t, void*, void*, size_t, void*, size_t){
rnnDesc = 512, 3, 4, 6, 2, 0, 0, 0, 0,
sequenceLen = 10
xDesc = 0xe0d1c0
x = 0xe05a80
hxDesc = 3, 4, 512
hx = 0xdff280
cxDesc = 3, 4, 512
cx = 0xdff470
wDesc = 3584, 2048
w = 0xdfa690
yDesc = 0xdd2630
y = 0xdfac40
hyDesc = 3, 4, 512
hy = 0xdff660
cyDesc = 3, 4, 512
cy = 0xdff850
}

The lines of interest are:

  • xDesc is an array of tensor descriptors
  • rnnDesc = 512, 3, 4, 6, 2, 0, 0, 0, 0, == < hiddenSize, nlayers, nHiddenTensorsPerLayer, workspaceScale, rnnMode, dirMode, algoMode, inputMode, biasMode > (Link to a description of the modes.)
  • hxDesc = 3, 4, 512 == < nlayersTensor, xDescMaxFirstDim, hiddenSize >
  • cxDesc = 3, 4, 512 == < nlayersTensor, xDescMaxFirstDim, hiddenSize >
  • wDesc is a weights tensor descriptor, which is calculated by MIOpen
  • hyDesc = 3, 4, 512 == < nlayersTensor, xDescMaxFirstDim, hiddenSize >
  • cyDesc = 3, 4, 512 == < nlayersTensor, xDescMaxFirstDim, hiddenSize >

xDescMaxFirstDim must equal the largest first dimension of the xDesc tensor descriptor array.

nlayersTensor equals to nlayers if the dirMode is unidirectional and twice to nlayers if the dirMode is bidirectional.

Example miopenRNNBackwardData log:

miopenStatus_t miopenRNNBackwardData(miopenHandle_t, miopenRNNDescriptor_t, int, miopenTensorDescriptor**, const void*, miopenTensorDescriptor**, const void*, miopenTensorDescriptor_t, const void*,                         miopenTensorDescriptor_t, const void*, miopenTensorDescriptor_t, const void*, miopenTensorDescriptor_t, const void*, miopenTensorDescriptor_t, const void*, miopenTensorDescriptor**, void*, miopenTensorDescriptor_t, void*,                 miopenTensorDescriptor_t, void*, void*, size_t, void*, size_t){
rnnDesc = 512, 3, 4, 6, 2, 0, 0, 0, 0,
sequenceLen = 10
yDesc = 0xdd2630
y = 0xdfac40
dyDesc = 0xdd2630
dy = 0xdfaa50
dhyDesc = 3, 4, 512
dhy = 0xd3a340
dcyDesc = 3, 4, 512
dcy = 0xd3a530
wDesc = 3584, 2048
w = 0xdfa690
hxDesc = 3, 4, 512
hx = 0xdff280
cxDesc = 3, 4, 512
cx = 0xdff470
}

The lines of interest are:

  • rnnDesc = 512, 3, 4, 6, 2, 1, 0, 0, 0, == < hiddenSize, nlayers, nHiddenTensorsPerLayer, workspaceScale, rnnMode, dirMode, algoMode, inputMode, biasMode > (Link to a description of the modes.)
  • yDesc is an array of tensor descriptors
  • dyDesc is an array of fully packed tensor descriptors associated with the output from each time step
  • dhyDesc = 3, 4, 512 == < nlayersTensor , xDescMaxFirstDim, hiddenSize >
  • dcyDesc = 3, 4, 512 == < nlayersTensor , xDescMaxFirstDim, hiddenSize >
  • wDesc is a weights tensor descriptor
  • hxDesc = 3, 4, 512 == < nlayersTensor , xDescMaxFirstDim, hiddenSize >
  • cxDesc = 3, 4, 512 == < nlayersTensor , xDescMaxFirstDim, hiddenSize >

xDescMaxFirstDim must equal the largest first dimension of the xDesc tensor descriptor array.

nlayersTensor equals to nlayers if the dirMode is unidirectional and twice to nlayers if the dirMode is bidirectional.

Example miopenRNNBackwardWeights log:

miopenStatus_t miopenRNNBackwardWeights(miopenHandle_t, miopenRNNDescriptor_t, int, miopenTensorDescriptor**, const void*, miopenTensorDescriptor_t, const void*, miopenTensorDescriptor**, const void*,                      miopenTensorDescriptor_t, void*, void*, size_t, const void*, size_t){
rnnDesc = 512, 3, 4, 6, 2, 0, 0, 0, 0,
sequenceLen = 10
xDesc = 0xe0d1c0
x = 0xe05a80
hxDesc = 3, 4, 512
hx = 0xdff280
yDesc = 0xdd2630
y = 0xdfaa50
dwDesc = 3584, 2048
dw = 0xdfa860
workSpace = 0xde13e0
workSpaceNumBytes = 1032192
reserveSpace = 0xde15d0
reserveSpaceNumBytes = 2064384
}

The lines of interest are:

  • rnnDesc = 512, 3, 4, 6, 2, 1, 0, 0, 0, == < hiddenSize, nlayers, nHiddenTensorsPerLayer, workspaceScale, rnnMode, dirMode, algoMode, inputMode, biasMode > (Link to a description of the modes.)
  • xDesc is an array of tensor descriptors
  • hxDesc = 3, 4, 512 == < nlayersTensor , xDescMaxFirstDim, hiddenSize >
  • dwDesc is a weights tensor descriptor

xDescMaxFirstDim must equal the largest first dimension of the xDesc tensor descriptor array.

nlayersTensor equals to nlayers if the dirMode is unidirectional and twice to nlayers if the dirMode is bidirectional.

Currently, 16-bit floating point is not available for MIOpen's RNN.