@@ -108,24 +108,64 @@ class LayerWgs : public Layer {
108
108
109
109
// additional bias for DCN
110
110
bool additional_bias;
111
- dnnType *bias2_h, *bias2_d;
111
+ dnnType *bias2_h = nullptr , *bias2_d = nullptr ;
112
112
113
113
// batchnorm
114
114
bool batchnorm;
115
- dnnType *power_h;
116
- dnnType *scales_h, *scales_d;
117
- dnnType *mean_h, *mean_d;
118
- dnnType *variance_h, *variance_d;
115
+ dnnType *power_h = nullptr ;
116
+ dnnType *scales_h = nullptr , *scales_d = nullptr ;
117
+ dnnType *mean_h = nullptr , *mean_d = nullptr ;
118
+ dnnType *variance_h = nullptr , *variance_d = nullptr ;
119
119
120
120
// fp16
121
- __half *data16_h, *bias16_h;
122
- __half *data16_d, *bias16_d;
123
- __half *bias216_h, *bias216_d;
124
-
125
- __half *power16_h, *power16_d;
126
- __half *scales16_h, *scales16_d;
127
- __half *mean16_h, *mean16_d;
128
- __half *variance16_h, *variance16_d;
121
+ __half *data16_h = nullptr , *bias16_h = nullptr ;
122
+ __half *data16_d = nullptr , *bias16_d = nullptr ;
123
+ __half *bias216_h = nullptr , *bias216_d = nullptr ;
124
+
125
+ __half *power16_h = nullptr ;
126
+ __half *scales16_h = nullptr , *scales16_d = nullptr ;
127
+ __half *mean16_h = nullptr , *mean16_d = nullptr ;
128
+ __half *variance16_h = nullptr , *variance16_d = nullptr ;
129
+
130
+ void releaseHost (bool release32 = true , bool release16 = true ) {
131
+ if (release32) {
132
+ if ( data_h != nullptr ) { delete [] data_h; data_h = nullptr ; }
133
+ if ( bias_h != nullptr ) { delete [] bias_h; bias_h = nullptr ; }
134
+ if ( bias2_h != nullptr ) { delete [] bias2_h; bias2_h = nullptr ; }
135
+ if ( scales_h != nullptr ) { delete [] scales_h; scales_h = nullptr ; }
136
+ if ( mean_h != nullptr ) { delete [] mean_h; mean_h = nullptr ; }
137
+ if (variance_h != nullptr ) { delete [] variance_h; variance_h = nullptr ; }
138
+ if ( power_h != nullptr ) { delete [] power_h; power_h = nullptr ; }
139
+ }
140
+ if (net->fp16 && release16) {
141
+ if ( data16_h != nullptr ) { delete [] data16_h; data16_h = nullptr ; }
142
+ if ( bias16_h != nullptr ) { delete [] bias16_h; bias16_h = nullptr ; }
143
+ if ( bias216_h != nullptr ) { delete [] bias216_h; bias216_h = nullptr ; }
144
+ if ( scales16_h != nullptr ) { delete [] scales16_h; scales16_h = nullptr ; }
145
+ if ( mean16_h != nullptr ) { delete [] mean16_h; mean16_h = nullptr ; }
146
+ if (variance16_h != nullptr ) { delete [] variance16_h; variance16_h = nullptr ; }
147
+ if ( power16_h != nullptr ) { delete [] power16_h; power16_h = nullptr ; }
148
+
149
+ }
150
+ }
151
+ void releaseDevice (bool release32 = true , bool release16 = true ) {
152
+ if (release32) {
153
+ if ( data_d != nullptr ) { cudaFree ( data_d); data_d = nullptr ; }
154
+ if ( bias_d != nullptr ) { cudaFree ( bias_d); bias_d = nullptr ; }
155
+ if ( bias2_d != nullptr ) { cudaFree ( bias2_d); bias2_d = nullptr ; }
156
+ if ( scales_d != nullptr ) { cudaFree ( scales_d); scales_d = nullptr ; }
157
+ if ( mean_d != nullptr ) { cudaFree ( mean_d); mean_d = nullptr ; }
158
+ if (variance_d != nullptr ) { cudaFree (variance_d); variance_d = nullptr ; }
159
+ }
160
+ if (net->fp16 && release16) {
161
+ if ( data16_d != nullptr ) { cudaFree ( data16_d); data16_d = nullptr ; }
162
+ if ( bias16_d != nullptr ) { cudaFree ( bias16_d); bias16_d = nullptr ; }
163
+ if ( bias216_d != nullptr ) { cudaFree ( bias216_d); bias216_d = nullptr ; }
164
+ if ( scales16_d != nullptr ) { cudaFree ( scales16_d); scales16_d = nullptr ; }
165
+ if ( mean16_d != nullptr ) { cudaFree ( mean16_d); mean16_d = nullptr ; }
166
+ if (variance16_d != nullptr ) { cudaFree (variance16_d); variance16_d = nullptr ; }
167
+ }
168
+ }
129
169
};
130
170
131
171
0 commit comments