rcudnn/
activation_descriptor.rs

1//! Defines a Activation Descriptor.
2//!
3//! A Activation Descriptor is used to hold information about the rule,
4//! which describes how to transform the data.
5
6use super::{Error, API};
7use crate::ffi::*;
8
9#[derive(Debug, Clone)]
10/// Describes a ActivationDescriptor.
11pub struct ActivationDescriptor {
12    id: cudnnActivationDescriptor_t,
13}
14
15impl Drop for ActivationDescriptor {
16    #[allow(unused_must_use)]
17    fn drop(&mut self) {
18        API::destroy_activation_descriptor(*self.id_c());
19    }
20}
21
22impl ActivationDescriptor {
23    /// Initializes a new CUDA cuDNN Activation Descriptor.
24    pub fn new(mode: cudnnActivationMode_t) -> Result<ActivationDescriptor, Error> {
25        let generic_activation_desc = API::create_activation_descriptor()?;
26        API::set_activation_descriptor(
27            generic_activation_desc,
28            mode,
29            cudnnNanPropagation_t::CUDNN_NOT_PROPAGATE_NAN, // FIXME check if this makes sense
30            ::std::f64::MAX,                                // FIXME make this public API
31        )?;
32
33        Ok(ActivationDescriptor::from_c(generic_activation_desc))
34    }
35
36    /// Initializes a new CUDA cuDNN Activation Descriptor from its C type.
37    pub fn from_c(id: cudnnActivationDescriptor_t) -> ActivationDescriptor {
38        ActivationDescriptor { id }
39    }
40
41    /// Returns the CUDA cuDNN Activation Descriptor as its C type.
42    pub fn id_c(&self) -> &cudnnActivationDescriptor_t {
43        &self.id
44    }
45}