不同原始类型的乘法速度

时间:2018-08-30 22:50:13

标签: c++ performance cpu-architecture

byte,short,int和long的乘法速度是否相同,还是对数,线性,指数增长? 我写了一个小程序来测试它。结果全部返回0;

#include <unistd.h>
#include <chrono>
#include <iostream>

using namespace std;
using namespace std::chrono;

int main()
{
    short a = 0xffea, b = 0xffaa;
    int result, ia = 0xffeaffae, ib = 0xeaffaeff;
    long iresult, la = 0xffeaffaeffdaffad, lb = 0xeaffaeffdaffadff;
    long long lresult;

    auto start = high_resolution_clock::now();
    result = a * b;
    auto end = high_resolution_clock::now();
    auto dur = duration_cast<microseconds>(end - start);

    cout << "short multiplication : " << dur.count() << endl;

    start = high_resolution_clock::now();
    iresult = ia * ib;
    end = high_resolution_clock::now();
    dur = duration_cast<microseconds>(end - start);

    cout << "int multiplication : " << dur.count() << endl;

    start = high_resolution_clock::now();
    lresult = la * lb;
    end = high_resolution_clock::now();
    dur = duration_cast<microseconds>(end - start);

    cout << "long multiplication : " << dur.count() << endl;

    return 0;
 }

我假设64位处理器可以以相同的速度计算原始类型;

谢谢

1 个答案:

答案 0 :(得分:1)

这取决于机器。对于本机数据类型,乘法指令消耗的周期数是相关的。为了明确说明所使用的说明,请使用内联汇编或检查汇编输出。对于Intel处理器,this document列出了许多指令的CPU周期。

rtdsc instruction和其他类似cpuid的代码可能会让您大致了解代码的各个部分使用了多少个cpu周期,但是您最好研究一下汇编或对应用程序进行性能分析。

但是在大​​多数情况下,这些都与实践无关。它们大约需要一个周期,大约是0,000000001秒。

在大多数情况下,您可以坚持自己的假设,并认为乘法对于所有本机数据类型具有相同的成本。