需要帮助!无法解决这个问题,我遇到了硬件限制

 

有大量的信息(大约20GB的文本文件)。

这些信息由同类的序列组成,大约有一百万个。

有必要反复 浏览所有的序列,并进行一些计算。

首先想到的是读取文件的所有内容,将其填充到结构数组中,并在内存中对其进行操作。

但它出了问题,在下一次调整大小时,MT发誓说 "内存处理程序:不能分配5610000字节的内存"。

管理员同时告诉我,terminal.exe使用了3.5GB的内存(16个物理的)。我想这是因为该进程只能得到4GB。

在你开始之前

阅读2

阅读6%

阅读12%的内容

阅读15%

每个人都...

EA说 "内存不足 已用4007Mb,可用88Mb,共4095Mb)!!"。

而这仅仅是所需金额的15.3%(而且我希望将来也能增加)。


选项2--每次都读取文件。找到必要的片断,将其保存到结构中,读取下一个片断,比较结果,覆盖到结构中。

如果我不得不经历一次这些序列,这就是我将做的。但你必须多次经历它们,每次都要往前移一点。

所以你要读很多遍,这就是。

  • 非常、非常慢。
  • 擦拭螺丝上的一个洞。
我不确定我是否已经准备好等待几天的结果......

这也是令人沮丧的是,有多少信息...如果是10G,我会把它移到RAM-磁盘(事实上是移到内存中),并尽可能多地读取。是吗?

这是我能想到的全部。

试着重新编译这些序列,这样就会有很多很多的碎片,但每个碎片只包含目前必要的信息?

缩减数据(我已经在任何地方用char类型转换为浮点数)?但它最多只能给我10-20%,而我需要减少一个数量级的体积......

朋友们,有什么建议吗?我将会得到它 )

 

komposter:

朋友们,有什么建议吗?我会处理好的)。

作为选项...

1.制作自己的缓存。 在这种情况下,你可以控制内存中的内容。 你知道算法,所以你可以使缓存有效。

2.对文件使用映射,Wind会缓存它需要的东西,而且不会擦除硬盘。

 
TheXpert:

作为选项...

1.制作自己的缓存。 在这种情况下,你将能够自己管理所有的内容。

2.对文件使用映射,vin本身会缓存它需要的东西,所以它不会覆盖磁盘。

1.这是缓存...或者我不明白你的意思。我的选择是不断阅读必要的大块内容?

2.你能再详细说明一下吗?绘图将做什么,以何种方式进行?

 
我开始掌握绘图的技巧了。我将研究更多的法力,然后去矿场)。
 

哦,该死...

32-битные архитектуры (Intel 386, ARM 9) не могут создавать отображения длиной более 4 Гб

同样的鸡蛋,但从侧面看。阅读速度可能会加快,但并不能在全球范围内解决问题。

 

另一个想法是把所有的东西都移到一个数据库(MySQL?这个想法是,数据库是为这种数量和不断挖掘而设计的。

有什么专家吗?谁有话要说?

 

1)有什么办法可以重做算法吗?加载一个块(2GB),处理它,保存结果(更短),释放内存,加载下一个块......

并在最后将所有的结果重新处理一遍。

2)当有大量的内存工作时,基于哈希的解决方案、B-树(及其修改)、卸载到数据库都是相关的。

 
ALXIMIKS:

1)有什么办法可以重做算法吗?加载一个块(2GB),处理它,保存结果(更短),释放内存,加载下一个块......

并在最后将所有的结果重新处理一遍。

2)当有大量的内存工作时,基于哈希的解决方案、B-树(及其修改)、卸载到数据库是相关的。

1.我写过 - 你可以,但问题是你必须多次处理数据。这将是非常缓慢的。

2.明天我自己去谷歌,我会感谢简短的描述。

 
komposter:

1.我已经写过了--你可以,但问题是你必须多次处理数据。这将是非常缓慢的。

2.明天我自己谷歌一下,如果能有一个简单的描述,我将非常感激。

我记得有一个网站 讨论了一个类似的问题和在C++中的解决方案的变种。

Отсортировать строки в файле размером 3GB | FulcrumWeb
Отсортировать строки в файле размером 3GB | FulcrumWeb
  • www.fulcrumweb.com.ua
Необходимо написать алгоритм, который бы смог отсортировать строки в файле большого размера (от 2-х до 4-х Gigabytes). Результатом выполнения должен быть другой файл. За хорошую реализацию гарантированный приз – флешка для хранения таких файлов и, возможно, предложение работы в нашей компании.
 
我很抱歉,但如果你尝试64位或MT只运行32位怎么办?
我天真地以为,这样一个高度数学化的东西应该在64位上运行。
以飞机的空气动力学计算为例,它们在32x上根本不起作用。
关于基本的论点,即32倍的机器运行速度更快,我知道,但这确实是一个硬件问题,我认为。
 

1.当然,要使用x64系统。

2.在亚马逊EC2云中租一台更强大的机器,在上面做计算。

3.使用压缩数据,在内存中即时解压。如果你把真实数据分成流(符号/尾数/指数),压缩效果会更好;你可以使用12位浮点数(以牺牲精度为代价)。

4.用能处理大数据的东西(Matlab/R/等)做一个非顾问的计算。