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位处理器可以以相同的速度计算原始类型;
谢谢
答案 0 :(得分:1)
这取决于机器。对于本机数据类型,乘法指令消耗的周期数是相关的。为了明确说明所使用的说明,请使用内联汇编或检查汇编输出。对于Intel处理器,this document列出了许多指令的CPU周期。
rtdsc instruction和其他类似cpuid的代码可能会让您大致了解代码的各个部分使用了多少个cpu周期,但是您最好研究一下汇编或对应用程序进行性能分析。
但是在大多数情况下,这些都与实践无关。它们大约需要一个周期,大约是0,000000001秒。
在大多数情况下,您可以坚持自己的假设,并认为乘法对于所有本机数据类型具有相同的成本。