In a large dataset, the initial iterations are dominated by VNL matrix multiplication.
e.g.
gramMat = points_minus_mean.transpose() * points_minus_mean;
vnl_matrix_type Q = points_minus_mean * pinvMat;
Eigen is significantly faster and should be used instead.