You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@systemml.apache.org by mb...@apache.org on 2017/11/05 22:29:53 UTC
[1/3] systemml git commit: [MINOR] Performance shallow reshape and
sparse cbind operations
Repository: systemml
Updated Branches:
refs/heads/master c0b6ef5ca -> f7fe43420
[MINOR] Performance shallow reshape and sparse cbind operations
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/55c4c0b9
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/55c4c0b9
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/55c4c0b9
Branch: refs/heads/master
Commit: 55c4c0b9737ad18356758e31957b8030a9aa8138
Parents: c0b6ef5
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Nov 4 21:23:57 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sat Nov 4 21:23:57 2017 -0700
----------------------------------------------------------------------
.../runtime/matrix/data/LibMatrixReorg.java | 12 ++--
.../sysml/runtime/matrix/data/MatrixBlock.java | 59 +++++++++++---------
2 files changed, 41 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/55c4c0b9/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
index dd86c27..28c3bf6 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixReorg.java
@@ -445,21 +445,25 @@ public class LibMatrixReorg
//check for same dimensions
if( rlen==rows && clen == cols ) {
- out.copy(in); //incl dims, nnz
+ //copy incl dims, nnz
+ if( SHALLOW_COPY_REORG )
+ out.copyShallow(in);
+ else
+ out.copy(in);
return out;
}
//determine output representation
- out.sparse = MatrixBlock.evalSparseFormatInMemory(rows, cols, in.nonZeros);
+ out.sparse = MatrixBlock.evalSparseFormatInMemory(rows, cols, in.nonZeros);
//set output dimensions
out.rlen = rows;
out.clen = cols;
out.nonZeros = in.nonZeros;
- //core reshape (sparse or dense)
+ //core reshape (sparse or dense)
if(!in.sparse && !out.sparse)
- reshapeDense(in, out, rows, cols, rowwise);
+ reshapeDense(in, out, rows, cols, rowwise);
else if(in.sparse && out.sparse)
reshapeSparse(in, out, rows, cols, rowwise);
else if(in.sparse)
http://git-wip-us.apache.org/repos/asf/systemml/blob/55c4c0b9/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
index 48051de..88efde2 100644
--- a/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
+++ b/src/main/java/org/apache/sysml/runtime/matrix/data/MatrixBlock.java
@@ -761,19 +761,17 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab
}
else //SPARSE <- DENSE
{
- for( int i=0; i<that.rlen; i++ )
- {
- int aix = rowoffset+i;
- for( int j=0, bix=i*that.clen; j<that.clen; j++ )
- {
- double val = that.denseBlock[bix+j];
- if( val != 0 ) {
- //create sparserow only if required
- sparseBlock.allocate(aix, estimatedNNzsPerRow,clen);
- sparseBlock.append(aix, coloffset+j, val);
+ double[] b = that.denseBlock;
+ final int bm = that.rlen;
+ final int bn = that.clen;
+ for( int i=0, aix=rowoffset, bix=0; i<bm; i++, aix++, bix+=bn )
+ for( int j=0; j<bn; j++ ) {
+ final double bval = b[bix+j];
+ if( bval != 0 ) {
+ sparseBlock.allocate(aix, estimatedNNzsPerRow, clen);
+ sparseBlock.append(aix, coloffset+j, bval);
}
}
- }
}
}
@@ -1351,6 +1349,17 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab
copyDenseToDense(that);
}
+ public void copyShallow(MatrixBlock that) {
+ rlen = that.rlen;
+ clen = that.clen;
+ nonZeros = that.nonZeros;
+ sparse = that.sparse;
+ if( !sparse )
+ denseBlock = that.denseBlock;
+ else
+ sparseBlock = that.sparseBlock;
+ }
+
private void copySparseToSparse(MatrixBlock that)
{
this.nonZeros=that.nonZeros;
@@ -1697,7 +1706,7 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab
private void copyEmptyToDense(int rl, int ru, int cl, int cu)
{
- int rowLen = cu-cl+1;
+ int rowLen = cu-cl+1;
if(clen == rowLen) //optimization for equal width
Arrays.fill(denseBlock, rl*clen+cl, ru*clen+cu+1, 0);
else
@@ -3546,7 +3555,7 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab
//core append operation
//copy left and right input into output
- if( !result.sparse ) //DENSE
+ if( !result.sparse && nnz!=0 ) //DENSE
{
if( cbind ) {
result.copy(0, m-1, 0, clen-1, this, false);
@@ -3563,20 +3572,18 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab
}
}
}
- else //SPARSE
+ else if(nnz != 0) //SPARSE
{
//adjust sparse rows if required
- if( !this.isEmptyBlock(false) || !Arrays.stream(that).allMatch(mb -> mb.isEmptyBlock(false)) ) {
- result.allocateSparseRowsBlock();
- //allocate sparse rows once for cbind
- if( cbind && result.getSparseBlock() instanceof SparseBlockMCSR ) {
- SparseBlock sblock = result.getSparseBlock();
- for( int i=0; i<result.rlen; i++ ) {
- final int row = i; //workaround for lambda compile issue
- int lnnz = (int) (this.recomputeNonZeros(i, i, 0, this.clen-1) + Arrays.stream(that)
- .mapToLong(mb -> mb.recomputeNonZeros(row, row, 0, mb.clen-1)).sum());
- sblock.allocate(i, lnnz);
- }
+ result.allocateSparseRowsBlock();
+ //allocate sparse rows once for cbind
+ if( cbind && nnz > rlen && result.getSparseBlock() instanceof SparseBlockMCSR ) {
+ SparseBlock sblock = result.getSparseBlock();
+ for( int i=0; i<result.rlen; i++ ) {
+ final int row = i; //workaround for lambda compile issue
+ int lnnz = (int) (this.recomputeNonZeros(i, i, 0, this.clen-1) + Arrays.stream(that)
+ .mapToLong(mb -> mb.recomputeNonZeros(row, row, 0, mb.clen-1)).sum());
+ sblock.allocate(i, lnnz);
}
}
@@ -3600,7 +3607,7 @@ public class MatrixBlock extends MatrixValue implements CacheBlock, Externalizab
result.nonZeros = nnz;
return result;
}
-
+
public MatrixBlock transposeSelfMatrixMultOperations( MatrixBlock out, MMTSJType tstype )
throws DMLRuntimeException
{
[2/3] systemml git commit: [SYSTEMML-1987] Fix JMLC handling of
disabled parfor (convert to for)
Posted by mb...@apache.org.
[SYSTEMML-1987] Fix JMLC handling of disabled parfor (convert to for)
This patch makes a minor improvement to the compilation of parfor loops.
JMLC allows to disable parfor (for environments w/ concurrent execution
of prepared scripts) - so far we simply forced a parallel degree of 1.
This led to unnecessary problems, because the optimizer still tries to
access the cluster status and configuration, which can cause unnecessary
problems in non-hadoop environments. We now simply convert parfor to for
during runtime program construction.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/e888cce8
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/e888cce8
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/e888cce8
Branch: refs/heads/master
Commit: e888cce89c6fce0f3a2e055dfa5a13efbd103c17
Parents: 55c4c0b
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Nov 4 22:38:20 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sun Nov 5 14:27:20 2017 -0800
----------------------------------------------------------------------
.../org/apache/sysml/parser/DMLTranslator.java | 2 +-
.../jmlc/JMLCParfor2ForCompileTest.java | 77 ++++++++++++++++++++
2 files changed, 78 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/e888cce8/src/main/java/org/apache/sysml/parser/DMLTranslator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/parser/DMLTranslator.java b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
index 0d466e2..5a7f60e 100644
--- a/src/main/java/org/apache/sysml/parser/DMLTranslator.java
+++ b/src/main/java/org/apache/sysml/parser/DMLTranslator.java
@@ -613,7 +613,7 @@ public class DMLTranslator
ForProgramBlock rtpb = null;
IterablePredicate iterPred = fsb.getIterPredicate();
- if( sb instanceof ParForStatementBlock ) {
+ if( sb instanceof ParForStatementBlock && ConfigurationManager.isParallelParFor() ) {
sbName = "ParForStatementBlock";
rtpb = new ParForProgramBlock(prog, iterPred.getIterVar().getName(),
iterPred.getParForParams(), ((ParForStatementBlock)sb).getResultVariables());
http://git-wip-us.apache.org/repos/asf/systemml/blob/e888cce8/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCParfor2ForCompileTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCParfor2ForCompileTest.java b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCParfor2ForCompileTest.java
new file mode 100644
index 0000000..e806f0c
--- /dev/null
+++ b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCParfor2ForCompileTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysml.test.integration.functions.jmlc;
+
+import java.io.IOException;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.apache.sysml.api.DMLScript;
+import org.apache.sysml.api.jmlc.Connection;
+import org.apache.sysml.api.jmlc.PreparedScript;
+import org.apache.sysml.conf.CompilerConfig.ConfigType;
+import org.apache.sysml.test.integration.AutomatedTestBase;
+import org.apache.sysml.utils.Statistics;
+
+public class JMLCParfor2ForCompileTest extends AutomatedTestBase
+{
+ @Override
+ public void setUp() {
+ //do nothing
+ }
+
+ @Test
+ public void testParfor2ParforCompile() throws IOException {
+ runJMLCParFor2ForTest(true);
+ }
+
+ @Test
+ public void testParfor2ForCompile() throws IOException {
+ runJMLCParFor2ForTest(false);
+ }
+
+ private void runJMLCParFor2ForTest(boolean par)
+ throws IOException
+ {
+ try {
+ Connection conn = !par ? new Connection() :
+ new Connection(ConfigType.PARALLEL_LOCAL_OR_REMOTE_PARFOR);
+ String script =
+ " X = rand(rows=10, cols=10);"
+ + "R = matrix(0, rows=10, cols=1)"
+ + "parfor(i in 1:nrow(X))"
+ + " R[i,] = sum(X[i,])"
+ + "print(sum(R))";
+ DMLScript.STATISTICS = true;
+ Statistics.reset();
+
+ PreparedScript pscript = conn.prepareScript(
+ script, new String[]{}, new String[]{}, false);
+ pscript.executeScript();
+ conn.close();
+ }
+ catch(Exception ex) {
+ Assert.fail("JMLC parfor test failed: "+ex.getMessage());
+ }
+
+ //check for existing or non-existing parfor
+ Assert.assertTrue(Statistics.getParforOptCount()==(par?1:0));
+ }
+}
[3/3] systemml git commit: [SYSTEMML-1988] JMLC API extension for
cloning prepared scripts
Posted by mb...@apache.org.
[SYSTEMML-1988] JMLC API extension for cloning prepared scripts
In complex applications and micro services, the need to reuse prepared
scripts in a thread-local manner in order to amortize the compilation
overhead, creates sometimes an unnecessary burden. Without dynamic
recompilation, this is unnecessary because a single compiled program can
be shared across concurrent invocations of PreparedScript.execute. This
patch extends the JMLC API by cloning functionality, which allows to
statically initialize a single prepared script and create cheap shallow
copies of the script's program and meta data.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/f7fe4342
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/f7fe4342
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/f7fe4342
Branch: refs/heads/master
Commit: f7fe4342005ec0da383f359b70fbab48a25dff7a
Parents: e888cce
Author: Matthias Boehm <mb...@gmail.com>
Authored: Sat Nov 4 23:33:43 2017 -0700
Committer: Matthias Boehm <mb...@gmail.com>
Committed: Sun Nov 5 14:27:44 2017 -0800
----------------------------------------------------------------------
.../org/apache/sysml/api/jmlc/Connection.java | 15 +++
.../apache/sysml/api/jmlc/PreparedScript.java | 37 ++++++
.../jmlc/JMLCClonedPreparedScriptTest.java | 113 +++++++++++++++++++
.../functions/jmlc/ZPackageSuite.java | 2 +
4 files changed, 167 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/f7fe4342/src/main/java/org/apache/sysml/api/jmlc/Connection.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/jmlc/Connection.java b/src/main/java/org/apache/sysml/api/jmlc/Connection.java
index e96e0aa..2568977 100644
--- a/src/main/java/org/apache/sysml/api/jmlc/Connection.java
+++ b/src/main/java/org/apache/sysml/api/jmlc/Connection.java
@@ -161,6 +161,21 @@ public class Connection implements Closeable
* @param script string representing the DML or PyDML script
* @param inputs string array of input variables to register
* @param outputs string array of output variables to register
+ * @return PreparedScript object representing the precompiled script
+ * @throws DMLException if DMLException occurs
+ */
+ public PreparedScript prepareScript( String script, String[] inputs, String[] outputs)
+ throws DMLException
+ {
+ return prepareScript(script, inputs, outputs, false);
+ }
+
+ /**
+ * Prepares (precompiles) a script and registers input and output variables.
+ *
+ * @param script string representing the DML or PyDML script
+ * @param inputs string array of input variables to register
+ * @param outputs string array of output variables to register
* @param parsePyDML {@code true} if PyDML, {@code false} if DML
* @return PreparedScript object representing the precompiled script
* @throws DMLException if DMLException occurs
http://git-wip-us.apache.org/repos/asf/systemml/blob/f7fe4342/src/main/java/org/apache/sysml/api/jmlc/PreparedScript.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/jmlc/PreparedScript.java b/src/main/java/org/apache/sysml/api/jmlc/PreparedScript.java
index c712bb2..c23ef92 100644
--- a/src/main/java/org/apache/sysml/api/jmlc/PreparedScript.java
+++ b/src/main/java/org/apache/sysml/api/jmlc/PreparedScript.java
@@ -23,7 +23,9 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map.Entry;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sysml.api.DMLException;
@@ -75,6 +77,21 @@ public class PreparedScript
private final DMLConfig _dmlconf;
private final CompilerConfig _cconf;
+ private PreparedScript(PreparedScript that) {
+ //shallow copy, except for a separate symbol table
+ //and related meta data of reused inputs
+ _prog = that._prog;
+ _vars = new LocalVariableMap();
+ for(Entry<String, Data> e : that._vars.entrySet())
+ _vars.put(e.getKey(), e.getValue());
+ _vars.setRegisteredOutputs(that._outVarnames);
+ _inVarnames = that._inVarnames;
+ _outVarnames = that._outVarnames;
+ _inVarReuse = new HashMap<>(that._inVarReuse);
+ _dmlconf = that._dmlconf;
+ _cconf = that._cconf;
+ }
+
/**
* Meant to be invoked only from Connection.
*
@@ -481,4 +498,24 @@ public class PreparedScript
}
}
}
+
+ /**
+ * Creates a cloned instance of the prepared script, which
+ * allows for concurrent execution without side effects.
+ *
+ * @param deep indicator if a deep copy needs to be created;
+ * if false, only a shallow (i.e., by reference) copy of the
+ * program and read-only meta data is created.
+ * @return an equivalent prepared script
+ */
+ public PreparedScript clone(boolean deep) {
+ if( deep )
+ throw new NotImplementedException();
+ return new PreparedScript(this);
+ }
+
+ @Override
+ public Object clone() {
+ return clone(true);
+ }
}
http://git-wip-us.apache.org/repos/asf/systemml/blob/f7fe4342/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCClonedPreparedScriptTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCClonedPreparedScriptTest.java b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCClonedPreparedScriptTest.java
new file mode 100644
index 0000000..d0667e0
--- /dev/null
+++ b/src/test/java/org/apache/sysml/test/integration/functions/jmlc/JMLCClonedPreparedScriptTest.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sysml.test.integration.functions.jmlc;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.apache.sysml.api.DMLException;
+import org.apache.sysml.api.DMLScript;
+import org.apache.sysml.api.jmlc.Connection;
+import org.apache.sysml.api.jmlc.PreparedScript;
+import org.apache.sysml.runtime.controlprogram.parfor.stat.InfrastructureAnalyzer;
+import org.apache.sysml.test.integration.AutomatedTestBase;
+import org.apache.sysml.utils.Statistics;
+
+public class JMLCClonedPreparedScriptTest extends AutomatedTestBase
+{
+ @Override
+ public void setUp() {
+ //do nothing
+ }
+
+ @Test
+ public void testSinglePreparedScript128() throws IOException {
+ runJMLCClonedTest(128, false);
+ }
+
+ @Test
+ public void testClonedPreparedScript128() throws IOException {
+ runJMLCClonedTest(128, true);
+ }
+
+ private void runJMLCClonedTest(int num, boolean clone)
+ throws IOException
+ {
+ int k = InfrastructureAnalyzer.getLocalParallelism();
+
+ boolean failed = false;
+ try( Connection conn = new Connection() ) {
+ String script =
+ " X = matrix(7, 10, 10);"
+ + "R = matrix(0, 10, 1)"
+ + "parfor(i in 1:nrow(X))"
+ + " R[i,] = sum(X[i,])"
+ + "out = sum(R)"
+ + "write(out, 'tmp/out')";
+ DMLScript.STATISTICS = true;
+ Statistics.reset();
+ PreparedScript pscript = conn.prepareScript(
+ script, new String[]{}, new String[]{"out"}, false);
+
+ ExecutorService pool = Executors.newFixedThreadPool(k);
+ ArrayList<JMLCTask> tasks = new ArrayList<>();
+ for(int i=0; i<num; i++)
+ tasks.add(new JMLCTask(pscript, clone));
+ List<Future<Double>> taskrets = pool.invokeAll(tasks);
+ for(Future<Double> ret : taskrets)
+ if( ret.get() != 700 )
+ throw new RuntimeException("wrong results: "+ret.get());
+ pool.shutdown();
+ }
+ catch(Exception ex) {
+ failed = true;
+ }
+
+ //check expected failure
+ Assert.assertTrue(failed==!clone || k==1);
+ }
+
+ private static class JMLCTask implements Callable<Double>
+ {
+ private final PreparedScript _pscript;
+ private final boolean _clone;
+
+ protected JMLCTask(PreparedScript pscript, boolean clone) {
+ _pscript = pscript;
+ _clone = clone;
+ }
+
+ @Override
+ public Double call() throws DMLException
+ {
+ if( _clone )
+ return _pscript.clone(false).executeScript().getDouble("out");
+ else
+ return _pscript.executeScript().getDouble("out");
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/systemml/blob/f7fe4342/src/test_suites/java/org/apache/sysml/test/integration/functions/jmlc/ZPackageSuite.java
----------------------------------------------------------------------
diff --git a/src/test_suites/java/org/apache/sysml/test/integration/functions/jmlc/ZPackageSuite.java b/src/test_suites/java/org/apache/sysml/test/integration/functions/jmlc/ZPackageSuite.java
index 3d5c13a..05fa8bc 100644
--- a/src/test_suites/java/org/apache/sysml/test/integration/functions/jmlc/ZPackageSuite.java
+++ b/src/test_suites/java/org/apache/sysml/test/integration/functions/jmlc/ZPackageSuite.java
@@ -34,8 +34,10 @@ import org.junit.runners.Suite;
FrameLeftIndexingTest.class,
FrameReadMetaTest.class,
FrameTransformTest.class,
+ JMLCClonedPreparedScriptTest.class,
JMLCInputOutputTest.class,
JMLCInputStreamReadTest.class,
+ JMLCParfor2ForCompileTest.class,
ReuseModelVariablesTest.class,
MulticlassSVMScoreTest.class
})