MKL не работи на C++ код, който използва Eigen и OpenMP

Имам код със следната структура:

Eigen::MatrixXd function1(args)
{
    #pragma omp parallel for
    for (args)
        //filling a matrix element-wise

    return matrix;
}

Eigen::MatrixXd function2(argument is function1 matrix)
{
    #pragma omp parallel for
    for (args)
        //element-wise probabilities calculations on matrix from function1

    return matrix;
}

Eigen::MatrixXd global_function(args)
{
    Eigen::MatrixXd ident; //identity matrix

    for (args)
    {
        Eigen::MatrixXd mat = function1(args);
        Eigen::MatrixXd mat2 = function2(mat);
        ident = ident * mat2;
    }

    return matrix;
}

Има повече функции, но схемата е същата. Матриците са с размери от 500x500 до 1000x1000 Кодът използва библиотеките: Eigen (за изграждане на матрици) и Boost (за някои изчисления на вероятностите на function2), компилирани с помощта на Visual Studio 2013 или Intel C++ компилатор 15.0 (и двете имат сходна производителност в моя случай)

Опитвам се да внедря Intel MKL за умножения матрица-матрица:

Така че преди да го внедря в моя код, създадох прост проект за тестване на MKL с Eigen и той проработи (матриците се изграждат с Eigen, докато умноженията матрица-матрица използват MKL, това намали времето за изчисление наполовина). След това внедрих MKL в моя код, но този път не проработи, времето за изчисление не падна, каква може да е причината?


person Naucle    schedule 27.04.2015    source източник
comment
Моля, предоставете stackoverflow.com/help/mcve   -  person Jeff Hammond    schedule 05.07.2015


Отговори (1)


Eigen може да използва MKL под капака, така че можете просто да използвате интерфейса на Eigen за вашите матрици и да оставите Eigen да се занимава с MKL. Всичко, което трябва да направите е #define EIGEN_USE_MKL_ALL преди да включите Eigen заглавки.

person Julien    schedule 06.05.2015
comment
Вече знаех това, проблемът е, че не работеше без видима причина. Но проработи на следващия ден, така че или бях достатъчно глупав да повярвам, че не е, или рестартирането на системата реши проблема по някаква причина. - person Naucle; 06.05.2015