У меня есть проект C ++, который использует матрицу Eigen.Для повышения производительности мне нужно получить профиль для этого.Я пробовал использовать gprof, но в профиле есть куча таких результатов, где он помечается как «спонтанный»:
<spontaneous>
[1] 48.8 2535.09 38010.25 GaugeField::read_lime_gauge_field_doubleprec_timeslices(double*, char const*, long, long) [1]
20857.12 0.00 3419496363/5297636514 Eigen::internal::gebp_kernel<std::complex<double>, std::complex<double>, long, Eigen::internal::blas_data_mapper<std::complex<double>, long, 0, 0>, 1, 4, false, false>::operator()(Eigen::internal::blas_data_mapper<std::complex<double>, long, 0, 0> const&, std::complex<double> const*, std::complex<double> const*, long, long, long, std::complex<double>, long, long, long, long) [2]
5844.01 11309.11 3350517373/3366570904 Eigen::internal::gebp_kernel<std::complex<double>, std::complex<double>, long, Eigen::internal::blas_data_mapper<std::complex<double>, long, 0, 0>, 1, 4, true, false>::operator()(Eigen::internal::blas_data_mapper<std::complex<double>, long, 0, 0> const&, std::complex<double> const*, std::complex<double> const*, long, long, long, std::complex<double>, long, long, long, long) [4]
Иногда вызов Eigen
напрямую помечается как спонтанный.
Я провожу 85% времени в частях, которые помечены как спонтанные.Это не очень полезно, так как я уже знаю, что в моем коде сжатия тензора вызовы Eigen будут самыми дорогими.Мне нужно знать, из какой части моего кода поступают эти вызовы.
Есть ли способ заставить gprof извлекать более полезную информацию из моей программы?