docs: public static int cudnnBatchNormalizationForwardTrainingEx(
          cudnnHandle handle, 
          int mode, 
          int bnOps, 
          Pointer alpha, /** alpha[0] = result blend factor */
          Pointer beta, /** beta[0] = dest layer blend factor */
          cudnnTensorDescriptor xDesc, 
          Pointer xData, 
          cudnnTensorDescriptor zDesc, 
          Pointer zData, 
          cudnnTensorDescriptor yDesc, 
          Pointer yData, 
          cudnnTensorDescriptor bnScaleBiasMeanVarDesc, 
          Pointer bnScale, 
          Pointer bnBias, 
          double exponentialAverageFactor, 
          Pointer resultRunningMean, 
          Pointer resultRunningVariance, 
          /** Has to be >= CUDNN_BN_MIN_EPSILON. Should be the same in forward and backward functions. */
          double epsilon, 
          /** Optionally save intermediate results from the forward pass here
                 - can be reused to speed up backward pass. NULL if unused */
          Pointer resultSaveMean, 
          Pointer resultSaveInvVariance, 
          cudnnActivationDescriptor activationDesc, 
          Pointer workspace, 
          long workSpaceSizeInBytes, 
          Pointer reserveSpace, 
          long reserveSpaceSizeInBytes)
      {
          return checkResult(cudnnBatchNormalizationForwardTrainingExNative(handle, mode, bnOps, alpha, beta, xDesc, xData, zDesc, zData, yDesc, yData, bnScaleBiasMeanVarDesc, bnScale, bnBias, exponentialAverageFactor, resultRunningMean, resultRunningVariance, epsilon, resultSaveMean, resultSaveInvVariance, activationDesc, workspace, workSpaceSizeInBytes, reserveSpace, reserveSpaceSizeInBytes));
      }