![]() |
1
11
一 幼稚的方法 可以简单地说:
这将使多达3个CPU保持忙碌。
如果你能产生几个输入文件 通过将工作细分到排序阶段,您将能够:
这将用到
进一步改进以提高
如果不可能有多个输入文件 你可以 模拟他们 (增加I/O开销,有望按可用进程数摊销):
因为我们使用模行号,所以我们有很好的局部性,并且文件系统缓存应该理想地带来反复读取输入文件的成本。
甚至更好
,只读取一次输入文件,并将输入行循环成多个
你应该衡量不同价值观的表现
编辑
如其他文章所示,您当然可以使用
编辑2更新了您提供的文件名约定的所有脚本,并修复了上一个版本中的错误。
另外,使用新的文件名约定,如果I/O不是瓶颈,
非常微小的变化
|
![]() |
2
5
我想知道这会有多快:
不过,并没有利用很多核心。 |
![]() |
3
1
因为您不需要排序,只需复制到bucket中,所以您可以按令牌数量拆分文件,这将是最快的:
顺便说一句,磁盘将是核心和使用的瓶颈。 |
![]() |
4
1
作为参考,我需要添加到版本8.6(2010)中,gnu coreutils(包括sort)支持多线程排序。默认情况下,我认为(从v8.6开始)它将使用核心数作为线程数,但是您可以使用
|
![]() |
5
0
要创建高效的文件,我应该执行如下操作:对文件进行两次解析: 在第一遍中逐行读取,记录三样东西:行号、文件偏移量和字数。这可以并行化而不太困难(对于在文件中以“随机”行开始的作业,只需在单词后面添加相应的开始编号)。 现在按每行单词数对三个记录的内容进行排序。然后迭代列表,寻找相应的开始偏移量。 从性能的角度来看,所有的搜索可能都很慢,但在内存消耗方面应该相对比较轻,每行只需要3个int。 |
![]() |
6
0
虽然sort可以绕过内存限制,但不确定它的性能如何。 |
![]() |
7
0
我不确定自己是否正确理解了这个问题,但我认为类似于快速排序的方法可能会有帮助:
根据传递的次数,应该接近完全排序的文件。 注意 这不是一个完美的解决方案 . 然而,即使在几次传递中,它也应该为您提供第一个临时文件中最长行的合理排序列表(我假设原始长文件中行的长度为高斯分布)。 注:如果部分文件仍然大于可用内存,请再次拆分它们,直到它们合适为止(具体取决于对每个文件使用的排序算法,tho)。但在这种情况下,需要将传递次数加倍才能得到合理的近似值 ps2:我还假设您对一个完全排序的文件不感兴趣,而是更感兴趣的是数据的统计意义(即如何 长的 平均排长队等)。 |
![]() |
Rewind · 同时搜索最大值/最小值的操作顺序 9 月前 |
![]() |
badbee · 使用xsl:sort时保留未排序元素的问题 10 月前 |
![]() |
josepmaria · Pandas顺序列,按对列出 1 年前 |
![]() |
BTBts · Python3文件名的字母数字排序[重复] 1 年前 |
|
Paul-ET · 对树状图应用程序发送的第一列进行排序失败 1 年前 |
![]() |
VonDerHase · 从列表中删除特定值,Python 1 年前 |
![]() |
Nico44044 · JS对数组进行排序,数组末尾为null和空值 1 年前 |