【问题标题】:parallely execution of perl languageperl语言的并行执行
【发布时间】:2014-01-20 23:14:30
【问题描述】:

我有一个perl程序,可以从pcap文件中读取流的数据包,但是需要很多时间,我想让它并行,但我不知道它是否可能?如果是可以我用 MPI 来做?还有另一个问题,使这段代码并行的最佳方法,这是我的代码片段(我认为我应该在这部分工作以进行并行,但我不知道最好的方法!)

 while (!eof($inFileH))
    {
    #inFileH is the handler of the pcap file
    #in each while I read one packet

        $ts_sec = readBytes($inFileH,4);
        $ts_usec = readBytes($inFileH,4);
        $incl_len = readBytes($inFileH,4);
        $orig_len = readBytes($inFileH,4);
        if ($totalLen == 0) # it is the 1st packet
        {
            $startTime = $ts_sec + $ts_usec/1000000;
        }   
        $timeStamp = $ts_sec + $ts_usec/1000000 - $startTime;
        $totalLen += $orig_len;     
        $#packet = -1;   n   # initing the array
        for (my $i=0 ; $i<$incl_len ; $i++)     #read all included octects of the current packet
        {
            read $inFileH, $packet[$i], 1;
            $packet[$i] = ord($packet[$i]);
        }
#and after that I will work on the "packet" and analyze it

那么我应该如何发送文件内容以供其他处理器并行处理.....

【问题讨论】:

    标签: perl parallel-processing mpi


    【解决方案1】:

    首先您需要确定瓶颈。如果真的是 CPU 使用率(即在您运行脚本时 CPU 使用率是 100%),您需要弄清楚处理时间花在哪里。

    这很可能是您解析输入的方式。可能有明显的方法可以加快速度。例如,如果您使用复杂的正则表达式,并且只专注于正确匹配输入,则可能有一些方法可以通过重写表达式或在尝试更复杂的匹配之前进行更简单的匹配来加快匹配速度。

    如果您不能以这种方式充分降低 CPU 使用率,并且您真的想要并行化,请查看是否可以使用 Perl 诞生的机制:Unix pipes。您可以编写 Perl 脚本在管道中相互传递数据,或者您可以在 Perl 本身内创建进程和管道(请参阅 perlopentut,如果这还不够,请参阅 perlipc)。

    作为一般规则,我会在尝试其他机制之前先考虑这些选项,但这实际上取决于您尝试执行的操作的详细信息以及您需要执行此操作的环境。

    【讨论】:

    • 感谢您的完整解释,但我认为文件的巨大体积是瓶颈,因为文件较小时执行时间会减少,所以我决定在 perl 中划分文件语!你觉得怎么样?这是一个有效的解决方案吗?
    • 可能不会。如果您可以细分文件,您可能会走得更远,甚至根本不在脚本中提及该文件。不要将输入视为您首先需要读取然后处理的文件,将其视为您可以逐块读取和处理的输入数据流。这是在 Perl 中做事的标准方式 - 参见例如the &lt;&gt; construct.
    • 我已经把我的代码放在上面了,正如你所说我使用文件处理程序,但是我在划分流时遇到了一些问题!!我不知道什么是有效的方法!! !你能帮帮我吗?
    • 这看起来不错。您可能希望避免除法,并可能进行更多的微优化(也许使用unpack),但这不太可能解决问题。大部分时间花在了这段代码中还是在数据包的进一步数据包处理中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多