Mila 0.13.48
Deep Neural Network Library
Loading...
Searching...
No Matches
Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB > Class Template Referenceabstractexport
Inheritance diagram for Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >:
Collaboration diagram for Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >:

Public Types

using MR = CpuMemoryResource
using ParameterGradTensor = Tensor<TPrecision, MR>
using ParameterTensor = Tensor<TPrecision, MR>
using TensorLeftType = Tensor<TInputA, MR>
using TensorOutputType = Tensor<TPrecision, MR>
using TensorRightType = Tensor<TInputB, MR>
Public Types inherited from Mila::Dnn::Compute::Operation< TDeviceType, TPrecision >
using DataTypeTraits

Public Member Functions

virtual ~BinaryOperation ()=default
virtual void backward (const ITensor &input_a, const ITensor &input_b, const ITensor &output_grad, ITensor &input_a_grad, ITensor &input_b_grad) const =0
 Backward pass: compute gradients w.r.t.
virtual void forward (const ITensor &input_a, const ITensor &input_b, ITensor &output) const =0
 Forward pass: output = f(input_a, input_b).
Public Member Functions inherited from Mila::Dnn::Compute::Operation< TDeviceType, TPrecision >
virtual ~Operation ()=default
virtual void build (const BuildContext &build_context)
 Prepare the operation for a concrete input shape.
virtual void clearGradients () noexcept
 Clear any cached gradient pointers held by the operation.
virtual TensorDataType getDataType () const
 Tensor data type for this operation.
virtual DeviceType getDeviceType () const
 Device type for this operation.
virtual std::string getName () const=0
 Human-readable operation name.
virtual OperationType getOperationType () const=0
 Operation type identifier.
virtual std::size_t getStateMemorySize () const
 Returns the number of bytes of state memory allocated by this operation.
virtual bool isBuilt () const
 Whether build() completed successfully for a concrete input shape.
virtual bool isEvalMode () const
 Query whether operation is configured for training.
virtual void setGradients (ITensor *weight_grad, ITensor *bias_grad)
 Bind module-owned gradient tensors to the operation.
virtual void setParameters (ITensor *weight, ITensor *bias)
 Bind module-owned parameter tensors to the operation.
virtual void setTrainingMode (TrainingMode training_mode)
 Configure operation training-mode behavior.

Static Protected Member Functions

static const TensorLeftTypeasLeftTensor (const ITensor &t)
static TensorOutputTypeasOutputTensor (ITensor &t)
static const TensorRightTypeasRightTensor (const ITensor &t)

Additional Inherited Members

Static Public Attributes inherited from Mila::Dnn::Compute::Operation< TDeviceType, TPrecision >
static constexpr TensorDataType data_type
static constexpr DeviceType device_type
Protected Attributes inherited from Mila::Dnn::Compute::Operation< TDeviceType, TPrecision >
bool is_built_
TrainingMode training_mode_

Detailed Description

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
requires PrecisionSupportedOnDevice<TPrecision, TDeviceType>
class Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >
Template Parameters
TDeviceTypeDevice type for this operation (Cpu, Cuda, ...)
TPrecisionCanonical element precision produced/consumed by the op (e.g. FP32)
TInputAElement type for left input (defaults to TPrecision)
TInputBElement type for right input (defaults to TPrecision)
Note
Operation precision (TPrecision) is constrained to be supported on the target device.

Member Typedef Documentation

◆ MR

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
using Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::MR = CpuMemoryResource

◆ ParameterGradTensor

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
using Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::ParameterGradTensor = Tensor<TPrecision, MR>

◆ ParameterTensor

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
using Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::ParameterTensor = Tensor<TPrecision, MR>

◆ TensorLeftType

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
using Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::TensorLeftType = Tensor<TInputA, MR>

◆ TensorOutputType

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
using Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::TensorOutputType = Tensor<TPrecision, MR>

◆ TensorRightType

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
using Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::TensorRightType = Tensor<TInputB, MR>

Constructor & Destructor Documentation

◆ ~BinaryOperation()

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
virtual Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::~BinaryOperation ( )
virtualdefault

Member Function Documentation

◆ asLeftTensor()

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
const TensorLeftType & Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::asLeftTensor ( const ITensor & t)
inlinestaticprotected

◆ asOutputTensor()

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
TensorOutputType & Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::asOutputTensor ( ITensor & t)
inlinestaticprotected

◆ asRightTensor()

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
const TensorRightType & Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::asRightTensor ( const ITensor & t)
inlinestaticprotected

◆ backward()

template<DeviceType TDeviceType, TensorDataType TPrecision, TensorDataType TInputA = TPrecision, TensorDataType TInputB = TPrecision>
virtual void Mila::Dnn::Compute::BinaryOperation< TDeviceType, TPrecision, TInputA, TInputB >::backward ( const ITensor & input_a,
const ITensor & input_b,
const ITensor & output_grad,
ITensor & input_a_grad,
ITensor & input_b_grad ) const
pure virtual

◆ forward()


The documentation for this class was generated from the following file: