MKL没有使用使用Eigen和OpenMP的C ++代码

时间:2015-04-27 15:08:36

标签: c++ eigen intel-mkl

我有一个具有以下结构的代码:

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编译(两者都具有类似的性能)

我正在尝试使用英特尔MKL进行矩阵乘法运算:

因此,在我的代码中实现它之前,我构建了一个简单的项目,用Eigen测试MKL并且它工作(矩阵用Eigen构建,而矩阵 - 矩阵乘法使用MKL,它将计算时间缩短了一半)。然后我将MKL实现到我的代码中,但这次没用,计算时间没有下降,原因可能是什么?

1 个答案:

答案 0 :(得分:5)

Eigen可以在引擎盖下使用MKL,因此你可以使用Eigen接口为你的矩阵让Eigen处理MKL。 在包含任何Eigen标题之前,您所要做的就是#define EIGEN_USE_MKL_ALL