Repository: systemml Updated Branches: refs/heads/master aa15197ec -> 50a895f86
http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeUnary.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeUnary.java b/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeUnary.java index a4aa093..541fe30 100644 --- a/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeUnary.java +++ b/src/main/java/org/apache/sysml/hops/codegen/cplan/CNodeUnary.java @@ -27,6 +27,7 @@ import org.apache.sysml.runtime.util.UtilFunctions; public class CNodeUnary extends CNode { + // TODO: Add support for SINH, COSH and TANH public enum UnaryType { LOOKUP_R, LOOKUP_C, LOOKUP_RC, LOOKUP0, CBIND0, //codegen specific ROW_SUMS, ROW_MINS, ROW_MAXS, //codegen specific http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java index c230505..acb90e2 100644 --- a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java +++ b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBased.java @@ -701,6 +701,9 @@ public class PlanSelectionFuseCostBased extends PlanSelection case ASIN: costs = 93; break; case ACOS: costs = 103; break; case ATAN: costs = 40; break; + case SINH: costs = 93; break; // TODO: + case COSH: costs = 103; break; + case TANH: costs = 40; break; case CUMSUM: case CUMMIN: case CUMMAX: http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java index 1bf42f6..30631d0 100644 --- a/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java +++ b/src/main/java/org/apache/sysml/hops/codegen/opt/PlanSelectionFuseCostBasedV2.java @@ -928,6 +928,9 @@ public class PlanSelectionFuseCostBasedV2 extends PlanSelection case ASIN: costs = 93; break; case ACOS: costs = 103; break; case ATAN: costs = 40; break; + case SINH: costs = 93; break; // TODO: + case COSH: costs = 103; break; + case TANH: costs = 40; break; case CUMSUM: case CUMMIN: case CUMMAX: http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/lops/Unary.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/lops/Unary.java b/src/main/java/org/apache/sysml/lops/Unary.java index cc53666..36f186a 100644 --- a/src/main/java/org/apache/sysml/lops/Unary.java +++ b/src/main/java/org/apache/sysml/lops/Unary.java @@ -38,7 +38,7 @@ public class Unary extends Lop public enum OperationTypes { ADD, SUBTRACT, SUBTRACTRIGHT, MULTIPLY, MULTIPLY2, DIVIDE, MODULUS, INTDIV, MINUS1_MULTIPLY, - POW, POW2, LOG, MAX, MIN, NOT, ABS, SIN, COS, TAN, ASIN, ACOS, ATAN, SIGN, SQRT, EXP, Over, + POW, POW2, LOG, MAX, MIN, NOT, ABS, SIN, COS, TAN, ASIN, ACOS, ATAN, SINH, COSH, TANH, SIGN, SQRT, EXP, Over, LESS_THAN, LESS_THAN_OR_EQUALS, GREATER_THAN, GREATER_THAN_OR_EQUALS, EQUALS, NOT_EQUALS, ROUND, CEIL, FLOOR, MR_IQM, INVERSE, CHOLESKY, CUMSUM, CUMPROD, CUMMIN, CUMMAX, @@ -194,6 +194,12 @@ public class Unary extends Lop return "acos"; case ATAN: return "atan"; + case SINH: + return "sinh"; + case COSH: + return "cosh"; + case TANH: + return "tanh"; case SIGN: return "sign"; case SQRT: http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/lops/UnaryCP.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/lops/UnaryCP.java b/src/main/java/org/apache/sysml/lops/UnaryCP.java index fad0304..c83baf4 100644 --- a/src/main/java/org/apache/sysml/lops/UnaryCP.java +++ b/src/main/java/org/apache/sysml/lops/UnaryCP.java @@ -34,7 +34,7 @@ public class UnaryCP extends Lop { public enum OperationTypes { - NOT, ABS, SIN, COS, TAN, ASIN, ACOS, ATAN, SQRT, LOG, EXP, + NOT, ABS, SIN, COS, TAN, ASIN, ACOS, ATAN, SQRT, LOG, EXP, SINH, COSH, TANH, CAST_AS_SCALAR, CAST_AS_MATRIX, CAST_AS_FRAME, CAST_AS_DOUBLE, CAST_AS_INT, CAST_AS_BOOLEAN, PRINT, NROW, NCOL, LENGTH, ROUND, STOP, CEIL, FLOOR, CUMSUM }; @@ -106,6 +106,15 @@ public class UnaryCP extends Lop case ATAN: return "atan"; + case SINH: + return "sinh"; + + case COSH: + return "cosh"; + + case TANH: + return "tanh"; + case SQRT: return "sqrt"; http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java b/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java index e03add3..1e54251 100644 --- a/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java +++ b/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java @@ -1322,6 +1322,9 @@ public class BuiltinFunctionExpression extends DataIdentifier case ACOS: case ASIN: case ATAN: + case COSH: + case SINH: + case TANH: case SIGN: case SQRT: case ABS: @@ -1345,6 +1348,9 @@ public class BuiltinFunctionExpression extends DataIdentifier case ACOS: case ASIN: case ATAN: + case COSH: + case SINH: + case TANH: case SIGN: case SQRT: case ABS: @@ -1552,6 +1558,12 @@ public class BuiltinFunctionExpression extends DataIdentifier bifop = Expression.BuiltinFunctionOp.ASIN; else if (functionName.equals("atan")) bifop = Expression.BuiltinFunctionOp.ATAN; + else if (functionName.equals("cosh")) + bifop = Expression.BuiltinFunctionOp.COSH; + else if (functionName.equals("sinh")) + bifop = Expression.BuiltinFunctionOp.SINH; + else if (functionName.equals("tanh")) + bifop = Expression.BuiltinFunctionOp.TANH; else if (functionName.equals("diag")) bifop = Expression.BuiltinFunctionOp.DIAG; else if (functionName.equals("exp")) http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/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 f44c0a4..123fe19 100644 --- a/src/main/java/org/apache/sysml/parser/DMLTranslator.java +++ b/src/main/java/org/apache/sysml/parser/DMLTranslator.java @@ -2765,6 +2765,9 @@ public class DMLTranslator case ASIN: case ACOS: case ATAN: + case SINH: + case COSH: + case TANH: case SIGN: case SQRT: case EXP: @@ -2798,6 +2801,15 @@ public class DMLTranslator case ATAN: mathOp1 = Hop.OpOp1.ATAN; break; + case SINH: + mathOp1 = Hop.OpOp1.SINH; + break; + case COSH: + mathOp1 = Hop.OpOp1.COSH; + break; + case TANH: + mathOp1 = Hop.OpOp1.TANH; + break; case SIGN: mathOp1 = Hop.OpOp1.SIGN; break; http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/parser/Expression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/Expression.java b/src/main/java/org/apache/sysml/parser/Expression.java index a68f59f..053a5a3 100644 --- a/src/main/java/org/apache/sysml/parser/Expression.java +++ b/src/main/java/org/apache/sysml/parser/Expression.java @@ -78,6 +78,7 @@ public abstract class Expression implements ParseInfo COLSUM, COLVAR, COS, + COSH, COV, CUMMAX, CUMMIN, @@ -123,6 +124,7 @@ public abstract class Expression implements ParseInfo SD, SEQ, SIN, + SINH, SIGN, SOLVE, SQRT, @@ -130,6 +132,7 @@ public abstract class Expression implements ParseInfo SVD, TABLE, TAN, + TANH, TRACE, TRANS, VAR http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/functionobjects/Builtin.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/functionobjects/Builtin.java b/src/main/java/org/apache/sysml/runtime/functionobjects/Builtin.java index 753e494..a05eefe 100644 --- a/src/main/java/org/apache/sysml/runtime/functionobjects/Builtin.java +++ b/src/main/java/org/apache/sysml/runtime/functionobjects/Builtin.java @@ -49,7 +49,7 @@ public class Builtin extends ValueFunction private static final long serialVersionUID = 3836744687789840574L; - public enum BuiltinCode { SIN, COS, TAN, ASIN, ACOS, ATAN, LOG, LOG_NZ, MIN, MAX, ABS, SIGN, SQRT, EXP, PLOGP, PRINT, PRINTF, NROW, NCOL, LENGTH, ROUND, MAXINDEX, MININDEX, STOP, CEIL, FLOOR, CUMSUM, CUMPROD, CUMMIN, CUMMAX, INVERSE, SPROP, SIGMOID, SELP }; + public enum BuiltinCode { SIN, COS, TAN, SINH, COSH, TANH, ASIN, ACOS, ATAN, LOG, LOG_NZ, MIN, MAX, ABS, SIGN, SQRT, EXP, PLOGP, PRINT, PRINTF, NROW, NCOL, LENGTH, ROUND, MAXINDEX, MININDEX, STOP, CEIL, FLOOR, CUMSUM, CUMPROD, CUMMIN, CUMMAX, INVERSE, SPROP, SIGMOID, SELP }; public BuiltinCode bFunc; private static final boolean FASTMATH = true; @@ -61,6 +61,9 @@ public class Builtin extends ValueFunction String2BuiltinCode.put( "sin" , BuiltinCode.SIN); String2BuiltinCode.put( "cos" , BuiltinCode.COS); String2BuiltinCode.put( "tan" , BuiltinCode.TAN); + String2BuiltinCode.put( "sinh" , BuiltinCode.SINH); + String2BuiltinCode.put( "cosh" , BuiltinCode.COSH); + String2BuiltinCode.put( "tanh" , BuiltinCode.TANH); String2BuiltinCode.put( "asin" , BuiltinCode.ASIN); String2BuiltinCode.put( "acos" , BuiltinCode.ACOS); String2BuiltinCode.put( "atan" , BuiltinCode.ATAN); @@ -95,7 +98,7 @@ public class Builtin extends ValueFunction } // We should create one object for every builtin function that we support - private static Builtin sinObj = null, cosObj = null, tanObj = null, asinObj = null, acosObj = null, atanObj = null; + private static Builtin sinObj = null, cosObj = null, tanObj = null, sinhObj = null, coshObj = null, tanhObj = null, asinObj = null, acosObj = null, atanObj = null; private static Builtin logObj = null, lognzObj = null, minObj = null, maxObj = null, maxindexObj = null, minindexObj=null; private static Builtin absObj = null, signObj = null, sqrtObj = null, expObj = null, plogpObj = null, printObj = null, printfObj; private static Builtin nrowObj = null, ncolObj = null, lengthObj = null, roundObj = null, ceilObj=null, floorObj=null; @@ -135,6 +138,19 @@ public class Builtin extends ValueFunction if ( tanObj == null ) tanObj = new Builtin(BuiltinCode.TAN); return tanObj; + case SINH: + if ( sinhObj == null ) + sinhObj = new Builtin(BuiltinCode.SINH); + return sinhObj; + + case COSH: + if ( coshObj == null ) + coshObj = new Builtin(BuiltinCode.COSH); + return coshObj; + case TANH: + if ( tanhObj == null ) + tanhObj = new Builtin(BuiltinCode.TANH); + return tanhObj; case ASIN: if ( asinObj == null ) asinObj = new Builtin(BuiltinCode.ASIN); @@ -282,6 +298,10 @@ public class Builtin extends ValueFunction case ASIN: return FASTMATH ? FastMath.asin(in) : Math.asin(in); case ACOS: return FASTMATH ? FastMath.acos(in) : Math.acos(in); case ATAN: return Math.atan(in); //faster in Math + // FastMath.*h is faster 98% of time than Math.*h in initial micro-benchmarks + case SINH: return FASTMATH ? FastMath.sinh(in) : Math.sinh(in); + case COSH: return FASTMATH ? FastMath.cosh(in) : Math.cosh(in); + case TANH: return FASTMATH ? FastMath.tanh(in) : Math.tanh(in); case CEIL: return FASTMATH ? FastMath.ceil(in) : Math.ceil(in); case FLOOR: return FASTMATH ? FastMath.floor(in) : Math.floor(in); case LOG: return Math.log(in); //faster in Math http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/instructions/CPInstructionParser.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/CPInstructionParser.java b/src/main/java/org/apache/sysml/runtime/instructions/CPInstructionParser.java index 2f77710..f6b880d 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/CPInstructionParser.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/CPInstructionParser.java @@ -158,6 +158,9 @@ public class CPInstructionParser extends InstructionParser String2CPInstructionType.put( "sin" , CPINSTRUCTION_TYPE.BuiltinUnary); String2CPInstructionType.put( "cos" , CPINSTRUCTION_TYPE.BuiltinUnary); String2CPInstructionType.put( "tan" , CPINSTRUCTION_TYPE.BuiltinUnary); + String2CPInstructionType.put( "sinh" , CPINSTRUCTION_TYPE.BuiltinUnary); + String2CPInstructionType.put( "cosh" , CPINSTRUCTION_TYPE.BuiltinUnary); + String2CPInstructionType.put( "tanh" , CPINSTRUCTION_TYPE.BuiltinUnary); String2CPInstructionType.put( "asin" , CPINSTRUCTION_TYPE.BuiltinUnary); String2CPInstructionType.put( "acos" , CPINSTRUCTION_TYPE.BuiltinUnary); String2CPInstructionType.put( "atan" , CPINSTRUCTION_TYPE.BuiltinUnary); http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/instructions/GPUInstructionParser.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/GPUInstructionParser.java b/src/main/java/org/apache/sysml/runtime/instructions/GPUInstructionParser.java index 6f1ed91..503576f 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/GPUInstructionParser.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/GPUInstructionParser.java @@ -91,6 +91,9 @@ public class GPUInstructionParser extends InstructionParser String2GPUInstructionType.put( "sin", GPUINSTRUCTION_TYPE.BuiltinUnary); String2GPUInstructionType.put( "cos", GPUINSTRUCTION_TYPE.BuiltinUnary); String2GPUInstructionType.put( "tan", GPUINSTRUCTION_TYPE.BuiltinUnary); + String2GPUInstructionType.put( "sinh", GPUINSTRUCTION_TYPE.BuiltinUnary); + String2GPUInstructionType.put( "cosh", GPUINSTRUCTION_TYPE.BuiltinUnary); + String2GPUInstructionType.put( "tanh", GPUINSTRUCTION_TYPE.BuiltinUnary); String2GPUInstructionType.put( "asin", GPUINSTRUCTION_TYPE.BuiltinUnary); String2GPUInstructionType.put( "acos", GPUINSTRUCTION_TYPE.BuiltinUnary); String2GPUInstructionType.put( "atan", GPUINSTRUCTION_TYPE.BuiltinUnary); http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/instructions/SPInstructionParser.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/SPInstructionParser.java b/src/main/java/org/apache/sysml/runtime/instructions/SPInstructionParser.java index 2ebb2e1..b5f8a04 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/SPInstructionParser.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/SPInstructionParser.java @@ -216,6 +216,9 @@ public class SPInstructionParser extends InstructionParser String2SPInstructionType.put( "asin" , SPINSTRUCTION_TYPE.BuiltinUnary); String2SPInstructionType.put( "acos" , SPINSTRUCTION_TYPE.BuiltinUnary); String2SPInstructionType.put( "atan" , SPINSTRUCTION_TYPE.BuiltinUnary); + String2SPInstructionType.put( "sinh" , SPINSTRUCTION_TYPE.BuiltinUnary); + String2SPInstructionType.put( "cosh" , SPINSTRUCTION_TYPE.BuiltinUnary); + String2SPInstructionType.put( "tanh" , SPINSTRUCTION_TYPE.BuiltinUnary); String2SPInstructionType.put( "sign" , SPINSTRUCTION_TYPE.BuiltinUnary); String2SPInstructionType.put( "sqrt" , SPINSTRUCTION_TYPE.BuiltinUnary); String2SPInstructionType.put( "plogp" , SPINSTRUCTION_TYPE.BuiltinUnary); http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java index 149de80..bc3ba9b 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/gpu/GPUInstruction.java @@ -104,6 +104,9 @@ public abstract class GPUInstruction extends Instruction { public final static String MISC_TIMER_SIN_KERNEL = "sink"; // time spent in the sin kernel public final static String MISC_TIMER_COS_KERNEL = "cosk"; // time spent in the cos kernel public final static String MISC_TIMER_TAN_KERNEL = "tank"; // time spent in the tan kernel + public final static String MISC_TIMER_SINH_KERNEL = "sinhk"; // time spent in the sinh kernel + public final static String MISC_TIMER_COSH_KERNEL = "coshk"; // time spent in the cosh kernel + public final static String MISC_TIMER_TANH_KERNEL = "tanhk"; // time spent in the tanh kernel public final static String MISC_TIMER_ASIN_KERNEL = "asink"; // time spent in the asin kernel public final static String MISC_TIMER_ACOS_KERNEL = "acosk"; // time spent in the acos kernel public final static String MISC_TIMER_ATAN_KERNEL = "atank"; // time spent in the atan kernel http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixBuiltinGPUInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixBuiltinGPUInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixBuiltinGPUInstruction.java index 5096566..1718d69 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixBuiltinGPUInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/gpu/MatrixBuiltinGPUInstruction.java @@ -66,6 +66,12 @@ public class MatrixBuiltinGPUInstruction extends BuiltinUnaryGPUInstruction { LibMatrixCUDA.cos(ec, ec.getGPUContext(0), getExtendedOpcode(), mat, _output.getName()); break; case "tan": LibMatrixCUDA.tan(ec, ec.getGPUContext(0), getExtendedOpcode(), mat, _output.getName()); break; + case "sinh": + LibMatrixCUDA.sinh(ec, ec.getGPUContext(0), getExtendedOpcode(), mat, _output.getName()); break; + case "cosh": + LibMatrixCUDA.cosh(ec, ec.getGPUContext(0), getExtendedOpcode(), mat, _output.getName()); break; + case "tanh": + LibMatrixCUDA.tanh(ec, ec.getGPUContext(0), getExtendedOpcode(), mat, _output.getName()); break; case "asin": LibMatrixCUDA.asin(ec, ec.getGPUContext(0), getExtendedOpcode(), mat, _output.getName()); break; case "acos": http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java index 5f31f28..4b2cd73 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/data/LibMatrixCUDA.java @@ -2604,6 +2604,57 @@ public class LibMatrixCUDA { // tan(0) = 0 unaryOp(ec, gCtx, in1, "matrix_tan", 0, outputName, instName, GPUInstruction.MISC_TIMER_TAN_KERNEL); } + + /** + * Performs an "sinh" operation on a matrix on the GPU + * @param ec execution context + * @param gCtx a valid {@link GPUContext} + * @param instName the invoking instruction's name for record {@link Statistics}. + * @param in1 input matrix + * @param outputName output matrix name + * @throws DMLRuntimeException if DMLRuntimeException occurs + */ + public static void sinh(ExecutionContext ec, GPUContext gCtx, String instName, MatrixObject in1, String outputName) throws DMLRuntimeException { + if(LOG.isTraceEnabled()) { + LOG.trace("GPU : sinh" + ", GPUContext=" + gCtx); + } + // sin(0) = 0 + unaryOp(ec, gCtx, in1, "matrix_sinh", 0, outputName, instName, GPUInstruction.MISC_TIMER_SINH_KERNEL); + } + + /** + * Performs an "cosh" operation on a matrix on the GPU + * @param ec execution context + * @param gCtx a valid {@link GPUContext} + * @param instName the invoking instruction's name for record {@link Statistics}. + * @param in1 input matrix + * @param outputName output matrix name + * @throws DMLRuntimeException if DMLRuntimeException occurs + */ + public static void cosh(ExecutionContext ec, GPUContext gCtx, String instName, MatrixObject in1, String outputName) throws DMLRuntimeException { + if(LOG.isTraceEnabled()) { + LOG.trace("GPU : cosh" + ", GPUContext=" + gCtx); + } + // cos(0) = 1 + unaryOp(ec, gCtx, in1, "matrix_cosh", 1, outputName, instName, GPUInstruction.MISC_TIMER_COSH_KERNEL); + } + + /** + * Performs an "tanh" operation on a matrix on the GPU + * @param ec execution context + * @param gCtx a valid {@link GPUContext} + * @param instName the invoking instruction's name for record {@link Statistics}. + * @param in1 input matrix + * @param outputName output matrix name + * @throws DMLRuntimeException if DMLRuntimeException occurs + */ + public static void tanh(ExecutionContext ec, GPUContext gCtx, String instName, MatrixObject in1, String outputName) throws DMLRuntimeException { + if(LOG.isTraceEnabled()) { + LOG.trace("GPU : tanh" + ", GPUContext=" + gCtx); + } + // tan(0) = 0 + unaryOp(ec, gCtx, in1, "matrix_tanh", 0, outputName, instName, GPUInstruction.MISC_TIMER_TANH_KERNEL); + } /** * Performs an "asin" operation on a matrix on the GPU http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/java/org/apache/sysml/runtime/matrix/operators/UnaryOperator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/matrix/operators/UnaryOperator.java b/src/main/java/org/apache/sysml/runtime/matrix/operators/UnaryOperator.java index 9b4f34f..743b1f3 100644 --- a/src/main/java/org/apache/sysml/runtime/matrix/operators/UnaryOperator.java +++ b/src/main/java/org/apache/sysml/runtime/matrix/operators/UnaryOperator.java @@ -43,6 +43,8 @@ public class UnaryOperator extends Operator if( fn instanceof Builtin ) { Builtin f=(Builtin)fn; sparseSafe = (f.bFunc==Builtin.BuiltinCode.SIN || f.bFunc==Builtin.BuiltinCode.TAN + // sinh and tanh are zero only at zero, else they are nnz + || f.bFunc==Builtin.BuiltinCode.SINH || f.bFunc==Builtin.BuiltinCode.TANH || f.bFunc==Builtin.BuiltinCode.ROUND || f.bFunc==Builtin.BuiltinCode.ABS || f.bFunc==Builtin.BuiltinCode.SQRT || f.bFunc==Builtin.BuiltinCode.SPROP || f.bFunc==Builtin.BuiltinCode.SELP || f.bFunc==Builtin.BuiltinCode.LOG_NZ http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/main/python/systemml/defmatrix.py ---------------------------------------------------------------------- diff --git a/src/main/python/systemml/defmatrix.py b/src/main/python/systemml/defmatrix.py index d24ba62..576e300 100644 --- a/src/main/python/systemml/defmatrix.py +++ b/src/main/python/systemml/defmatrix.py @@ -830,7 +830,16 @@ class matrix(object): def tan(self): return unaryMatrixFunction(self, 'tan') + + def sinh(self): + return unaryMatrixFunction(self, 'sinh') + + def cosh(self): + return unaryMatrixFunction(self, 'cosh') + def tanh(self): + return unaryMatrixFunction(self, 'tanh') + def arcsin(self): return self.asin() http://git-wip-us.apache.org/repos/asf/systemml/blob/50a895f8/src/test/java/org/apache/sysml/test/gpu/UnaryOpTests.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/sysml/test/gpu/UnaryOpTests.java b/src/test/java/org/apache/sysml/test/gpu/UnaryOpTests.java index 84b1f73..510766e 100644 --- a/src/test/java/org/apache/sysml/test/gpu/UnaryOpTests.java +++ b/src/test/java/org/apache/sysml/test/gpu/UnaryOpTests.java @@ -50,6 +50,21 @@ public class UnaryOpTests extends UnaryOpTestsBase { public void testTan() throws Exception { testSimpleUnaryOpMatrixOutput("tan", "gpu_tan"); } + + @Test + public void testSinh() throws Exception { + testSimpleUnaryOpMatrixOutput("sinh", "gpu_sinh"); + } + + @Test + public void testCosh() throws Exception { + testSimpleUnaryOpMatrixOutput("cosh", "gpu_cosh"); + } + + @Test + public void testTanh() throws Exception { + testSimpleUnaryOpMatrixOutput("tanh", "gpu_tanh"); + } @Test public void testAsin() throws Exception {
