This project parallelizes the popular serial library for ANN, genann - https://codeplea.com/genann
The training data used is mnist. This code uses mnist loader from Nuri Park's project - https://github.com/projectgalateia/mnist
MPI version - Very fast, gradual drop in accuracy (due to averaging weights between nodes after each iterations). Uses the library as is and runs the training distributedly. The additions are all made to MPI_example.c OMP version - Work in progress - give lesser accuracy, optimal at 8 threads. Changed the train function in the library to make use of shared memory parallelism. (see omp_genann.c and omp_example.c)
You can use make command to get the executables for each of the versions or follow the instructions below:
Instructions to run the original version
- gcc -lm -o exe genann.c example.c
- ./exe
Instructions to run MPI version
- mpicc -lm -o mpi_exe genann.c mpi_example.c
- mpirun -n 4 ./mpi_exe
Instructions to run OMP version
- gcc -lm -fopenmp -o omp_exe omp_genann.c omp_example.c
- export OMP_NUM_THREADS=4
- ./omp_exe