我很好奇我们是否最终会得到一个快速的JDK8日期时间库。几乎所有的
我消除了一些分支和除了一个之外的所有除法,但加速比预期更差。那么我的第一个问题是,一个使用多个除法的算法如何可能只需要约30个周期(吞吐量)。Holger的评论似乎已经回答了这个问题:除以一个小常数会被JIT编译为乘法。我手动完成并且现在一直以2倍的速度击败原始实现。 这个基准测试非常简单,只需迭代随机
仍然存在的问题是:当迭代数组时,两个简单的无内存访问实现的相同函数的行为如何改变?原始算法的减速要比我的严重得多。
我的算法可能不值得在这里复制,它没有文档,与原始算法一样晦涩难懂,并且只有非常基本的测试。
LocalDate
计算都使用toEpochDay
,所以我看了一下源代码,大量的除法和分支让我好奇能否做得更好。我消除了一些分支和除了一个之外的所有除法,但加速比预期更差。那么我的第一个问题是,一个使用多个除法的算法如何可能只需要约30个周期(吞吐量)。Holger的评论似乎已经回答了这个问题:除以一个小常数会被JIT编译为乘法。我手动完成并且现在一直以2倍的速度击败原始实现。 这个基准测试非常简单,只需迭代随机
LocalDate
数组,并将每个转换为toEpochDay
。尽管数据是随机的,但结果非常一致。数组的大小是一个参数,我的主要问题是2000到30000之间的大型减速来自哪里。随着数据不再适合L1缓存,应该会有一些减速,但两种算法的内存访问完全相同(即没有除了从数组中获取date
之外的操作)。仍然存在的问题是:当迭代数组时,两个简单的无内存访问实现的相同函数的行为如何改变?原始算法的减速要比我的严重得多。
我的算法可能不值得在这里复制,它没有文档,与原始算法一样晦涩难懂,并且只有非常基本的测试。