# CNN-blocking
Tool for optimize CNN blocking

usage: run_optimizer.py [-h] [-s SCHEDULE] [-v]
                        {basic,mem_explore, dataflow_explore} arch network

positional arguments:
  
  {basic,mem_explore, dataflow_explore}   optimizer type

  arch                  architecture specification

  layer                 layer specification

optional arguments:

  -h, --help            show this help message and exit

  -s SCHEDULE, --schedule SCHEDULE restriction of the schedule space
  this is optional but restricting the schedule space will accelerate the scipt significantly

  -v, --verbose         vebosity


# Examples
## To optimize loop blocking.
Dataflow: C | K

Memory Architecture: 3 level

Network: AlexNet Conv3 Batch16

```
python ./tools/run_optimizer.py basic ./examples/arch/3_level_mem_basic_example.json ./examples/layer/alex_conv3_batch16.json -s ./examples/schedule/dataflow_C_K.json -v 
```

## To optimize memory capacity.
Dataflow: C | K

Memory Architecture: 3 level

Network: AlexNet Conv3 Batch16

```
python ./tools/run_optimizer.py mem_explore ./examples/arch/3_level_mem_explore_example.json ./examples/layer/alex_conv3_batch16.json -s ./examples/schedule/dataflow_C_K.json -v 
```

## To explore dataflow.
Dataflow: All

Memory Architecture: Eyeriss

Network: AlexNet Conv3 Batch16

```
python ./tools/run_optimizer.py dataflow_explore ./examples/arch/3_level_mem_basic_example.json ./examples/layer/alex_conv3_batch16.json -v
```

or:

```
python ./tools/run_optimizer.py dataflow_explore ./examples/arch/3_level_mem_basic_example.json ./examples/layer/alex_conv3_batch16.json -n user_defined_pickle_filename -v
```