我在我的毕业项目上做了一些工作,并在 Lennard-Jones 势和库仑势下实现了几个分子结构 + 力计算 + 分子间键合(如图)
(http://img17.imageshack.us/img17/3133/simulasyon.png)
全部使用 Verlet 算法在一个线程中完成。
问题是:我正在使用“计算表”-array 来快速回答 x^(3.5),x^(1.4), (1/x).... 因为使用 java 的本机方法计算非常慢. 数组 - 访问时间真的很长,所以我尝试了“unsafe()”方法,但仍然很慢(只有 %10 的性能提升)。
试过 IntBuffer 和 DoubleBuffer 还是不行。
程序计算 O(n) 键计算,O(nlog(n)) Lennard-Jones(+ 额外泡利不相容原理)和 O(nlog(n)) 库仑力计算。1500+ 个粒子(和 7000+ 个键)的速度很差。
我已经检查了速度瓶颈在哪里(它是 Lennard Jones + Coulomb)。1500 个粒子的一个时间步计算需要 4 毫秒。我需要它是 1 毫秒。
只有当我可以像使用任何其他语言一样快地使用数组时(安全与否)。
还尝试用乘法和哈希图和列表替换除法(与数组的性能相同)。
你知道减少每个时间步的计算时间的任何其他方法吗?谢谢你。计算机:2.0 GHz 单核英特尔、1.2GB RAM、windows-XP SP-3 和 Eclipse Indigo。