| | |
| | | l->x_norm = realloc(l->x_norm, l->batch*l->outputs*sizeof(float)); |
| | | } |
| | | |
| | | if (l->xnor) { |
| | | //l->binary_input = realloc(l->inputs*l->batch, sizeof(float)); |
| | | } |
| | | |
| | | #ifdef GPU |
| | | if (old_w < w || old_h < h) { |
| | | cuda_free(l->delta_gpu); |
| | |
| | | l->x_gpu = cuda_make_array(l->output, l->batch*l->outputs); |
| | | l->x_norm_gpu = cuda_make_array(l->output, l->batch*l->outputs); |
| | | } |
| | | |
| | | if (l->xnor) { |
| | | cuda_free(l->binary_input_gpu); |
| | | l->binary_input_gpu = cuda_make_array(0, l->inputs*l->batch); |
| | | } |
| | | } |
| | | #ifdef CUDNN |
| | | cudnn_convolutional_setup(l, cudnn_fastest); |
| | |
| | | size_t total_byte; |
| | | check_error(cudaMemGetInfo(&free_byte, &total_byte)); |
| | | if (l->workspace_size > free_byte || l->workspace_size >= total_byte / 2) { |
| | | printf(" used slow CUDNN algo without Workspace! Need memory: %d, available: %d\n", l->workspace_size, (free_byte < total_byte/2) ? free_byte : total_byte/2); |
| | | printf(" used slow CUDNN algo without Workspace! Need memory: %zu, available: %zu\n", l->workspace_size, (free_byte < total_byte/2) ? free_byte : total_byte/2); |
| | | cudnn_convolutional_setup(l, cudnn_smallest); |
| | | l->workspace_size = get_workspace_size(*l); |
| | | } |