It has versions for GPU and CPU, written on CUDA, C++ and Matlab. All versions work identically. The GPU version uses kernels from Alex Krizhevsky's library 'cuda-convnet2'.
In addition to the classic CNN capabilities the library supports max-pooling, rectified linear units, dropout, momentum, adjusted learning rates, SVM residuals on the last level, adjustment for unbalances datasets and more.
The code in all versions is quite clean and easy for understanding. If necessary, new types of the layers may be easily added without touching the most of the code.