当前位置: 首页 > 知识库问答 >
问题:

为什么执行float by float矩阵乘法比执行int by int更快?

颜君浩
2023-03-14

共有1个答案

卫景明
2023-03-14

如果编译这两个简单的函数,它们基本上只是计算一个乘积(使用Eigen库)

#include <Eigen/Core>

int mult_int(const Eigen::MatrixXi& A, Eigen::MatrixXi& B)
{
    Eigen::MatrixXi C= A*B;
    return C(0,0);
}

int mult_float(const Eigen::MatrixXf& A, Eigen::MatrixXf& B)
{
    Eigen::MatrixXf C= A*B;
    return C(0,0);
}

使用-mavx2-s-o3标志,您将看到整型和浮点型非常相似的汇编程序代码。然而,主要区别在于vpmulld的延迟是vmulps的2-3倍,吞吐量仅为vmulps的1/2或1/4。(关于最近的Intel架构)

参考:Intel Intinsics Guide中,“吞吐量”指的是相互吞吐量,即如果没有延迟发生(稍微简化),每个操作使用多少时钟周期。

 类似资料:
  • C++:15秒(源) Python:6分13秒(来源) C++:45分钟(源) 蟒蛇:10小时后被杀死(来源) 为什么Strassen矩阵乘法比标准矩阵乘法慢得多? null null null

  • 问题内容: 在这里,使用hdf5进行矩阵乘法时,我使用hdf5(pytables)进行大型矩阵乘法,但令我惊讶的是,使用hdf5比使用普通numpy.dot更快,并且将矩阵存储在RAM中,这种行为的原因是什么? 也许在python中有一些更快的矩阵乘法功能,因为我仍然使用numpy.dot进行小块矩阵乘法。 这是一些代码: 假设矩阵可以容纳在RAM中:在10 * 1000 x 1000的矩阵上进行

  • 问题内容: 我正在研究大型矩阵乘法,并运行以下实验以形成基准测试: 从std normal(0平均值,1 stddev)随机生成两个4096x4096矩阵X,Y。 Z = X * Y Z的元素求和(以确保它们被访问)并输出。 这是朴素的C ++实现: 编译并运行: 这是Octave / matlab实现: 跑: 八度使用BLAS(我承担功能) 硬件是Linux x86-64上的i7 3930X,内

  • 问题内容: 昨天我问一个问题关于并行矩阵乘法Java 7中使用fork /join框架这里。在axtavt的帮助下,我的示例程序开始工作。现在,我仅使用Java 6功能来实现等效程序。我遇到了与昨天相同的问题,尽管应用了axtavt给我的反馈(我认为)。我在俯视什么吗?码: 问题答案: 阅读了这个问题后,我决定改编我的程序。我的新程序无需同步即可运行良好。谢谢您的想法,彼得。 新代码:

  • 我有一个关于平行编程的学校任务,我遇到了很多问题。我的任务是创建给定矩阵乘法代码的并行版本并测试其性能(是的,它必须按 KIJ 顺序): 这是我到目前为止想出的: 这就是我发现一些让我感到困惑的地方。这个并行版本的代码运行速度比非并行版本慢约 50%。速度的差异仅根据矩阵大小而略有变化(测试SIZE = 128,256,512,1024,2048和各种计划版本 - 动态,静态,到目前为止根本没有它

  • 主要内容:逐元素矩阵乘法,矩阵乘积运算,矩阵点积矩阵乘法是将两个矩阵作为输入值,并将 A 矩阵的行与 B 矩阵的列对应位置相乘再相加,从而生成一个新矩阵,如下图所示: 注意:必须确保第一个矩阵中的行数等于第二个矩阵中的列数,否则不能进行矩阵乘法运算。 图1:矩阵乘法 矩阵乘法运算被称为向量化操作,向量化的主要目的是减少使用的 for 循环次数或者根本不使用。这样做的目的是为了加速程序的计算。 下面介绍 NumPy 提供的三种矩阵乘法,从而进一步