How to marshal multi-dimensional arrays
Solution 1:
By this discription about Blittable and Non-Blittable Types in the link below you could try the System.Double in place of float, because they do not require conversion when they are passed between managed and unmanaged code wich means no more special handling by the interop marshaler with a plus in performance: https://msdn.microsoft.com/en-us/library/75dwhxf7%28v=vs.110%29.aspx
I did a search and found this related topic wich may help you:
Threat like a single array: http://stackoverflow.com/a/18607817/4597705