【发布时间】:2019-12-27 00:02:10
【问题描述】:
如何在具有多个内核的单台机器上使用 GNU 并行运行 grep 时设置块大小参数,基于“large_file”文件大小、“small_file”文件大小和我使用的机器以获得尽可能快的性能(或者如果我在这里缺少其他东西,请纠正我)?将其设置得太高或太低时会遇到哪些性能问题/速度瓶颈?我了解 what block-size 的作用,因为它以块的形式阻止了 large_file,并将这些块发送到每个作业,但我仍然错过了如何以及为什么会影响速度的可能性执行。
有问题的命令:
parallel --pipepart --block 100M --jobs 10 -a large_file.csv grep -f small_file.csv
其中 large_file.csv 的位置:
123456 1
234567 2
345667 22
和 small_file.csv 在哪里:
1$
2$
等等……
谢谢!
【问题讨论】:
-
我建议在这里查看阿姆达尔定律:cs.uky.edu/~jzhang/CS621/chapter7.pdf。在这个问题中需要考虑到从硬盘读取不是并行的,因为一次只能读取一个线程。
-
谢谢!我审查了它——很好的材料,谢谢你把它寄给我。我知道我受到硬盘固有的串行读取的限制,但问题源于以下观察,这使我相信其他参数可能会有所帮助:从一次运行到下一次使用类似大小的运行时,我得到了截然不同的运行时间小文件和大文件。我希望 block_size 是一种可以提供帮助的杠杆,但我不确定......
-
请记住,时间变化可能是由于操作系统当前拥有的资源的变化。要进行更“纯”的测试,请关闭所有可以关闭的程序,甚至在 Linux 内核模式下执行测试。
标签: grep gnu-parallel