vivado hls loop unroll is sequential
HLS, Sigh!

I don't see much inherent parallelism in the way you have written this, lots of nested stuff that does not have obvious parallelism. 

I would be lifting your sub arrays out and having batch_size of them then the MAC could be parellelised across batch_size DSP blocks.

Also, where is weight_sub_array used? Your MAC is using the weights array directly?

You might be writing in something almost C like, but never forget you are describing hardware, not writing sequential code.