/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.nativelibs4java.opencl.blas.ujmp; import com.nativelibs4java.opencl.blas.CLDefaultMatrix2D; import com.nativelibs4java.opencl.blas.CLKernels; import com.nativelibs4java.opencl.blas.CLMatrixUtils; import org.bridj.Pointer; import static org.bridj.Pointer.*; import org.ujmp.core.Matrix; import org.ujmp.core.benchmark.AbstractMatrix2DBenchmark; import org.ujmp.core.doublematrix.DoubleMatrix2D; import org.ujmp.core.exceptions.MatrixException; /** * * @author ochafik */ public class CLMatrixBenchmark extends AbstractMatrix2DBenchmark { @Override public DoubleMatrix2D createMatrix(long... size) throws MatrixException { return new CLDenseDoubleMatrix2D(size); } @Override public DoubleMatrix2D createMatrix(Matrix source) throws MatrixException { if (source instanceof CLDenseDoubleMatrix2D) return (DoubleMatrix2D)((CLDenseDoubleMatrix2D)source).copy(); else { DoubleMatrix2D dsource = (DoubleMatrix2D)source; long rows = dsource.getRowCount(), columns = dsource.getColumnCount(); CLDenseDoubleMatrix2D copy = new CLDenseDoubleMatrix2D(rows, columns); long stride = copy.getStride(); Pointer<Double> b = allocateDoubles(rows * stride).order(CLKernels.getInstance().getContext().getKernelsDefaultByteOrder()); for (long i = 0; i < rows; i++) { long offset = i * stride; for (long j = 0; j < columns; j++) { b.set(offset + i, dsource.getDouble(i, j)); } } copy.write(b); return copy; } } }