Имам код със следната структура:
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 в моя код, но този път не проработи, времето за изчисление не падна, каква може да е причината?