|
|
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.