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 {

Reply via email to