java - 我需要 N 体分子模拟性能方面的帮助!(java 小程序)

标签 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 的 native 方法计算速度非常慢。数组 - 访问时间非常长,因此我尝试了“unsafe()”方法,但仍然很慢(仅提高了 %10 的性能)。

尝试了 IntBuffer 和 DoubleBuffer 还是不行。

程序计算 O(n) 键计算、O(nlog(n)) Lennard-Jones(+ 额外泡利不相容原理)和 O(nlog(n)) 库仑力计算。 超过 1500 个粒子(和 7000 多个键)时速度较差。

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

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

还尝试用乘法、 HashMap 和列表替换除法(与数组具有相同的性能)。

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

最佳答案

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

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

关于java - 我需要 N 体分子模拟性能方面的帮助!(java 小程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125948/

相关文章:

python - 为什么复杂的共轭 react 如此缓慢?

python - 在Python中填充二维数组的有效方法

java - 尝试从 AngularJS 到 Spring MVC 使用 $http.post 服务时出现错误 415 - Maven

java - Webdriver findElement 按输入类返回 "no such element"

java - 如何使用两个按钮将一个 servlet 重定向到另外两个 servlet?

arrays - 是字符串中包含的任何数组项

java - 从数据库而不是 xml 触发quartz作业

arrays - 为什么汇编代码在加总和之前将值从 %edx 复制到 %rcx?

C++ - 参差不齐的 4d 数组

java - 从 XML 中多次提取数据的最佳且优化的方法是什么?