【发布时间】:2012-08-16 11:18:29
【问题描述】:
我不太会 Java。
我正在编写一些优化的数学代码,我对我的分析器结果感到震惊。我的代码收集值,交错数据,然后根据它选择值。 Java 的运行速度比我的 C++ 和 MATLAB 实现要慢。
我正在使用javac 1.7.0_05
我正在使用 Sun/Oracle JDK 1.7.05
在代码中存在一个执行相关任务的 floor 函数。
- 有人知道解决此问题的典型方法吗?
-
我注意到我的
floor()函数是用名为StrictMath的东西定义的。 Java有类似-ffast-math的东西吗?我期望必须有一种方法可以将 floor 函数更改为计算上更合理的值,而无需自己编写。public static double floor(double a) { return StrictMath.floor(a); // default impl. delegates to StrictMath }
编辑
所以有几个人建议我尝试做演员表。我试过这个,walltime绝对没有变化。
private static int flur(float dF)
{
return (int) dF;
}
413742 铸楼功能
394675 Math.floor
这些测试是在没有分析器的情况下运行的。尝试使用分析器,但运行时间发生了巨大变化(15 分钟以上,所以我退出了)。
【问题讨论】:
-
如果您必须使用
StrictMath.*(通常比Math.*更准确)- 如果重复计算,您可能希望在地图中缓存地板结果楼层的值相同。 -
你能提供更多关于你的代码的上下文吗?
Math.floor()有多少电话?你使用什么样的数字?哦,C++ 或 MATLAB 在数学运算方面的速度更快这一事实并不令人惊讶。 -
@Nishant OP 声明
Math.floor()代表StrictMath.floor(),请参阅:grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/… -
@posdef 嘿,感谢您指出这一点。我看到
StrictMath使用原生 --public static native double floor(double a); -
即使在 C/C++ 中,
floor()的速度也非常慢。这并不是说地板是一项缓慢的操作。有一些按位技巧可以使它非常快。但是有许多极端情况需要检查和处理。 SSE4.1 指令集添加了用于舍入操作的本机指令,包括floor()。但访问这些需要 C/C++ 和编译器内在函数或程序集。
标签: java performance profiling floor