cuDNN acceleration

Caffe + cuDNN is an NVIDIA-Caffe collaboration for deep learning. 
[cuDNN](https://developer.nvidia.com/cudnn) is an acceleration library for deep network operations with drop-in integration to Caffe.
It is a free library downloadable with CUDA developer registration.
*This combination is the fastest public framework for deep learning* with overall model speedups of 1.2-1.5x and layer-wise speedups of 1.2-3x over standard Caffe for the AlexNet / CaffeNet architectures.
Caffe + cuDNN lets you define your models just as before while taking advantage of these computational speedups.

In this first release cuDNN includes

- convolution
- pooling
- nonlinearities (ReLU, Sigmoid, TanH)
- softmax

These operations are drop-in accelerations of the Caffe layers. To switch on acceleration, set

    USE_CUDNN := 1

in your `Makefile.config` during installation. Layers will be accelerated by default.

NVIDIA and Caffe will coordinate future releases to further accelerate computation and introduce new features. NVIDIA has committed to tuning cuDNN to current and future GPU architectures.

Caffe is free and open-source and cuDNN is a CUDA developer library like cuBLAS and cuRAND.

Check out the cuDNN site, the [Caffe's latest roast slides](https://docs.google.com/presentation/d/1mlei57vB5-7_rFVMOOoP57pvCn3kQo3LTze4cEecLxw/edit#slide=id.g3aede17a4_0107), and [NVIDIA parallel forall blog announcement](http://devblogs.nvidia.com/parallelforall/accelerate-machine-learning-cudnn-deep-neural-network-library/)!

-----------------

Note on convolution: the cuDNN convolution aims to match or exceed the speed of Caffe's own matrix-multiplication approach while reducing memory usage. In many input and model regimes it accelerates the computation 1.3-3x and never requires buffers. In certain cases of fully-convolutional models or large inputs the Caffe convolution is slightly faster at the cost of more memory usage -- this is a direction for further optimization.

To pick the computational engine per-layer in your models, set the `engine: CAFFE`or `engine: CUDNN` field in the `{convolution,pooling,relu,sigmoid,tanh,softmax}_param` in your model definition:

    layers {
      type: CONVOLUTION
      ...
      convolution_param {
        engine: CAFFE
        ...
      }
    }