GNU Parallel -- 如何理解"block-size"设置,并猜测该设置什么?



在具有多个内核的单台机器上使用 GNU 并行运行 grep 时,如何根据"large_file"文件大小、"small_file"文件大小和我正在使用的机器来设置块大小参数以获得最快的性能(或者,如果我在这里缺少其他东西,请纠正我(?设置得太高或太低时会遇到哪些性能问题/速度瓶颈?我了解块大小的作用,因为它以块的形式阻止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$

等等...

谢谢!

parallel --pipepart --block -1 --jobs 10 -a large_file.csv grep -f small_file.csv

--block -1会将large_file.csv拆分为每个工作槽的一个块(此处为 10 个块(。拆分将即时完成,因此不会将其读取到 RAM 中进行拆分。

如果每行花费的时间大致相同,则拆分为 n 个大小均匀的块(其中 n = 并行运行的作业数(通常是有意义的。如果它变化很大(例如,有些行的处理时间比其他行长 100 倍(,那么切成更多位可能更有意义。例如--block -10将分成 10 倍于--block -1的块数。

最佳值很少可以提前猜测,因为它也可能取决于您的磁盘速度。因此,请尝试不同的值并确定瓶颈所在。它通常是磁盘I/O,CPU,RAM,命令启动时间之一。

最新更新