You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2009/11/08 14:28:53 UTC

svn commit: r833870 - /lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java

Author: srowen
Date: Sun Nov  8 13:28:52 2009
New Revision: 833870

URL: http://svn.apache.org/viewvc?rev=833870&view=rev
Log:
Also parallelize LoadEvaluator

Modified:
    lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java?rev=833870&r1=833869&r2=833870&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/eval/LoadEvaluator.java Sun Nov  8 13:28:52 2009
@@ -27,6 +27,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.concurrent.Callable;
+
+/**
+ * Simple helper class for running load on a Recommender.
+ */
 public final class LoadEvaluator {
 
   private static final Logger log = LoggerFactory.getLogger(LoadEvaluator.class);
@@ -42,18 +49,12 @@
     LongPrimitiveIterator userSampler =
         SamplingLongPrimitiveIterator.maybeWrapIterator(dataModel.getUserIDs(), sampleRate);
     RunningAverage recommendationTime = new FullRunningAverageAndStdDev();
-    int count = 0;
+    recommender.recommend(userSampler.next(), 10); // Warm up
+    Collection<Callable<Object>> callables = new ArrayList<Callable<Object>>();
     while (userSampler.hasNext()) {
-      long start = System.currentTimeMillis();
-      recommender.recommend(userSampler.next(), 10);
-      long end = System.currentTimeMillis();
-      if (count > 0) { // Ignore first as a warmup
-        recommendationTime.addDatum(end - start);
-      }
-      if (++count % 100 == 0) {
-        logStats(recommendationTime);
-      }
+      callables.add(new LoadCallable(recommender, userSampler.next(), recommendationTime));
     }
+    AbstractDifferenceRecommenderEvaluator.execute(callables);
     logStats(recommendationTime);
   }
 
@@ -65,4 +66,26 @@
 
   }
 
+  private static class LoadCallable implements Callable<Object> {
+
+    private final Recommender recommender;
+    private final long userID;
+    private final RunningAverage recommendationTime;
+
+    private LoadCallable(Recommender recommender, long userID, RunningAverage recommendationTime) {
+      this.recommender = recommender;
+      this.userID = userID;
+      this.recommendationTime = recommendationTime;
+    }
+
+    @Override
+    public Object call() throws Exception {
+      long start = System.currentTimeMillis();
+      recommender.recommend(userID, 10);
+      long end = System.currentTimeMillis();
+      recommendationTime.addDatum(end - start);
+      return null;
+    }
+  }
+
 }
\ No newline at end of file