frnn is a fast recurrent neural network library written in c++, and uses CUDA and OpenMP for paralelization. It supports all possible configurations of RNN's.
Support will be provided for both CPU-GPU and CPU-only systems, and will determine which device to use for each function based on its complexity.
The code is well documented, with descripitons being provided for all classes, structs, functions and variables.
Additionally more thourough documentation will be provided on the frnn website, however, this will be slow as the primary focus is to first provide functionality with documentation in the code, and then for thorough documentation.
You will need to have the CUDA SDK installed as a large component of the code uses CUDA. Currently, there are not separate components in the makefiles for GPU and CPU versions, if there is no GPU the compiler will select the CPU implementations of the functions, thus the CUDA SDK is required for both versions (I realize this is a problem, and will work on rectifying it).
Additionally, the Makefiles assume that CUDA is installed as /usr/local/cuda-7.0, if this is not the case you will need to change this in the makefiles.
The makefiles use g++, thus it is required to build the code (again this will be changed to support any compiler).
Note: The intention is to have a config file in the future to allow for a custom install.
Tests are written for each of the component of the library and the makefile for the component can be found in its directory. For example, to test the functionality for the Tensor class, navigate to the Tensor directory (/src/tensor) and then (if the pre-requisits are installed) run make
to make the component tests.
The tests can then be run with ./<conponent_name>_tests
All tests for all components can also be run at once. Navigate to the /src directory and then run ```make`` which will make all tests.
All the test can then be run by ./all_tests
To clean components or all the tests, run make clean
from the same directory from which the make
command was issued, which will clean the executable and the object files.