当前位置:  开发笔记 > 编程语言 > 正文

处理Java中的大型数据结构

如何解决《处理Java中的大型数据结构》经验,为你挑选了1个好方法。

我正在研究一个需要处理非常大的矩阵的Java应用程序.例如,乘以两个1000万*1000万个矩阵!当然,即使存储这些矩阵中的一个,Java堆也没有足够的空间.我该怎么办?我是否应该使用数据库来存储我的矩阵并将每个所需的部分存储到内存中并将其逐个加倍?



1> puetzk..:

首先,1000万x 1000万的矩阵非常庞大.假设每个单元都有双打,没有存储过载,那么这些东西中的每一个都将达到800太字节.只需从主存储器读取每个单元格(如果它在某种程度上神奇地适合那里,显然没有发生),需要几天时间.从任何类似的合理SAN(我们将它放在10GbE上)这样做更有可能是几个月.并且矩阵乘法没有O(n)复杂度 - 正常方法是O(n ^ 3).所以......你不是在使用内存映射文件,公共数据库或任何类似的东西.

执行类似这样的代码将在缓存效率上生存或死亡,其中"缓存"包括充分利用主内存,本地磁盘驱动器.由于任何存储接口超过一个800 TB的存储接口都必然是某种类型的SAN,因此您几乎肯定会涉及多个服务器读取和处理它的不同部分.

有许多公知的方法来parallelise矩阵乘法(基本上乘各种大小的子矩阵,然后合并结果),并通过组织周围的数据,使得访问模式具有合理缓存局部性移位布局空间填充曲线代替行/列安排.你肯定会想要看看经典的LAPACK接口和设计,英特尔的MKL,GotoBLAS作为调整到特定现代硬件的BLAS功能的实现,之后你可能冒险进入未开发的领域:-)

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有