forked from nmslib/nmslib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRunAllL2.pl
More file actions
executable file
·73 lines (57 loc) · 2.65 KB
/
RunAllL2.pl
File metadata and controls
executable file
·73 lines (57 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/perl -w
my $DataDir=$ENV{"DATA_DIR"};
defined($DataDir) or die("Define the environemnt variable DATA_DIR, which contains data files.");
-d $DataDir or die("DATA_DIR='$DataDir' is not a directory");
my $K=1;
my $MaxNumData=500000;
my $MaxNumQuery=1000;
if (0) {
$MaxNumData=50000;
$MaxNumQuery=100;
}
my $SpaceType = "L2";
my $TestSetQty=5;
my $NumPivot=16;
my $PrefixLen=4;
my $BucketSize = 50;
my @DataSet = ("colors112", "final128", "unif64", "final16", "final256", "sig10k");
my @Dims = (112, 128, 64, 16, 256, 1111);
my @MaxScanFracs = (0.02, 0.02, 0.2, 0.02, 0.02, 0.07);
my @MaxMinCands = (4000, 16000, 16000, 4000, 16000, 4000);
my %Use = ( "colors112" => 1, "final128" => 1, "unif64" => 1, "final16" => 1, "final256" => 1,"sig10k" => 1 );
for (my $dn = 0; $dn < @DataSet; ++$dn) {
my $dimension = $Dims[$dn];
my $Name = $DataSet[$dn];
# We can select which methods to execute
next if (!exists $Use{$Name} || !$Use{$Name});
my $OutFileDir="ResultsL2/$Name";
!system("mkdir -p $OutFileDir") or die("Cannot create $OutFileDir");
my $OutFilePrefix="$OutFileDir/res";
my @RecallList= (0.85, 0.7, 0.65, 0.55, 0.44, 0.35, 0.25, 0.15, 0.05);
my $MaxDbScanFrac = $MaxScanFracs[$dn];
my $TestQty = 9;
for (my $i = 0; $i < $TestQty; ++$i) {
my $DbScanFrac = $MaxDbScanFrac * ($TestQty - $i) / $TestQty;
my $MaxLeavesToVisit = 1 << (1 + $TestQty - $i);
my $MinCand = int($MaxMinCands[$dn] / (1 << $i));
my $DesiredRecall = $RecallList[$i] or die("Undefined recall for i=$i");
my $ip1 = $i + 1;
my $AlphaParams = `head -$ip1 tunning/ResultsL2/OutFile.${Name}.$K|tail -1`;
chomp $AlphaParams;
$AlphaParams ne "" or die("Empty AlphaParams");
my $cmd = "../../similarity_search/release/experiment --dataFile $DataDir/$Name.txt --maxNumData $MaxNumData --maxNumQuery $MaxNumQuery --dimension $dimension --distType float --spaceType $SpaceType --knn $K --testSetQty $TestSetQty --outFilePrefix $OutFilePrefix ";
#--bucketSize $BucketSize ";
# 1017881 is prime
$cmd .= " --method lsh_multiprobe:desiredRecall=$DesiredRecall,H=1017881,T=10,L=50,tuneK=$K";
$cmd .= " --method perm_incsort:numPivot=$NumPivot,dbScanFrac=$DbScanFrac";
$cmd .= " --method vptree:$AlphaParams,bucketSize=$BucketSize";
$cmd .= " --method perm_prefix:numPivot=$NumPivot,prefixLength=$PrefixLen,minCandidate=$MinCand";
RunCmd($i ? 1:0, $cmd);
}
}
sub RunCmd {
my ($Append, $cmd) = @_;
$cmd = "$cmd --appendToResFile $Append 2>&1";
print "$cmd\n";
!system($cmd) or die("Cannot execute the command: $cmd");
}