17
#if (__cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L)) && !defined(__riscv) && !NCNN_SIMPLESTL
18
#define USE_CXX11_CLOCK 1
20
#define USE_CXX11_CLOCK 0
33
#define WIN32_LEAN_AND_MEAN
41
#include "layer/convolution.h"
42
#include "layer/convolutiondepthwise.h"
43
#include "layer/deconvolution.h"
44
#include "layer/deconvolutiondepthwise.h"
45
#include "layer/convolution3d.h"
46
#include "layer/convolutiondepthwise3d.h"
47
#include "layer/deconvolution3d.h"
48
#include "layer/deconvolutiondepthwise3d.h"
55
double get_current_time()
58
auto now = std::chrono::high_resolution_clock::now();
59
auto usec = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch());
60
return usec.count() / 1000.0;
65
QueryPerformanceFrequency(&freq);
66
QueryPerformanceCounter(&pc);
68
return pc.QuadPart * 1000.0 / freq.QuadPart;
71
gettimeofday(&tv, NULL);
73
return tv.tv_sec * 1000.0 + tv.tv_usec / 1000.0;
78
void sleep(unsigned long long int milliseconds)
80
#if USE_CXX11_CLOCK && NCNN_THREADS
81
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
85
#elif defined(__unix__) || defined(__APPLE__)
86
usleep(milliseconds * 1000);
89
ts.tv_sec = milliseconds * 0.001;
100
void benchmark(const Layer* layer, double start, double end)
102
fprintf(stderr, "%-24s %-30s %8.2lfms", layer->type.c_str(), layer->name.c_str(), end - start);
103
fprintf(stderr, " |");
104
fprintf(stderr, "\n");
107
void benchmark(const Layer* layer, const Mat& bottom_blob, Mat& top_blob, double start, double end)
109
fprintf(stderr, "%-24s %-30s %8.2lfms", layer->type.c_str(), layer->name.c_str(), end - start);
111
char in_shape_str[64] = {'\0'};
112
char out_shape_str[64] = {'\0'};
114
if (bottom_blob.dims == 1)
116
sprintf(in_shape_str, "[%3d *%d]", bottom_blob.w, bottom_blob.elempack);
118
if (bottom_blob.dims == 2)
120
sprintf(in_shape_str, "[%3d, %3d *%d]", bottom_blob.w, bottom_blob.h, bottom_blob.elempack);
122
if (bottom_blob.dims == 3)
124
sprintf(in_shape_str, "[%3d, %3d, %3d *%d]", bottom_blob.w, bottom_blob.h, bottom_blob.c, bottom_blob.elempack);
126
if (bottom_blob.dims == 4)
128
sprintf(in_shape_str, "[%3d, %3d, %3d, %3d *%d]", bottom_blob.w, bottom_blob.h, bottom_blob.d, bottom_blob.c, bottom_blob.elempack);
131
if (top_blob.dims == 1)
133
sprintf(out_shape_str, "[%3d *%d]", top_blob.w, top_blob.elempack);
135
if (top_blob.dims == 2)
137
sprintf(out_shape_str, "[%3d, %3d *%d]", top_blob.w, top_blob.h, top_blob.elempack);
139
if (top_blob.dims == 3)
141
sprintf(out_shape_str, "[%3d, %3d, %3d *%d]", top_blob.w, top_blob.h, top_blob.c, top_blob.elempack);
143
if (top_blob.dims == 4)
145
sprintf(out_shape_str, "[%3d, %3d, %3d, %3d *%d]", top_blob.w, top_blob.h, top_blob.d, top_blob.c, top_blob.elempack);
148
fprintf(stderr, " | %22s -> %-22s", in_shape_str, out_shape_str);
150
if (layer->type == "Convolution")
152
fprintf(stderr, " kernel: %1d x %1d stride: %1d x %1d",
153
((Convolution*)layer)->kernel_w,
154
((Convolution*)layer)->kernel_h,
155
((Convolution*)layer)->stride_w,
156
((Convolution*)layer)->stride_h);
158
else if (layer->type == "ConvolutionDepthWise")
160
fprintf(stderr, " kernel: %1d x %1d stride: %1d x %1d",
161
((ConvolutionDepthWise*)layer)->kernel_w,
162
((ConvolutionDepthWise*)layer)->kernel_h,
163
((ConvolutionDepthWise*)layer)->stride_w,
164
((ConvolutionDepthWise*)layer)->stride_h);
166
else if (layer->type == "Deconvolution")
168
fprintf(stderr, " kernel: %1d x %1d stride: %1d x %1d",
169
((Deconvolution*)layer)->kernel_w,
170
((Deconvolution*)layer)->kernel_h,
171
((Deconvolution*)layer)->stride_w,
172
((Deconvolution*)layer)->stride_h);
174
else if (layer->type == "DeconvolutionDepthWise")
176
fprintf(stderr, " kernel: %1d x %1d stride: %1d x %1d",
177
((DeconvolutionDepthWise*)layer)->kernel_w,
178
((DeconvolutionDepthWise*)layer)->kernel_h,
179
((DeconvolutionDepthWise*)layer)->stride_w,
180
((DeconvolutionDepthWise*)layer)->stride_h);
182
else if (layer->type == "Convolution3D")
184
fprintf(stderr, " kernel: %1d x %1d x %1d stride: %1d x %1d x %1d",
185
((Convolution3D*)layer)->kernel_w,
186
((Convolution3D*)layer)->kernel_h,
187
((Convolution3D*)layer)->kernel_d,
188
((Convolution3D*)layer)->stride_w,
189
((Convolution3D*)layer)->stride_h,
190
((Convolution3D*)layer)->stride_d);
192
else if (layer->type == "ConvolutionDepthWise3D")
194
fprintf(stderr, " kernel: %1d x %1d x %1d stride: %1d x %1d x %1d",
195
((ConvolutionDepthWise3D*)layer)->kernel_w,
196
((ConvolutionDepthWise3D*)layer)->kernel_h,
197
((ConvolutionDepthWise3D*)layer)->kernel_d,
198
((ConvolutionDepthWise3D*)layer)->stride_w,
199
((ConvolutionDepthWise3D*)layer)->stride_h,
200
((ConvolutionDepthWise3D*)layer)->stride_d);
202
else if (layer->type == "Deconvolution3D")
204
fprintf(stderr, " kernel: %1d x %1d x %1d stride: %1d x %1d x %1d",
205
((Deconvolution3D*)layer)->kernel_w,
206
((Deconvolution3D*)layer)->kernel_h,
207
((Deconvolution3D*)layer)->kernel_d,
208
((Deconvolution3D*)layer)->stride_w,
209
((Deconvolution3D*)layer)->stride_h,
210
((Deconvolution3D*)layer)->stride_d);
212
else if (layer->type == "DeconvolutionDepthWise3D")
214
fprintf(stderr, " kernel: %1d x %1d x %1d stride: %1d x %1d x %1d",
215
((DeconvolutionDepthWise3D*)layer)->kernel_w,
216
((DeconvolutionDepthWise3D*)layer)->kernel_h,
217
((DeconvolutionDepthWise3D*)layer)->kernel_d,
218
((DeconvolutionDepthWise3D*)layer)->stride_w,
219
((DeconvolutionDepthWise3D*)layer)->stride_h,
220
((DeconvolutionDepthWise3D*)layer)->stride_d);
222
fprintf(stderr, "\n");