It is expected that this function will be executed only once for a given matrix and a
particular operation type.
This function requires a significant amount of extra storage that is proportional to the
matrix size. It is executed asynchronously with respect to the host and may return
control to the application on the host before the result is ready.