首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要关于N-body分子模拟性能的帮助!!(Java applet)

我需要关于N-body分子模拟性能的帮助!!(Java applet)
EN

Stack Overflow用户
提问于 2012-06-21 02:33:32
回答 1查看 276关注 0票数 1

我在毕业设计中做了一些工作,在Lennard-Jones势和Coulomb势+分子间键的情况下实现了几种分子结构+力的计算(如图)。

(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.2 SP内存,windows-XP SP-3和Eclipse Indigo。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 10:50:17

尝试使用Chebyshev多项式,而不是使用查找表。请记住,您只能在ln(k)步中对x^k求幂。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11125948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档