diff --git a/pom.xml b/pom.xml index 1c35320cfb5c00c385ca3ede097fc1fe9c309359..436a9456d1d32e40293b44579dfa54eb145d4673 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,7 @@ <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> - <version>3.6.2</version> + <version>8.3.1</version> </dependency> <dependency> <groupId>junit</groupId> @@ -110,7 +110,7 @@ <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> - <version>3.7</version> + <version>3.9</version> </dependency> <dependency> <groupId>log4j</groupId> @@ -168,7 +168,7 @@ <plugin> <groupId>com.mycila.maven-license-plugin</groupId> <artifactId>maven-license-plugin</artifactId> - <version>1.9.0</version> + <version>1.10.b1</version> <configuration> <skipExistingHeaders>false</skipExistingHeaders> </configuration> diff --git a/src/main/java/com/aparapi/examples/matrix/Main.java b/src/main/java/com/aparapi/examples/matrix/Main.java index 4b99136bfc1fd630fbc3131cc9f503ab8841f727..f0bda21c714bb4e88af53f14ccdcbf1379d402b6 100644 --- a/src/main/java/com/aparapi/examples/matrix/Main.java +++ b/src/main/java/com/aparapi/examples/matrix/Main.java @@ -26,7 +26,7 @@ package com.aparapi.examples.matrix; import com.aparapi.Kernel.EXECUTION_MODE; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; -import org.apache.lucene.util.OpenBitSet; +import org.apache.lucene.util.FixedBitSet; import java.io.File; import java.io.FileNotFoundException; @@ -40,9 +40,9 @@ import java.util.Random; * This test class performs the following functions: * * 1) Create a randomly populated set of matrices for correlation/co-occurrence computation - * 2) Execute the CPU-based computation using Lucene OpenBitSets + * 2) Execute the CPU-based computation using Lucene FixedBitSets * 3) Execute the GPU-based computation using Aparapi CorrMatrix host and kernel - * 4) Verify the results of OpenBitSet and CorrMatrix by comparing matrices to each other + * 4) Verify the results of FixedBitSet and CorrMatrix by comparing matrices to each other * * @author ryan.lamothe at gmail.com * @@ -54,7 +54,7 @@ public class Main { * @param _args The command-line arguments. */ public static void main(String[] _args) { - final List<Pair<OpenBitSet, OpenBitSet>> obsPairs = new ArrayList<Pair<OpenBitSet, OpenBitSet>>(); + final List<Pair<FixedBitSet, FixedBitSet>> obsPairs = new ArrayList<Pair<FixedBitSet, FixedBitSet>>(); ; final Random rand = new Random(); @@ -73,18 +73,24 @@ public class Main { final int numLongs = Integer.getInteger("numColumns", 10000); // # Columns for (int i = 0; i < numTerms; ++i) { - final long[] bits = new long[numLongs]; + final FixedBitSet first = new FixedBitSet(numLongs); + final FixedBitSet second = new FixedBitSet(numLongs); + + //final long[] bits = new long[numLongs]; for (int j = 0; j < numLongs; ++j) { - bits[j] = rand.nextLong(); + if (rand.nextBoolean()) + first.set(j); + if (rand.nextBoolean()) + second.set(j); } - obsPairs.add(i, new ImmutablePair<OpenBitSet, OpenBitSet>(new OpenBitSet(bits, numLongs), new OpenBitSet(bits, numLongs))); + obsPairs.add(i, new ImmutablePair<FixedBitSet, FixedBitSet>(first, second)); } /* - * OpenBitSet calculations + * FixedBitSet calculations */ - System.out.println("Executing OpenBitSet intersectionCount"); + System.out.println("Executing FixedBitSet intersectionCount"); final long startTime = System.currentTimeMillis(); @@ -93,20 +99,20 @@ public class Main { // This is an N^2 comparison loop // FIXME This entire loop needs to be parallelized to show an apples-to-apples comparison to Aparapi for (int i = 0; i < obsPairs.size(); i++) { - final Pair<OpenBitSet, OpenBitSet> docFreqVector1 = obsPairs.get(i); + final Pair<FixedBitSet, FixedBitSet> docFreqVector1 = obsPairs.get(i); for (int j = 0; j < obsPairs.size(); j++) { - final Pair<OpenBitSet, OpenBitSet> docFreqVector2 = obsPairs.get(j); + final Pair<FixedBitSet, FixedBitSet> docFreqVector2 = obsPairs.get(j); // # of matches in both sets of documents - final int result = (int) OpenBitSet.intersectionCount(docFreqVector1.getLeft(), docFreqVector2.getRight()); + final int result = (int) FixedBitSet.intersectionCount(docFreqVector1.getLeft(), docFreqVector2.getRight()); obsResultMatrix[i][j] = result; } } final long endTime = System.currentTimeMillis() - startTime; - System.out.println("OpenBitSet Gross Execution Time: " + endTime + " ms <------OpenBitSet"); + System.out.println("FixedBitSet Gross Execution Time: " + endTime + " ms <------FixedBitSet"); System.out.println("----------"); /* @@ -117,11 +123,11 @@ public class Main { final long[][] matrixA = new long[obsPairs.size()][]; final long[][] matrixB = new long[obsPairs.size()][]; - // Convert OpenBitSet pairs to long primitive arrays for use with Aparapi + // Convert FixedBitSet pairs to long primitive arrays for use with Aparapi // TODO It would be nice if we could find a way to put the obsPairs onto the GPU directly :) for (int i = 0; i < obsPairs.size(); i++) { - final OpenBitSet obsA = obsPairs.get(i).getLeft(); - final OpenBitSet obsB = obsPairs.get(i).getRight(); + final FixedBitSet obsA = obsPairs.get(i).getLeft(); + final FixedBitSet obsB = obsPairs.get(i).getRight(); matrixA[i] = obsA.getBits(); matrixB[i] = obsB.getBits(); @@ -134,7 +140,7 @@ public class Main { gpuResultMatrix = CorrMatrixHost.intersectionMatrix(matrixA, matrixB, EXECUTION_MODE.GPU); // Compare the two result arrays to make sure we are generating the same output - System.out.println("[i][j] -> OpenBitSet Result : GPU Result Array"); + System.out.println("[i][j] -> FixedBitSet Result : GPU Result Array"); for (int i = 0; i < obsResultMatrix.length; i++) { for (int j = 0; j < obsResultMatrix[i].length; j++) if (obsResultMatrix[i][j] != gpuResultMatrix[i][j]) { diff --git a/src/test/java/com/aparapi/examples/matrix/CorrMatrixTest.java b/src/test/java/com/aparapi/examples/matrix/CorrMatrixTest.java index 4eea28f41e9c0896c79e69b0c4606867b1de639d..6586c1da09078ee9372ed2b1232064bfc6298ce2 100644 --- a/src/test/java/com/aparapi/examples/matrix/CorrMatrixTest.java +++ b/src/test/java/com/aparapi/examples/matrix/CorrMatrixTest.java @@ -33,7 +33,7 @@ import java.util.Random; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.log4j.Logger; -import org.apache.lucene.util.OpenBitSet; +import org.apache.lucene.util.FixedBitSet; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -44,9 +44,9 @@ import com.aparapi.Kernel.EXECUTION_MODE; * This test class performs the following functions: * * 1) Create a randomly populated set of matrices for correlation/co-occurrence computation - * 2) Execute the CPU-based computation using Lucene OpenBitSets + * 2) Execute the CPU-based computation using Lucene FixedBitSets * 3) Execute the GPU-based computation using Aparapi CorrMatrix host and kernel - * 4) Verify the results of OpenBitSet and CorrMatrix by comparing matrices to each other + * 4) Verify the results of FixedBitSet and CorrMatrix by comparing matrices to each other * * @author ryan.lamothe at gmail.com * @@ -55,7 +55,7 @@ public class CorrMatrixTest { private static final Logger LOG = Logger.getLogger(CorrMatrixTest.class); - private final List<Pair<OpenBitSet, OpenBitSet>> obsPairs = new ArrayList<Pair<OpenBitSet, OpenBitSet>>();; + private final List<Pair<FixedBitSet, FixedBitSet>> obsPairs = new ArrayList<Pair<FixedBitSet, FixedBitSet>>();; private final Random rand = new Random(); @@ -78,18 +78,25 @@ public class CorrMatrixTest { final int numLongs = Integer.getInteger("numColumns", 10000); // # Columns for (int i = 0; i < numTerms; ++i) { - final long[] bits = new long[numLongs]; + final FixedBitSet first = new FixedBitSet(numLongs); + final FixedBitSet second = new FixedBitSet(numLongs); + + //final long[] bits = new long[numLongs]; for (int j = 0; j < numLongs; ++j) { - bits[j] = rand.nextLong(); + if (rand.nextBoolean()) + first.set(j); + if (rand.nextBoolean()) + second.set(j); } - obsPairs.add(i, new ImmutablePair<OpenBitSet, OpenBitSet>(new OpenBitSet(bits, numLongs), new OpenBitSet(bits, numLongs))); + obsPairs.add(i, new ImmutablePair<FixedBitSet, FixedBitSet>(first, second)); + } /* - * OpenBitSet calculations + * FixedBitSet calculations */ - LOG.debug("Executing OpenBitSet intersectionCount"); + LOG.debug("Executing FixedBitSet intersectionCount"); final long startTime = System.currentTimeMillis(); @@ -98,20 +105,20 @@ public class CorrMatrixTest { // This is an N^2 comparison loop // FIXME This entire loop needs to be parallelized to show an apples-to-apples comparison to Aparapi for (int i = 0; i < obsPairs.size(); i++) { - final Pair<OpenBitSet, OpenBitSet> docFreqVector1 = obsPairs.get(i); + final Pair<FixedBitSet, FixedBitSet> docFreqVector1 = obsPairs.get(i); for (int j = 0; j < obsPairs.size(); j++) { - final Pair<OpenBitSet, OpenBitSet> docFreqVector2 = obsPairs.get(j); + final Pair<FixedBitSet, FixedBitSet> docFreqVector2 = obsPairs.get(j); // # of matches in both sets of documents - final int result = (int) OpenBitSet.intersectionCount(docFreqVector1.getLeft(), docFreqVector2.getRight()); + final int result = (int) FixedBitSet.intersectionCount(docFreqVector1.getLeft(), docFreqVector2.getRight()); obsResultMatrix[i][j] = result; } } final long endTime = System.currentTimeMillis() - startTime; - LOG.debug("OpenBitSet Gross Execution Time: " + endTime + " ms <------OpenBitSet"); + LOG.debug("FixedBitSet Gross Execution Time: " + endTime + " ms <------FixedBitSet"); LOG.debug("----------"); } @@ -125,11 +132,11 @@ public class CorrMatrixTest { final long[][] matrixA = new long[obsPairs.size()][]; final long[][] matrixB = new long[obsPairs.size()][]; - // Convert OpenBitSet pairs to long primitive arrays for use with Aparapi + // Convert FixedBitSet pairs to long primitive arrays for use with Aparapi // TODO It would be nice if we could find a way to put the obsPairs onto the GPU directly :) for (int i = 0; i < obsPairs.size(); i++) { - final OpenBitSet obsA = obsPairs.get(i).getLeft(); - final OpenBitSet obsB = obsPairs.get(i).getRight(); + final FixedBitSet obsA = obsPairs.get(i).getLeft(); + final FixedBitSet obsB = obsPairs.get(i).getRight(); matrixA[i] = obsA.getBits(); matrixB[i] = obsB.getBits();