在 Linux 上的 x86 CPU 上哪个操作应该更快,平均差异是多少(以 % 为单位):
unsigned int x, y, z;
x = y / z;
或者:
double x, y, z;
x = y / z;
double 上的操作将由 FPU 执行,CPU 可能会继续执行其他命令。这是正确的吗?它是否取决于编译标志(我正在使用带有-O3
标志的 gcc)?
在 Linux 上的 x86 CPU 上哪个操作应该更快,平均差异是多少(以 % 为单位):
unsigned int x, y, z;
x = y / z;
或者:
double x, y, z;
x = y / z;
double 上的操作将由 FPU 执行,CPU 可能会继续执行其他命令。这是正确的吗?它是否取决于编译标志(我正在使用带有-O3
标志的 gcc)?
如果您的工作本质上是基于整数的,则 int-float 和 float-int 转换可能会破坏任何性能优势。C 的默认转换(截断)在较旧的 Intel 芯片上可能特别慢。
除此之外,您的想法存在正确性问题,这可能是不这样做的充分理由。
一个单独的浮点除法指令将花费比整数一更长的时间。但是,如果您连续做很多事情,由于流水线(至少在现代 x86 上),它们将达到大致相同的速率。
哦,是的,CPU 可以在 FPU 忙时进行其他操作。
积分运算通常比浮点运算更快。区别主要取决于硬件:有些平台甚至没有 FPU。
这样一个简单的操作根本不应该依赖于您的操作系统或编译器标志:这应该是一些直接的汇编指令。
找出任何操作需要多少时间的最佳方法是查看平台的组装手册或运行基准测试。