Skip to content

Commit

Permalink
[SYSTEMDS-3610] BuiltinSwitch Aggregate Skip
Browse files Browse the repository at this point in the history
This commit provide a minor minor change to the Builtin instructions
to include min and max. The difference in performance is negligible
but there, so we include the improvement.

Closes #1875
  • Loading branch information
Baunsgaard committed Aug 7, 2023
1 parent 2ff4b28 commit 6b3a6ce
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public enum BuiltinCode { AUTODIFF, SIN, COS, TAN, SINH, COSH, TANH, ASIN, ACOS,
String2BuiltinCode.put( "applySchema", BuiltinCode.APPLY_SCHEMA);
}

private Builtin(BuiltinCode bf) {
protected Builtin(BuiltinCode bf) {
bFunc = bf;
}

Expand All @@ -142,6 +142,10 @@ public static Builtin getBuiltinFnObject(String str) {
public static Builtin getBuiltinFnObject(BuiltinCode code) {
if ( code == null )
return null;
if(code == BuiltinCode.MAX)
return Max.getMaxFnObject();
else if (code == BuiltinCode.MIN)
return Min.getMinFnObject();
return new Builtin(code);
}

Expand Down
52 changes: 52 additions & 0 deletions src/main/java/org/apache/sysds/runtime/functionobjects/Max.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* 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.runtime.functionobjects;

public class Max extends Builtin {
private static Max singleObj = null;

private Max() {
super(BuiltinCode.MAX);
// nothing to do here.
}

private static final long serialVersionUID = 6529946102263905602L;

public static Max getMaxFnObject() {
if(singleObj == null)
singleObj = new Max();
return singleObj;
}

@Override
public boolean execute(boolean in1, boolean in2) {
return in1 || in2;
}

@Override
public double execute(long in1, long in2) {
return Math.max(in1, in2);
}

@Override
public double execute(double in1, double in2) {
return Math.max(in1, in2);
}
}
52 changes: 52 additions & 0 deletions src/main/java/org/apache/sysds/runtime/functionobjects/Min.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/*
* 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.runtime.functionobjects;

public class Min extends Builtin {
private static Min singleObj = null;

private Min() {
super(BuiltinCode.MIN);
// nothing to do here.
}

private static final long serialVersionUID = 6529946102263905602L;

public static Min getMinFnObject() {
if(singleObj == null)
singleObj = new Min();
return singleObj;
}

@Override
public boolean execute(boolean in1, boolean in2) {
return !(!in1 || !in2);
}

@Override
public double execute(long in1, long in2) {
return Math.min(in1, in2);
}

@Override
public double execute(double in1, double in2) {
return Math.min(in1, in2);
}
}

0 comments on commit 6b3a6ce

Please sign in to comment.