26 #ifndef LBANN_UTILS_DNN_LIB_SOFTMAX_HPP 27 #define LBANN_UTILS_DNN_LIB_SOFTMAX_HPP 29 #include "lbann_config.hpp" 31 #if defined LBANN_HAS_CUDNN 33 #elif defined LBANN_HAS_MIOPEN 35 #elif defined LBANN_HAS_GPU && !defined LBANN_HAS_ONEDNN_GPU 37 "GPU support detected but no valid DNN library implementation. ");
38 #endif // LBANN_HAS_CUDNN 40 #if defined LBANN_HAS_ONEDNN 42 #endif // LBANN_HAS_ONEDNN 51 template <
typename ScalarT,
typename TensorDescT,
typename DataT, El::Device D>
53 TensorDescT
const& xDesc,
54 El::Matrix<DataT, D>
const& x,
55 ScalarT
const& beta_in,
56 TensorDescT
const& yDesc,
57 El::Matrix<DataT, D>& y,
58 El::SyncInfo<D>
const& si,
62 using backend =
typename TensorDescT::backend_type;
63 static_assert(backend::device == D,
"Mismatched device identifiers.");
75 template <
typename ScalarT,
typename TensorDescT,
typename DataT, El::Device D>
77 TensorDescT
const& xDesc,
78 El::Matrix<DataT, D>
const& x,
79 ScalarT
const& beta_in,
80 TensorDescT
const& yDesc,
81 El::Matrix<DataT, D>& y,
97 template <
typename ScalarT,
typename TensorDescT,
typename DataT, El::Device D>
99 TensorDescT
const& yDesc,
100 El::Matrix<DataT, D>
const& y,
101 TensorDescT
const& dyDesc,
102 El::Matrix<DataT, D>
const& dy,
103 ScalarT
const& beta_in,
104 TensorDescT
const& dxDesc,
105 El::Matrix<DataT, D>& dx,
106 El::SyncInfo<D>
const& si,
114 using backend =
typename TensorDescT::backend_type;
115 static_assert(backend::device == D,
"Mismatched device identifiers.");
129 template <
typename ScalarT,
typename TensorDescT,
typename DataT, El::Device D>
131 TensorDescT
const& yDesc,
132 El::Matrix<DataT, D>
const& y,
133 TensorDescT
const& dyDesc,
134 El::Matrix<DataT, D>
const& dy,
135 ScalarT
const& beta_in,
136 TensorDescT
const& dxDesc,
137 El::Matrix<DataT, D>& dx,
157 #endif // LBANN_UTILS_DNN_LIB_SOFTMAX_HPP void softmax_backward(ScalarT const &alpha_in, TensorDescT const &yDesc, El::Matrix< DataT, D > const &y, TensorDescT const &dyDesc, El::Matrix< DataT, D > const &dy, ScalarT const &beta_in, TensorDescT const &dxDesc, El::Matrix< DataT, D > &dx, El::SyncInfo< D > const &si, softmax_mode mode, softmax_alg alg=softmax_alg::ACCURATE)
void softmax_forward(ScalarT const &alpha_in, TensorDescT const &xDesc, El::Matrix< DataT, D > const &x, ScalarT const &beta_in, TensorDescT const &yDesc, El::Matrix< DataT, D > &y, El::SyncInfo< D > const &si, softmax_mode mode, softmax_alg alg=softmax_alg::ACCURATE)
void softmax_backward(ScalarT const &alpha_in, TensorDescT const &yDesc, El::Matrix< DataT, D > const &y, TensorDescT const &dyDesc, El::Matrix< DataT, D > const &dy, ScalarT const &beta_in, TensorDescT const &dxDesc, El::Matrix< DataT, D > &dx, softmax_mode mode, softmax_alg alg=softmax_alg::ACCURATE)
softmax_alg
Internal LBANN names for supported softmax algorithms.
auto force(El::MultiSync< D, Ds... > const &x) -> El::SyncInfo< D > const &
Force the MultiSync to the master SyncInfo.
El::SyncInfo< D > get_sync_info(El::Matrix< TensorDataType, D > const &m) noexcept
Get a SyncInfo from an Matrix.
softmax_mode
Which tensor dimensions to apply softmax over.
void softmax_forward(ScalarT const &alpha_in, TensorDescT const &xDesc, El::Matrix< DataT, D > const &x, ScalarT const &beta_in, TensorDescT const &yDesc, El::Matrix< DataT, D > &y, softmax_mode mode, softmax_alg alg=softmax_alg::ACCURATE)