У меня есть код со следующей структурой:
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 (для некоторых расчетов вероятностей в функции 2), скомпилированные с использованием Visual Studio 2013 или компилятора Intel C++ 15.0 (в моем случае обе имеют одинаковую производительность)
Я пытаюсь реализовать Intel MKL для умножения матрицы на матрицу:
Поэтому, прежде чем реализовать его в своем коде, я создал простой проект для тестирования MKL с помощью Eigen, и он сработал (матрицы строятся с помощью Eigen, в то время как умножение матрицы на матрицу использует MKL, что сократило время расчета вдвое). Затем я внедрил MKL в свой код, но в этот раз он не сработал, время расчета не уменьшилось, в чем может быть причина?