Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <470F386F.1090000@ba.infn.it>
Date: Fri, 12 Oct 2007 11:03:43 +0200
From: Francesco Minafra <Francesco.Minafra@...infn.it>
To:  john-users@...ts.openwall.com
Subject: List.External:Parallel section in the example john.conf

Hi all,
  I have a question concerning the method used in the
default john.conf to achieve some kind of parallelism between
nodes/processors.

  I see that the section [List.External:Parallel]
has pseudo-c code that causes the "current" node analyze
only words with indexes given by the "modulo" computation.
  As I am not so good at figuring-out how algorithms work
"on the fly", I have reproduced the behavior of the filter()
function in a small perl program:

#!/usr/bin/perl -W
my $total = 4;
my $end = 20;
my $prev = 0;
my $res = 0;
for (my $node = 1; $node < 5; $node++) {
  my $number = $node - 1;
  print "We are on node $node\n";
  print "Initial value for number is: $number\n";
  while ($number < $end) {
    if ($number++ % $total) {
      $prev = $number - 1;
      $res = $prev % $total;
      print "$prev modulo $total = $res\n";
    } else {
      $prev = $number - 1;
      print "Number is now: $prev\n";
    }
  }
}


Please correct me if I am wrong, but I see from the output that there is
an overlap on the keyspace assigned to each node.

This can be prevented by introducing a suitable "offset":

#!/usr/bin/perl -W
my $total = 4;
my $end = 20;
my $prev = 0;
my $res = 0;
for (my $node = 1; $node < 5; $node++) {
  my $number = $node - 1;
  my $offset = $number;
  print "We are on node $node\n";
  print "Initial value for number is: $number\n";
  while ($number < $end) {
    if (($number++ % $total) - $offset) {
      $prev = $number - 1;
      $res = $prev % $total;
      print "$prev modulo $total = $res\n";
    } else {
      $prev = $number - 1;
      print "Number is now: $prev\n";
    }
  }
}

and in the john.conf I used the following (e.g. for the fifth node):

int node, total;                        // This node's number, and node
count
int number, offset;                             // Current word number

void init()
{
        node = 5; total = 12;           // Node 5 of 12, change as
appropriate
        number = node - 1;              // Speedup the filter a bit
        offset = number;                // Actually we need an offset to
cover the entire
                                              // keyspace with all the nodes
}

void filter()
{
        if ((number++ % total) - offset)        // Word for a different
node?
                word = 0;                       // Yes, skip it
}


Sorry if this topic has already been discussed, and/or has wrong
arguments. If so, please don't consider this post :)

Ciao.

-- 
To unsubscribe, e-mail john-users-unsubscribe@...ts.openwall.com and reply
to the automated confirmation request that will be sent to you.

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.