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