Repository: systemml
Updated Branches:
refs/heads/master ac1cf093a -> b70608328
[SYSTEMML-1796] Improved formatting of fine-grained statistics for SystemML
- The user can update systemml.stats.maxWrapLength configuration to
change the maximum wrap length of instruction and misc timers
- Here are some examples:
```
Heavy hitter instructions:
# Instruction Time(s) Count Misc Timers
1 write [PCA.dml 110:8-110:14] 7.740 1
2 eigen [PCA.dml 85:1-85:1] 7.191 1 rlswr[0.000s,2],
rlsev[0.000s,0], a
qmd[0.001s,2]
3 write [92:12-92:25] 0.686 1
4 ba+* [PCA.dml 110:8-110:14] 0.511 1 rlswr[0.000s,1],
rlsev[0.000s,0], a
qmd[0.000s,1],
aqrd[0.000s,2], rlsi
[0.000s,2]
5 tsmm [PCA.dml 81:5-81:16] 0.372 1 rlswr[0.000s,1],
rlsev[0.000s,0], r
lsi[0.000s,1],
aqrd[0.000s,1], aqmd
[0.000s,1]
6 uacmean [PCA.dml 66:5-66:5] 0.361 1 rlswr[0.000s,1],
rlsev[0.000s,0], a
qmd[0.000s,1],
rlsi[0.000s,1], aqrd
[0.204s,1]
7 ba+* [92:12-92:25] 0.155 1 rlswr[0.000s,1],
aqmd[0.000s,1], aq
rs[0.000s,1],
aqrd[0.000s,1], rlsev
[0.000s,0],
rlsi[0.000s,2]
Heavy hitter instructions:
# Instruction Time(s) Count Misc Timers
1 write [PCA 7.751 1
.dml 110:8
-110:14]
2 eigen [PCA 7.031 1 rlswr[0.00
.dml 85:1- 0s,2], rls
85:1] ev[0.000s,
0], aqmd[0
.000s,2]
3 write [92: 0.687 1
12-92:25]
4 ba+* [PCA. 0.527 1 rlswr[0.00
dml 110:8- 0s,1], aqm
110:14] d[0.000s,1
], aqrd[0.
000s,2], r
lsev[0.000
s,0], rlsi
[0.001s,2]
5 tsmm [PCA. 0.401 1 rlswr[0.00
dml 81:5-8 0s,1], rls
1:16] ev[0.000s,
0], rlsi[0
.000s,1],
aqrd[0.000
s,1], aqmd
[0.000s,1]
Heavy hitter instructions:
# Instruction Time(s) Count
1 write 8.371 4
2 eigen 7.239 1
3 ba+* 0.663 3
4 tsmm 0.340 2
5 uacmean 0.309 2
6 uacsqk+ 0.146 1
7 / 0.107 5
8 - 0.067 3
9 uack+ 0.043 1
10 -* 0.025 2
11 ctableexpa 0.007 1
nd
```
Closes #593.
Project: http://git-wip-us.apache.org/repos/asf/systemml/repo
Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/b7060832
Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/b7060832
Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/b7060832
Branch: refs/heads/master
Commit: b706083282e75203d57c72ef138a284078fd33b2
Parents: ac1cf09
Author: Niketan Pansare <[email protected]>
Authored: Thu Aug 3 09:10:37 2017 -0800
Committer: Niketan Pansare <[email protected]>
Committed: Thu Aug 3 10:10:37 2017 -0700
----------------------------------------------------------------------
conf/SystemML-config.xml.template | 3 ++
.../java/org/apache/sysml/api/DMLScript.java | 3 +-
.../apache/sysml/api/ScriptExecutorUtils.java | 1 +
.../java/org/apache/sysml/conf/DMLConfig.java | 4 +-
.../java/org/apache/sysml/utils/Statistics.java | 46 ++++++++++++++++----
5 files changed, 46 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/systemml/blob/b7060832/conf/SystemML-config.xml.template
----------------------------------------------------------------------
diff --git a/conf/SystemML-config.xml.template
b/conf/SystemML-config.xml.template
index 8608a9c..86bacda 100644
--- a/conf/SystemML-config.xml.template
+++ b/conf/SystemML-config.xml.template
@@ -80,4 +80,7 @@
<!-- sets the GPUs to use per process, -1 for all GPUs, a specific GPU
number (5), a range (eg: 0-2) or a comma separated list (eg: 0,2,4)-->
<systemml.gpu.availableGPUs>-1</systemml.gpu.availableGPUs>
+
+ <!-- maximum wrap length for instruction and miscellaneous timer column of
statistics -->
+ <systemml.stats.maxWrapLength>30</systemml.stats.maxWrapLength>
</root>
http://git-wip-us.apache.org/repos/asf/systemml/blob/b7060832/src/main/java/org/apache/sysml/api/DMLScript.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/DMLScript.java
b/src/main/java/org/apache/sysml/api/DMLScript.java
index 9cb5ebe..eef6990 100644
--- a/src/main/java/org/apache/sysml/api/DMLScript.java
+++ b/src/main/java/org/apache/sysml/api/DMLScript.java
@@ -158,8 +158,9 @@ public class DMLScript
public static RUNTIME_PLATFORM rtplatform =
DMLOptions.defaultOptions.execMode; // the execution mode
public static boolean STATISTICS =
DMLOptions.defaultOptions.stats; // whether to print statistics
- public static boolean FINEGRAINED_STATISTICS =
DMLOptions.defaultOptions.stats; // whether to print statistics
+ public static boolean FINEGRAINED_STATISTICS = false;
// whether to print fine-grained
statistics
public static int STATISTICS_COUNT =
DMLOptions.defaultOptions.statsCount; // statistics maximum heavy hitter count
+ public static int STATISTICS_MAX_WRAP_LEN = 30;
// statistics maximum wrap length
public static boolean ENABLE_DEBUG_MODE =
DMLOptions.defaultOptions.debug; // debug mode
public static ExplainType EXPLAIN =
DMLOptions.defaultOptions.explainType; // explain type
public static String DML_FILE_PATH_ANTLR_PARSER =
DMLOptions.defaultOptions.filePath; // filename of dml/pydml script
http://git-wip-us.apache.org/repos/asf/systemml/blob/b7060832/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
b/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
index 389f661..5f9c0a2 100644
--- a/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
+++ b/src/main/java/org/apache/sysml/api/ScriptExecutorUtils.java
@@ -78,6 +78,7 @@ public class ScriptExecutorUtils {
GPUStatistics.DISPLAY_STATISTICS =
dmlconf.getBooleanValue(DMLConfig.EXTRA_GPU_STATS);
LibMatrixDNN.DISPLAY_STATISTICS =
dmlconf.getBooleanValue(DMLConfig.EXTRA_DNN_STATS);
DMLScript.FINEGRAINED_STATISTICS =
dmlconf.getBooleanValue(DMLConfig.EXTRA_FINEGRAINED_STATS);
+ DMLScript.STATISTICS_MAX_WRAP_LEN =
dmlconf.getIntValue(DMLConfig.STATS_MAX_WRAP_LEN);
Statistics.startRunTimer();
try {
http://git-wip-us.apache.org/repos/asf/systemml/blob/b7060832/src/main/java/org/apache/sysml/conf/DMLConfig.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/conf/DMLConfig.java
b/src/main/java/org/apache/sysml/conf/DMLConfig.java
index 563573c..84beea8 100644
--- a/src/main/java/org/apache/sysml/conf/DMLConfig.java
+++ b/src/main/java/org/apache/sysml/conf/DMLConfig.java
@@ -77,6 +77,7 @@ public class DMLConfig
public static final String CODEGEN_PLANCACHE = "codegen.plancache";
//boolean
public static final String CODEGEN_LITERALS = "codegen.literals";
//1..heuristic, 2..always
public static final String EXTRA_FINEGRAINED_STATS =
"systemml.stats.finegrained"; //boolean
+ public static final String STATS_MAX_WRAP_LEN =
"systemml.stats.maxWrapLength"; //int
public static final String EXTRA_GPU_STATS =
"systemml.stats.extraGPU"; //boolean
public static final String EXTRA_DNN_STATS =
"systemml.stats.extraDNN"; //boolean
public static final String AVAILABLE_GPUS =
"systemml.gpu.availableGPUs"; // String to specify which GPUs to use (a range,
all GPUs, comma separated list or a specific GPU)
@@ -122,6 +123,7 @@ public class DMLConfig
_defaultVals.put(CODEGEN_LITERALS, "1" );
_defaultVals.put(NATIVE_BLAS, "none" );
_defaultVals.put(EXTRA_FINEGRAINED_STATS,"false" );
+ _defaultVals.put(STATS_MAX_WRAP_LEN,"30" );
_defaultVals.put(EXTRA_GPU_STATS, "false" );
_defaultVals.put(EXTRA_DNN_STATS, "false" );
@@ -407,7 +409,7 @@ public class DMLConfig
YARN_APPMASTER, YARN_APPMASTERMEM,
YARN_MAPREDUCEMEM,
CP_PARALLEL_OPS, CP_PARALLEL_IO, NATIVE_BLAS,
COMPRESSED_LINALG, CODEGEN, CODEGEN_LITERALS,
CODEGEN_PLANCACHE,
- EXTRA_GPU_STATS, EXTRA_DNN_STATS,
EXTRA_FINEGRAINED_STATS,
+ EXTRA_GPU_STATS, EXTRA_DNN_STATS,
EXTRA_FINEGRAINED_STATS, STATS_MAX_WRAP_LEN,
AVAILABLE_GPUS
};
http://git-wip-us.apache.org/repos/asf/systemml/blob/b7060832/src/main/java/org/apache/sysml/utils/Statistics.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/sysml/utils/Statistics.java
b/src/main/java/org/apache/sysml/utils/Statistics.java
index 847682c..e7e8ecc 100644
--- a/src/main/java/org/apache/sysml/utils/Statistics.java
+++ b/src/main/java/org/apache/sysml/utils/Statistics.java
@@ -47,7 +47,7 @@ import org.apache.sysml.runtime.matrix.data.LibMatrixDNN;
* This class captures all statistics.
*/
public class Statistics
-{
+{
private static long compileStartTime = 0;
private static long compileEndTime = 0;
@@ -553,6 +553,7 @@ public class Statistics
maxCountLen = Math.max(maxCountLen,
String.valueOf(_cpInstCounts.get(instruction)).length());
}
+ maxInstLen = Math.min(maxInstLen,
DMLScript.STATISTICS_MAX_WRAP_LEN);
sb.append(String.format(
" %" + maxNumLen + "s %-" + maxInstLen + "s
%" + maxTimeSLen + "s %" + maxCountLen + "s", numCol,
instCol, timeSCol, countCol));
@@ -563,22 +564,38 @@ public class Statistics
sb.append("\n");
for (int i = 0; i < numHittersToDisplay; i++) {
String instruction = tmp[len - 1 - i].getKey();
+ String [] wrappedInstruction = wrap(instruction,
maxInstLen);
Long timeNs = tmp[len - 1 - i].getValue();
double timeS = (double) timeNs / 1000000000.0;
String timeSString = sFormat.format(timeS);
Long count = _cpInstCounts.get(instruction);
- sb.append(String.format(
- " %" + maxNumLen + "d %-" + maxInstLen
+ "s %" + maxTimeSLen + "s %" + maxCountLen + "d",
- (i + 1), instruction, timeSString,
count));
-
- // Add the miscellaneous timer info
+ int numLines = wrappedInstruction.length;
+ String [] miscTimers = null;
+
if (GPUStatistics.DISPLAY_STATISTICS ||
DMLScript.FINEGRAINED_STATISTICS) {
- sb.append(" ");
-
sb.append(GPUStatistics.getStringForCPMiscTimesPerInstruction(instruction));
+ miscTimers =
wrap(GPUStatistics.getStringForCPMiscTimesPerInstruction(instruction),
DMLScript.STATISTICS_MAX_WRAP_LEN);
+ numLines = Math.max(numLines,
miscTimers.length);
+ }
+
+ String miscFormatString =
(GPUStatistics.DISPLAY_STATISTICS || DMLScript.FINEGRAINED_STATISTICS) ? " %" +
DMLScript.STATISTICS_MAX_WRAP_LEN + "s" : "%s";
+ for(int wrapIter = 0; wrapIter < numLines; wrapIter++) {
+ String instStr = (wrapIter <
wrappedInstruction.length) ? wrappedInstruction[wrapIter] : "";
+ String miscTimerStr = (
(GPUStatistics.DISPLAY_STATISTICS || DMLScript.FINEGRAINED_STATISTICS) &&
wrapIter < miscTimers.length) ? miscTimers[wrapIter] : "";
+ if(wrapIter == 0) {
+ // Display instruction count
+ sb.append(String.format(
+ " %" + maxNumLen + "d
%-" + maxInstLen + "s %" + maxTimeSLen + "s %" + maxCountLen + "d" +
miscFormatString,
+ (i + 1), instStr,
timeSString, count, miscTimerStr));
+ }
+ else {
+ sb.append(String.format(
+ " %" + maxNumLen + "s
%-" + maxInstLen + "s %" + maxTimeSLen + "s %" + maxCountLen + "s" +
miscFormatString,
+ "", instStr, "", "",
miscTimerStr));
+ }
+ sb.append("\n");
}
- sb.append("\n");
}
return sb.toString();
@@ -669,6 +686,17 @@ public class Statistics
public static String display() {
return display(DMLScript.STATISTICS_COUNT);
}
+
+
+ private static String [] wrap(String str, int wrapLength) {
+ int numLines = (int) Math.ceil( ((double)str.length()) /
wrapLength);
+ int len = str.length();
+ String [] ret = new String[numLines];
+ for(int i = 0; i < numLines; i++) {
+ ret[i] = str.substring(i*wrapLength,
Math.min((i+1)*wrapLength, len));
+ }
+ return ret;
+ }
/**
* Returns statistics as a string