我需要帮助N体分子模拟性能!!(java applet)

时间:2012-06-20 18:33:32

标签: java arrays performance optimization particles

我在毕业设计上做了一些工作,并在Lennard-Jones势和库仑势+分子间键合(如图)中实现了几个分子结构+力计算

(http://img17.imageshack.us/img17/3133/simulasyon.png)

所有在一个线程中完成Verlet算法。

问题是:我使用“计算表” - 阵列快速回答x ^(3.5),x ^(1.4),(1 / x)....因为使用本机计算速度非常慢java的方法。数组 - 访问时间真的很高,所以我尝试了“unsafe()”方法,但仍然非常慢(只有%10性能增益)。

尝试过IntBuffer和DoubleBuffer但仍然没有好处。

程序计算O(n)键计算,O(nlog(n))Lennard-Jones(+额外Pauli排除原理)和O(nlog(n))库仑力计算。 1500+粒子(和7000+键)的速度很差。

我已经检查了速度瓶颈在哪里(它是Lennard Jones + Coulomb)。 1500粒子的一次计算需要4毫秒。我需要它是1毫秒。

只有我可以像任何其他语言一样快速使用数组(安全与否)。

还尝试用乘法和散列映射和列表替换除法(与数组相同的性能)。

您是否知道减少每个时间步计算时间的其他方法? 谢谢。 计算机:2.0 GHz单核intel,1.2GB RAM,windows-XP SP-3和Eclipse Indigo。

1 个答案:

答案 0 :(得分:1)

尝试使用切比雪夫多项式,而不是使用查找表。请记住,您只能在ln(k)步骤中取幂x ^ k。

它可能看起来像很多操作,但事实上,在没有命中内存(因此不影响缓存)的情况下可以使它明显快于查找表。