[SYSTEMDS-2760] Transpose micro benchmark
This micro benchmark considers multiple cases, tallskinny, shortwide
and "normal" matrices. It gives an indication of if the transpose is
parallelizing and using the hardware appropriately.
Closes # 1127
diff --git a/.gitignore b/.gitignore
index f8b2e00..227fabd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -112,4 +112,5 @@
*.dmlt
# Performance Test artifacts
-scripts/perftest/results
\ No newline at end of file
+scripts/perftest/results
+scripts/perftest/in
\ No newline at end of file
diff --git a/scripts/perftest/MatrixTranspose.sh b/scripts/perftest/MatrixTranspose.sh
new file mode 100755
index 0000000..151d53a
--- /dev/null
+++ b/scripts/perftest/MatrixTranspose.sh
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+#-------------------------------------------------------------
+#
+# 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.
+#
+#-------------------------------------------------------------
+
+# Set properties
+export LOG4JPROP='scripts/perftest/conf/log4j-off.properties'
+export SYSDS_QUIET=1
+export SYSTEMDS_ROOT=$(pwd)
+export PATH=$SYSTEMDS_ROOT/bin:$PATH
+
+export SYSTEMDS_STANDALONE_OPTS="-Xmx20g -Xms20g -Xmn2000m"
+
+mkdir -p 'scripts/perftest/results'
+
+repeatScript=5
+methodRepeat=5
+sparsities=("1.0 0.1")
+
+for s in $sparsities; do
+
+ LogName="scripts/perftest/results/transpose-skinny-$s.log"
+ rm -f $LogName
+
+ # Baseline
+ perf stat -d -d -d -r $repeatScript \
+ systemds scripts/perftest/scripts/transpose.dml \
+ -config scripts/perftest/conf/std.xml \
+ -stats \
+ -args 2500000 50 $s $methodRepeat \
+ >>$LogName 2>&1
+
+ echo $LogName
+ cat $LogName | grep -E ' r. |Total elapsed time|-----------| instructions | cycles | CPUs utilized ' | tee $LogName.log
+
+ LogName="scripts/perftest/results/transpose-wide-$s.log"
+ rm -f $LogName
+
+ # Baseline
+ perf stat -d -d -d -r $repeatScript \
+ systemds scripts/perftest/scripts/transpose.dml \
+ -config scripts/perftest/conf/std.xml \
+ -stats \
+ -args 50 2500000 $s $methodRepeat \
+ >>$LogName 2>&1
+
+ echo $LogName
+ cat $LogName | grep -E ' r. |Total elapsed time|-----------| instructions | cycles | CPUs utilized ' | tee $LogName.log
+
+ LogName="scripts/perftest/results/transpose-full-$s.log"
+ rm -f $LogName
+
+ # Baseline
+ perf stat -d -d -d -r $repeatScript \
+ systemds scripts/perftest/scripts/transpose.dml \
+ -config scripts/perftest/conf/std.xml \
+ -stats \
+ -args 20000 5000 $s $methodRepeat \
+ >>$LogName 2>&1
+
+ echo $LogName
+ cat $LogName | grep -E ' r. |Total elapsed time|-----------| instructions | cycles | CPUs utilized ' | tee $LogName.log
+done
+
+LogName="scripts/perftest/results/transpose-large.log"
+rm -f $LogName
+# Baseline
+perf stat -d -d -d -r $repeatScript \
+ systemds scripts/perftest/scripts/transpose.dml \
+ -config scripts/perftest/conf/std.xml \
+ -stats \
+ -args 15000000 30 0.8 $methodRepeat \
+ >>$LogName 2>&1
+
+echo $LogName
+cat $LogName | grep -E ' r. |Total elapsed time|-----------| instructions | cycles | CPUs utilized ' | tee $LogName.log
+
+
diff --git a/scripts/perftest/runAll.sh b/scripts/perftest/runAll.sh
index 88974f9..a168a51 100755
--- a/scripts/perftest/runAll.sh
+++ b/scripts/perftest/runAll.sh
@@ -24,6 +24,7 @@
# Micro Benchmarks:
./scripts/perftest/MatrixMult.sh
+./scripts/perftest/MatrixTranspose.sh
# Algorithms Benchmarks:
diff --git a/scripts/perftest/scripts/transpose.dml b/scripts/perftest/scripts/transpose.dml
new file mode 100644
index 0000000..ec5e0ac
--- /dev/null
+++ b/scripts/perftest/scripts/transpose.dml
@@ -0,0 +1,26 @@
+#-------------------------------------------------------------
+#
+# 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.
+#
+#-------------------------------------------------------------
+
+x = rand(rows=$1, cols=$2, min= 0.0, max= 1.0, sparsity=$3, seed= 12)
+for(i in 1:$4) {
+ res = t(x)
+}
+print(sum(res))
\ No newline at end of file