From cb0b846f7daefca2b71afe9494fa9db487e374a7 Mon Sep 17 00:00:00 2001 From: adash Date: Tue, 17 Nov 2009 03:39:28 +0000 Subject: [PATCH] inlined methods to get prefetch benefits from the benchmark --- .../SpamFilter/DistributedHashMap2.java | 38 ++ .../Distributed/SpamFilter/GString.java | 2 + .../Distributed/SpamFilter/HashEntry.java | 2 - .../Distributed/SpamFilter/Mail.java | 11 +- .../Distributed/SpamFilter/SpamFilter2.java | 454 ++++++++++++++++++ .../Distributed/SpamFilter/makefile | 24 +- 6 files changed, 519 insertions(+), 12 deletions(-) create mode 100644 Robust/src/Benchmarks/Distributed/SpamFilter/DistributedHashMap2.java create mode 100644 Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter2.java diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/DistributedHashMap2.java b/Robust/src/Benchmarks/Distributed/SpamFilter/DistributedHashMap2.java new file mode 100644 index 00000000..9f25da6b --- /dev/null +++ b/Robust/src/Benchmarks/Distributed/SpamFilter/DistributedHashMap2.java @@ -0,0 +1,38 @@ +public class DistributedHashMap { + public DistributedHashEntry[] table; + public float loadFactor; + + public DistributedHashMap(int initialCapacity, float loadFactor) { + init(initialCapacity, loadFactor); + } + + private void init(int initialCapacity, float loadFactor) { + table=global new DistributedHashEntry[initialCapacity]; + this.loadFactor=loadFactor; + } + + public int hash1(int hashcode, int length) { + int value=hashcode%length; + if (value<0) + return -value; + else + return value; + } +} + +class DistributedHashEntry { + public DistributedHashEntry() { + } + int count; + DHashEntry array; +} + + +class DHashEntry { + public DHashEntry() { + } + int hashval; + HashEntry key; + FilterStatistic value; + DHashEntry next; +} diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/GString.java b/Robust/src/Benchmarks/Distributed/SpamFilter/GString.java index 89726a3d..3b1b8f36 100644 --- a/Robust/src/Benchmarks/Distributed/SpamFilter/GString.java +++ b/Robust/src/Benchmarks/Distributed/SpamFilter/GString.java @@ -27,6 +27,7 @@ public class GString { this.offset = gstr.offset; } + /* public GString(StringBuffer gsb) { value = global new char[gsb.length()]; count = gsb.length(); @@ -34,6 +35,7 @@ public class GString { for (int i = 0; i < count; i++) value[i] = gsb.value[i]; } + */ public GString(char str[]) { char charstr[]=new char[str.length]; diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/HashEntry.java b/Robust/src/Benchmarks/Distributed/SpamFilter/HashEntry.java index 7b391f8c..918f6ba3 100644 --- a/Robust/src/Benchmarks/Distributed/SpamFilter/HashEntry.java +++ b/Robust/src/Benchmarks/Distributed/SpamFilter/HashEntry.java @@ -46,8 +46,6 @@ public class HashEntry { } public boolean equals(Object o) { - if(o.getType()!=getType()) - return false; HashEntry he = (HashEntry)o; if(!(he.getEngine().equals(engine))) return false; diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java b/Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java index 2027070f..547030da 100644 --- a/Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java +++ b/Robust/src/Benchmarks/Distributed/SpamFilter/Mail.java @@ -391,16 +391,19 @@ public class Mail { **/ public Vector checkMail(int userid) { //Preprocess emails - //Vector partsOfMailStrings = mail.createMailStringsWithURL(); - //Vector partsOfMailStrings = getCommonPart(); - //partsOfMailStrings.addElement(getBodyString()); + + //long startGetParts=System.currentTimeMillis(); Vector partsOfMailStrings = returnEmail(); + //long stopGetParts=System.currentTimeMillis(); + //System.out.println("Time to read email= " + (stopGetParts-startGetParts)); - //Compute signatures SignatureComputer sigComp = new SignatureComputer(); //Vector signatures = sigComp.computeSigs(partsOfMailStrings);//vector of strings + //long startGetsignatures=System.currentTimeMillis(); Vector signatures = sigComp.computeSigs(partsOfMailStrings);//vector of vector of strings + //long stopGetsignatures=System.currentTimeMillis(); + //System.out.println("Time to Getsignatures= " + (stopGetsignatures-startGetsignatures)); return signatures; } diff --git a/Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter2.java b/Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter2.java new file mode 100644 index 00000000..e8db8e11 --- /dev/null +++ b/Robust/src/Benchmarks/Distributed/SpamFilter/SpamFilter2.java @@ -0,0 +1,454 @@ +public class SpamFilter extends Thread { + DistributedHashMap mydhmap; + + int id; //thread id + + /** + * Total number of iterations + **/ + int numiter; + + /** + * Total number of emails + **/ + int numemail; + + /** + * Total number of threads + **/ + int nthreads; + + public SpamFilter() { + + } + + public SpamFilter(int numiter, int numemail,int id, DistributedHashMap mydhmap, int nthreads) { + this.numiter=numiter; + this.numemail=numemail; + this.id = id; + this.mydhmap = mydhmap; + this.nthreads = nthreads; + } + + public void run() { + int niter; + int nemails; + int thid; + int correct=0; + int wrong=0; + atomic { + niter=numiter; + nemails=numemail; + thid = id; + } + + Random rand = new Random(thid); + int i; + + for(i=0; i -e -t \n"); + System.out.println( " -n : num iterations"); + System.out.println( " -e : number of emails"); + System.out.println( " -t : number of threads"); + } + + /** + * Returns result to the Spam filter + **/ + /* + public boolean checkMail(Mail mail, int userid) { + //Preprocess emails + //Vector partsOfMailStrings = mail.createMailStringsWithURL(); + /* + Vector partsOfMailStrings = mail.getCommonPart(); + partsOfMailStrings.addElement(mail.getBodyString()); + + //Compute signatures + SignatureComputer sigComp = new SignatureComputer(); + Vector signatures = sigComp.computeSigs(partsOfMailStrings);//vector of strings + + //check with global data structure + int[] confidenceVals = check(signatures,userid); + + //---- create and return results -------- + FilterResult filterResult = new FilterResult(); + boolean spam = filterResult.getResult(confidenceVals); + + return spam; + } + */ + + public int[] check(Vector signatures, int userid) { + int numparts = signatures.size(); + + //System.out.println("check() numparts= " + numparts); + int[] confidenceVals = new int[numparts]; + + for(int i=0; i the mail client is able to determine if it is spam or not + // --- According to the "any"-logic (in Core#check_logic) in original Razor --- + // If any answer is spam, the entire email is spam. + return confidenceVals; + } + + /** + * This method sends feedback from the user to a distributed + * spam database and trains the spam database to check future + * emails and detect spam + **/ + public void sendFeedBack(Vector signatures, boolean isSpam, int id, Random myrand) { + + for(int i=0;i