Собственные сбои при нажатии матрицы на вектор - PullRequest
0 голосов
/ 29 января 2020

При компиляции с marhc=native этот код дает segfault:

// Compute all transformations matrices and put into a vector
std::vector<mu::MF4> smpl::get_all_transformations(const mu::MFX &new_joints, const mu::MFX &theta)
{
    std::vector<mu::MF4> G_vec;
    mu::MFX theta_star = mu::MFX::Zero(theta.rows(), theta.cols());
    for (auto k = 0; k < mu::NBRJOINTS; ++k)
    {
        mu::MF4 G_ = get_rigid_tr(theta, new_joints, k);
        mu::MF4 G_star = get_rigid_tr(theta_star, get_J(), k);
        mu::MF4 tmp = G_*G_star.inverse();
        std::cout<<"Before crash "<<std::endl;
        getchar();
        G_vec.push_back(tmp);
        std::cout<<"After crash"<<std::endl;
    }
    return G_vec;
}

mu::MFX/4 - это typedefs для Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> или Eigen::Matrix4f.

Когда я запускаю этот код, я получаю вывод

Before crash 

After crash
Before crash 

Segmentation fault

, когда я компилирую с march=native. Когда я компилирую без него, тогда он работает отлично. В чем может быть проблема? Мой коллега может запустить его с march-native, как я понял.

Я использую Eigen из диспетчера пакетов в Ubuntu 18.04, и у меня есть следующие флаги:

message(STATUS "Found Eigen headers in: ${EIGEN_INCLUDE_DIR}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -lrt -std=c++17 -O3 -fopenmp -march=native")

РЕДАКТИРОВАТЬ:

Я не смог воспроизвести его, но когда я переименовал все std::vector::mu::MF4> to std::vector<mu::MF4,Eigen::aligned_allocator<mu::MF4> >, кратер sh исчез. Кажется немного случайным, что это терпит неудачу на моем большом проекте, но это работает на маленьком примере.

...