blob: 182b44e0bb369a53c6c09bac5fc7e57745ba2f7a [file] [log] [blame]
/*
* 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.sysds.test.functions.paramserv;
import java.util.stream.IntStream;
import org.apache.sysds.parser.Statement;
import org.apache.sysds.runtime.controlprogram.paramserv.ParamservUtils;
import org.apache.sysds.runtime.controlprogram.paramserv.dp.DataPartitionLocalScheme;
import org.apache.sysds.runtime.controlprogram.paramserv.dp.LocalDataPartitioner;
import org.apache.sysds.runtime.matrix.data.MatrixBlock;
import org.apache.sysds.runtime.util.DataConverter;
public abstract class BaseDataPartitionerTest {
protected static final int ROW_SIZE = 2000;
protected static final int COL_SIZE = 1000;
protected static final int WORKER_NUM = 2;
protected MatrixBlock[] generateData() {
double[][] df = new double[BaseDataPartitionerTest.ROW_SIZE][BaseDataPartitionerTest.COL_SIZE];
for (int i = 0; i < BaseDataPartitionerTest.ROW_SIZE; i++) {
for (int j = 0; j < BaseDataPartitionerTest.COL_SIZE; j++) {
df[i][j] = i * BaseDataPartitionerTest.COL_SIZE + j;
}
}
double[] dl = new double[BaseDataPartitionerTest.ROW_SIZE];
for (int i = 0; i < BaseDataPartitionerTest.ROW_SIZE; i++) {
dl[i] = i;
}
MatrixBlock fmb = DataConverter.convertToMatrixBlock(df);
MatrixBlock lmb = DataConverter.convertToMatrixBlock(dl, true);
return new MatrixBlock[] { fmb, lmb };
}
protected double[] generateExpectedData(int from, int to) {
return IntStream.range(from, to).mapToDouble(i -> (double) i).toArray();
}
protected DataPartitionLocalScheme.Result launchLocalDataPartitionerDC() {
LocalDataPartitioner dp = new LocalDataPartitioner(Statement.PSScheme.DISJOINT_CONTIGUOUS);
MatrixBlock[] mbs = generateData();
return dp.doPartitioning(WORKER_NUM, mbs[0], mbs[1]);
}
protected DataPartitionLocalScheme.Result launchLocalDataPartitionerDR(MatrixBlock[] mbs) {
ParamservUtils.SEED = System.nanoTime();
LocalDataPartitioner dp = new LocalDataPartitioner(Statement.PSScheme.DISJOINT_RANDOM);
return dp.doPartitioning(WORKER_NUM, mbs[0], mbs[1]);
}
protected DataPartitionLocalScheme.Result launchLocalDataPartitionerDRR() {
LocalDataPartitioner dp = new LocalDataPartitioner(Statement.PSScheme.DISJOINT_ROUND_ROBIN);
MatrixBlock[] mbs = generateData();
return dp.doPartitioning(WORKER_NUM, mbs[0], mbs[1]);
}
protected DataPartitionLocalScheme.Result launchLocalDataPartitionerOR() {
LocalDataPartitioner dp = new LocalDataPartitioner(Statement.PSScheme.OVERLAP_RESHUFFLE);
MatrixBlock[] mbs = generateData();
return dp.doPartitioning(WORKER_NUM, mbs[0], mbs[1]);
}
}