【问题标题】:--parallel=N not delivering required results--parallel=N 没有提供所需的结果
【发布时间】:2015-05-11 13:39:35
【问题描述】:

我一直在比较使用正常和并行运行的示例数据生成脚本。我正在使用 GNU 库“并行”来并行运行脚本。该脚本在 100 列和不同行大小的固定列中生成随机记录。下面是我生成随机记录的sn-p:

for i in $(seq $rows)
do
tr -dc A-Za-z0-9 < /dev/urandom | head -c 2000 > tmp
gawk '$1=$1' FIELDWIDTHS='I put here the varying column lengths' OFS=, tmp >> tmp1
done

以下是我收集的统计数据:

"# of Rows" "# of columns"  "Time took(sec)"    "Time took, using & (sec)"  "Time took Parallelism=4(sec)"
100     100 1   1   ~0
1000    100 6   5   5
10000   100 51  59  51
100000  100 895 576 543
1000000 100 10462   11765   11468

即使我使用“并行”实用程序引入并行处理,与正常处理相比,我看不到经过的时间有任何变化。任何想法、见解和帮助将不胜感激。

我的 CPU 有 4 个核心,我想确保程序在执行时利用所有核心。

谢谢, 阿迪尔

【问题讨论】:

  • 您可能想确定瓶颈在哪里。
  • Maxim,由于我没有使用任何手动程序在脚本中引入并行性,因此瓶颈识别本身就是一个瓶颈。但是,我可以在脚本执行时看到 mstat,所有内核都在某个或另一个时刻被使用,但 %idle time 的主要部分几乎一直保持较高(
  • 我会研究如何从 /dev/urandom 读取数据。

标签: unix parallel-processing


【解决方案1】:

我发现了错误,你会说DOH!

你写到 > tmp.因此,如果您并行运行多个作业,您将一次又一次地覆盖此文件。解决方案是跳过 tmpfile。这样你就可以匹配 /dev/urandom 的速度,从而成为瓶颈:

orig() {
  rows=$1
  for i in $(seq $rows)
  do
  tr -dc A-Za-z0-9 < /dev/urandom | head -c 2000 > tmp
  gawk '$1=$1' FIELDWIDTHS="$(seq 100|xargs)" OFS=, tmp >> tmp1
  done
}

rm tmp1
# Around 200 KB/s
(orig 1000; cat tmp1) | pv | wc -c

pipeversion() {
  rows=$1
  base64 -w 2000 < /dev/urandom | head -n $rows |
    gawk '$1=$1' FIELDWIDTHS="$(seq 100|xargs)" OFS=,;
}

# Around 12 MB/s
pipeversion 1000 | pv | wc -c

export -f pipeversion

# Around 12 MB/s - because /dev/urandom is the bottleneck
seq 100 | parallel pipeversion 1000 | pv | wc -c

【讨论】:

    【解决方案2】:

    @Maxim 有一个很好的观点。试试:

    cat /dev/urandom | pv > /dev/null
    

    这是否足够快地提供数据?如果没有尝试安装haveged

    /dev/urandom 为您提供 8 位随机数据​​,但您只保留 62 个值,因此您将丢弃很多值。如果/dev/urandom 是瓶颈,那么改进将是使用随机数据的全部值。如果您对随机值进行 MIME 编码,您将使用所有字节,并获得 6 位值(= 64 个不同的值)。

    【讨论】:

    • urandom 的优点是它在熵低时不会阻塞。这也是一个缺点,因为这意味着您的随机数质量更差。如果您对随机质量感到困扰,那么您根本不应该这样做,如果您不这样做……几乎任何 RNG 都可以;)
    • 使用 /dev/urandom 的数据生成速率约为 11MB/s。这很快。还没用过MIME,试试。但回到这个问题,我仍然没有得到缓慢的性能。
    猜你喜欢
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2014-09-06
    • 2015-03-04
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多