机器指令fxtod应该是非常慢的

时间:2012-04-28 00:24:02

标签: optimization gcc sparc

我有一个程序,我试图执行一些循环优化它用C ++编写并使用gcc编译

最终使用分析器我将循环执行时间的一半以上追踪到了行

double x_component = in.input_vector[in.dimension_to_process] - \
       (center_of_bin_0 + (double) nn * grid_distance);

这一行上的所有内容都是double类型,但循环索引nn除外,它的类型为long unsigned int

从long unsigned int到double的转换生成了profiler标记的汇编指令fxtod

作为测试,我从行中删除了对nn的引用,从而将unsigned int中的强制转换为double,并且循环的执行时间减少了近一半,在一个执行大约十几个浮点运算的循环中Ultrasparc IV处理器。我确认在Ultrasparc II上也是如此,

从int到double的强制转换是否正常,缓存未命中,更不用说浮点数倍增了?如果是这样,其他人通常会怎么做呢?

nn的所有可能值的查找表(在这种情况下具有已知的有限范围)将比此更快

0 个答案:

没有答案