passing SGMatrix around does not copy the memory, only the underlying structure that holds the memory. So we do "copy-by-value" for those (fast enough)