1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#![doc = include_str!("../README.md")]
mod memory;
mod negative_mask;
mod negative_mask_inplace;
mod positive_mask;
mod positive_mask_inplace;
mod relu;
mod relu_inplace;
pub use memory::{Arena, UnifiedBuffer};
impl<'a> UnifiedBuffer<'a> {
/// Converts negatives to 1, positives to 0.
///
/// # Panics
///
/// * `self.len` is not equal to `out_buf.len`.
///
/// # Examples
///
/// ```rust,ignore
/// # use lufloat::{Arena, UnifiedBuffer};
/// let arena = Arena::new(4096);
/// let mut buffer_a = UnifiedBuffer::new(&arena, 2048);
/// let mut buffer_b = UnifiedBuffer::new(&arena, 2048);
/// let input_data = buffer_a.slice_mut();
/// input_data[0] = 0b1_01111_0000000000;
/// input_data[1] = 0b0_00000_0000000000;
/// input_data[2] = 0b0_01111_0000000000;
/// buffer_a.negative_mask(&mut buffer_b);
/// let output_data = buffer_b.slice();
/// println!("The first 3 elements are: {:?}", &output_data[..3]);
/// ```
pub fn negative_mask(&self, out_buf: &mut Self) {
negative_mask::apply(self, out_buf);
}
/// Replaces negatives with 1, positives with 0.
///
/// # Examples
///
/// ```rust,ignore
/// # use lufloat::{Arena, UnifiedBuffer};
/// let arena = Arena::new(2048);
/// let mut buffer = UnifiedBuffer::new(&arena, 2048);
/// let input_data = buffer.slice_mut();
/// input_data[0] = 0b1_01111_0000000000;
/// input_data[1] = 0b0_00000_0000000000;
/// input_data[2] = 0b0_01111_0000000000;
/// buffer.negative_mask_inplace();
/// let output_data = buffer.slice();
/// println!("The first 3 elements are: {:?}", &output_data[..3]);
/// ```
pub fn negative_mask_inplace(&mut self) {
negative_mask_inplace::apply(self);
}
/// Converts negatives to 0, positives to 1.
///
/// # Panics
///
/// * `self.len` is not equal to `out_buf.len`.
///
/// # Examples
///
/// ```rust,ignore
/// # use lufloat::{Arena, UnifiedBuffer};
/// let arena = Arena::new(4096);
/// let mut buffer_a = UnifiedBuffer::new(&arena, 2048);
/// let mut buffer_b = UnifiedBuffer::new(&arena, 2048);
/// let input_data = buffer_a.slice_mut();
/// input_data[0] = 0b1_01111_0000000000;
/// input_data[1] = 0b0_00000_0000000000;
/// input_data[2] = 0b0_01111_0000000000;
/// buffer_a.positive_mask(&mut buffer_b);
/// let output_data = buffer_b.slice();
/// println!("The first 3 elements are: {:?}", &output_data[..3]);
/// ```
pub fn positive_mask(&self, out_buf: &mut Self) {
positive_mask::apply(self, out_buf);
}
/// Replaces negatives with 0, positives with 1.
///
/// # Examples
///
/// ```rust,ignore
/// # use lufloat::{Arena, UnifiedBuffer};
/// let arena = Arena::new(2048);
/// let mut buffer = UnifiedBuffer::new(&arena, 2048);
/// let input_data = buffer.slice_mut();
/// input_data[0] = 0b1_01111_0000000000;
/// input_data[1] = 0b0_00000_0000000000;
/// input_data[2] = 0b0_01111_0000000000;
/// buffer.positive_mask_inplace();
/// let output_data = buffer.slice();
/// println!("The first 3 elements are: {:?}", &output_data[..3]);
/// ```
pub fn positive_mask_inplace(&mut self) {
positive_mask_inplace::apply(self);
}
/// Converts elements into max(0, element).
///
/// # Panics
///
/// * `self.len` is not equal to `out_buf.len`.
///
/// # Examples
///
/// ```rust,ignore
/// # use lufloat::{Arena, UnifiedBuffer};
/// let arena = Arena::new(4096);
/// let mut buffer_a = UnifiedBuffer::new(&arena, 2048);
/// let mut buffer_b = UnifiedBuffer::new(&arena, 2048);
/// let input_data = buffer_a.slice_mut();
/// input_data[0] = 0b1_01111_0000000000;
/// input_data[1] = 0b0_00000_0000000000;
/// input_data[2] = 0b0_01111_0000000000;
/// buffer_a.relu(&mut buffer_b);
/// let output_data = buffer_b.slice();
/// println!("The first 3 elements are: {:?}", &output_data[..3]);
/// ```
pub fn relu(&self, out_buf: &mut Self) {
relu::apply(self, out_buf);
}
/// Replaces elements with max(0, element).
///
/// # Examples
///
/// ```rust,ignore
/// # use lufloat::{Arena, UnifiedBuffer};
/// let arena = Arena::new(2048);
/// let mut buffer = UnifiedBuffer::new(&arena, 2048);
/// let input_data = buffer.slice_mut();
/// input_data[0] = 0b1_01111_0000000000;
/// input_data[1] = 0b0_00000_0000000000;
/// input_data[2] = 0b0_01111_0000000000;
/// buffer.relu_inplace();
/// let output_data = buffer.slice();
/// println!("The first 3 elements are: {:?}", &output_data[..3]);
/// ```
pub fn relu_inplace(&mut self) {
relu_inplace::apply(self);
}
}