silly@bluetit:~/perl/threads$ cat thread.pl #! /usr/bin/perl -w use strict; use threads; use MLDBM::Sync; use MLDBM qw(DB_File Storable); use Fcntl; use Benchmark; my $t0 = new Benchmark; require '/home/silly/g/prep/Prep.pl'; my $file = "/home/silly/g/data/117373HOHsynTriNormCV.db"; my %syntrihash; tie %syntrihash,'MLDBM::Sync',$file, O_RDONLY or die "tie failed for db $!\n"; my $NumbOfKeys = keys %syntrihash; print "Number of Dots to compute: $NumbOfKeys\n"; my $EndSection1 = int($NumbOfKeys/4); my $EndSection2 = $EndSection1 + int($NumbOfKeys/4); my $EndSection3 = $EndSection2 + int($NumbOfKeys/4); my @synsetPart1; my @synsetPart2; my @synsetPart3; my @synsetPart4; my $k = 0; foreach my $ss (keys %syntrihash){ if($k < $EndSection1){ $synsetPart1[$k] = $ss; } elsif ($k < $EndSection2){ $synsetPart2[$k - $EndSection1] = $ss; } elsif ($k < $EndSection3){ $synsetPart3[$k - $EndSection2] = $ss; } else { $synsetPart4[$k - $EndSection3] = $ss; } $k += 1; } untie %syntrihash; my $t1 = new Benchmark; my $td1 = timediff($t1, $t0); print STDERR "the code took:",timestr($td1,'all')," to prep\n"; $t0 = new Benchmark; my $thr1 = threads->create({'context' => 'array'}, \&subthr1, "test1"); my $thr2 = threads->create({'context' => 'array'}, \&subthr2, "test2"); my $thr3 = threads->create({'context' => 'array'}, \&subthr3, "test3"); my $thr4 = threads->create({'context' => 'array'}, \&subthr4, "test4"); my %return1 = $thr1 -> join(); my %return2 = $thr2 -> join(); my %return3 = $thr3 -> join(); my %return4 = $thr4 -> join(); my %synsetDotHash; $t1 = new Benchmark; $td1 = timediff($t1, $t0); print STDERR "the code took:",timestr($td1,'all')," to do threaded dots\n"; sub subthr1{ tie %syntrihash,'MLDBM::Sync',$file, O_RDONLY or die "tie failed for db $!\n"; foreach my $synset (@synsetPart1){ my $hashref = \%{$syntrihash{$synset}}; &hashValueDot($hashref,$hashref,my $dot); $synsetDotHash{$synset} = $dot; } my ($message) = @_; print "Thread Message is $message\n"; return (%synsetDotHash); } sub subthr2{ tie %syntrihash,'MLDBM::Sync',$file, O_RDONLY or die "tie failed for db $!\n"; foreach my $synset (@synsetPart2){ my $hashref = \%{$syntrihash{$synset}}; &hashValueDot($hashref,$hashref,my $dot); $synsetDotHash{$synset} = $dot; } my ($message) = @_; print "Thread Message is $message\n"; return (%synsetDotHash); } sub subthr3{ tie %syntrihash,'MLDBM::Sync',$file, O_RDONLY or die "tie failed for db $!\n"; foreach my $synset (@synsetPart3){ my $hashref = \%{$syntrihash{$synset}}; &hashValueDot($hashref,$hashref,my $dot); $synsetDotHash{$synset} = $dot; } my ($message) = @_; print "Thread Message is $message\n"; return (%synsetDotHash); } sub subthr4{ tie %syntrihash,'MLDBM::Sync',$file, O_RDONLY or die "tie failed for db $!\n"; foreach my $synset (@synsetPart4){ my $hashref = \%{$syntrihash{$synset}}; &hashValueDot($hashref,$hashref,my $dot); $synsetDotHash{$synset} = $dot; } my ($message) = @_; print "Thread Message is $message\n"; return (%synsetDotHash); }