我可以并行排序吗?

我可以并行排序吗?

例如对于bzip压缩包, 的并行版本bzip。有没有这样的并行化工具来sort提高性能?

答案1

从 coreutils 8.6 (2010-10-15) 开始,GNUsort已经并行排序以利用多个可用的处理器。因此,在这方面无法进一步改进,例如pigzpbzip2改进gzipbzip2

如果你的sort不是并行的,你可以尝试安装sort最新版本的GNUGNU 核心工具

使用 GNU 排序,您可以使用选项限制线程数--parallel

答案2

对排序最有帮助的一件事是给它尽可能多的内存,以减少交换,例如:

sort -S 20G

答案3

如果文件足够大,排序将导致磁盘交换,要么是因为分配的虚拟内存变得太大,要么是因为程序sort本身正在将块交换到磁盘并返回。较旧的sort实现更有可能具有这种“通过磁盘缓冲区排序”的行为,因为这是过去对大文件进行排序的唯一方法。

sort有一个-m选项可以帮助您。将文件分割成块可能会更快 - 比如split -l- 对它们进行独立排序,然后将它们合并在一起。

话又说回来,这可能正是“通过磁盘缓冲区排序”所做的。确定它是否有帮助的唯一方法是根据您的特定测试负载对其进行基准测试。关键参数将是您赋予 的行数split -l

答案4

我使用 获得了非常显着的收益sort -n,它需要所有选定列中的数值(浮点或整数),而不需要科学记数法。

另一种可能会给您的进程带来巨大改进的可能性是使用内存映射文件夹/dev/shm来处理中间文件。

相关内容