From e4ab47dfcedb4c87e5eddf484caa4ac0c020fc9b Mon Sep 17 00:00:00 2001 From: AlexeyAB Date: Wed, 21 Feb 2018 15:35:09 +0300 Subject: [PATCH] Optimized resizing of region_layer for random=1 --- src/network.c | 1 + src/region_layer.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/network.c b/src/network.c index e83941ff..f3185a31 100644 --- a/src/network.c +++ b/src/network.c @@ -378,6 +378,7 @@ int resize_network(network *net, int w, int h) } #ifdef GPU if(gpu_index >= 0){ + printf(" try to allocate workspace, "); net->workspace = cuda_make_array(0, (workspace_size-1)/sizeof(float)+1); printf(" CUDA allocate done! \n"); }else { diff --git a/src/region_layer.c b/src/region_layer.c index d48e8d06..e8bbd5cc 100644 --- a/src/region_layer.c +++ b/src/region_layer.c @@ -53,6 +53,8 @@ region_layer make_region_layer(int batch, int w, int h, int n, int classes, int void resize_region_layer(layer *l, int w, int h) { + int old_w = l->w; + int old_h = l->h; l->w = w; l->h = h; @@ -63,11 +65,13 @@ void resize_region_layer(layer *l, int w, int h) l->delta = realloc(l->delta, l->batch*l->outputs*sizeof(float)); #ifdef GPU - cuda_free(l->delta_gpu); - cuda_free(l->output_gpu); + if (old_w < w || old_h < h) { + cuda_free(l->delta_gpu); + cuda_free(l->output_gpu); - l->delta_gpu = cuda_make_array(l->delta, l->batch*l->outputs); - l->output_gpu = cuda_make_array(l->output, l->batch*l->outputs); + l->delta_gpu = cuda_make_array(l->delta, l->batch*l->outputs); + l->output_gpu = cuda_make_array(l->output, l->batch*l->outputs); + } #endif }