By default MLX computations are lazy. mlx_eval(x) forces the computations
behind x to run. You can do the same by calling (e.g.)
as.matrix(x).
Examples
system.time(x <- mlx_rand_normal(1e7))
#> user system elapsed
#> 0.000 0.000 0.001
system.time(mlx_eval(x))
#> user system elapsed
#> 0.120 0.003 0.122