Checking the vectorization report of icc 2018 for fprop() shows that the loops got inlined, unrolled and vectorized (with AVX512 and AVX2 instructions using XMM/YMM registers). I doubt that doing it by hand would be faster, but it would make the code a lot more complex.
You have a point on the parallelization part though, it can be cleanly parallelized with a few OpenMP Pragmas.
Essentially this library is a demo toy that will need a lot to work to make useful in real conditions.
It's 200 lines of C, what were you expecting?
Let people enjoy things.
One of the core requirements of modern deep neural networks is performance. The high accuracy you get from very fast training over large amounts of data is the only reason to look at neural networks over very fast, very accurate systems like XGBoost.
If something doesn't deliver that, then it's worth pointing out that it is inadequate for anything but toy tasks.
[1] http://neuralnetworksanddeeplearning.com/chap1.html#implemen...
godbolt link of the source + assembly -- all I did was combine the header, source and test files:
https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaP...