有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

阵列我需要帮助Nbody分子模拟性能!!(java小程序)

我在毕业设计上做了一些工作,在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(+额外泡利不相容原理)和O(nlog(n))库仑力计算。 1500+粒子(和7000+键)时速度差

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

除非我能像其他语言一样快速地使用数组(安全与否)

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

你知道有没有其他方法可以减少每个时间步的计算时间? 非常感谢。 计算机:2.0 GHz单核英特尔、1.2GB内存、windows XP SP-3和Eclipse Indigo


共 (1) 个答案

  1. # 1 楼答案

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

    这看起来像是很多操作,但事实上,in可以在不影响内存的情况下完成(因此不会影响缓存),这会使它比查找表快得多