首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么同尺寸矩阵的内积在本征中花费的时间很不一样?

为什么同尺寸矩阵的内积在本征中花费的时间很不一样?
EN

Stack Overflow用户
提问于 2017-06-28 06:52:35
回答 1查看 92关注 0票数 1

我用本征计算了两个矩阵的内积,第一个是A=(B_C).eval(),第二个是D=(E_F).eval()。这里,B,C,E,F是相同的大小(1500 * 1500),但数值不同。我发现第一个大约200毫秒,第二个大约6000毫秒,我不知道为什么会这样。

代码语言:javascript
复制
#include <iostream>
#include <time.h>

#include "Eigen/Dense"

int main() {
    clock_t start, stop;

    Eigen::MatrixXf mat_a(1200, 1500);
    Eigen::MatrixXf mat_b(1500, 1500);
    Eigen::MatrixXf mat_r(1000, 1300);
    int i, j;
    float c = 0;
    for (i = 0; i < 1200; i++) {
        for (j = 0; j < 1500; j++) {
            mat_a(i, j) = (float)(c/3 * 1.0e-40);
            //if (i % 2 == 0 && j % 2 == 0) mat_a(i, j);
            c++;
        }
    }
    //std::cout << mat_a.row(0) << std::endl;
    c = 100;
    for (i = 0; i < 1500; i++) {
        for (j = 0; j < 1500; j++) {
            mat_b(i, j) = (float)(c/3 * 0.5e-10);
            c++;
        }
    }
    //std::cout << mat_b.row(0) << std::endl;

    start = clock();
    mat_r = mat_a * mat_b;
    stop = clock();
    std::cout << stop - start << std::endl;
    getchar();
    return 0;
}

如上面的示例代码所示。我发现这是由矩阵的值引起的,当mat_a值为e-40,mat_b值为e-10时,这个问题就会稳定发生。

有人能解释吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 11:56:27

这是因为您的矩阵包含非正态数,对于CPU处理起来比较慢。您应该确保您使用的是合理的单位,以便这些单位可以被认为是零,然后启用刷新为零(FTZ)和取消-零标志(DAZ),例如使用编译器的快速数学模式或在运行时,请参阅这个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44795503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档