Skip to content

Commit 53937a5

Browse files
committed
2 parents 3ddea7b + 1ec24d9 commit 53937a5

File tree

3 files changed

+107
-24
lines changed

3 files changed

+107
-24
lines changed

javascripts/default-schedules.js

+33-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,34 @@ var default_CPU_schedules = {
1414
parameters: ["i0", "CPU Thread", "No Races"]
1515
}
1616
],
17-
add: [],
17+
spgemm: [
18+
{
19+
command: "reorder",
20+
parameters: ["i", "k", "j"]
21+
},
22+
{
23+
command: "precompute",
24+
parameters: ["B(i,k) * C(k,j)", "j", "j"]
25+
},
26+
{
27+
command: "assemble",
28+
parameters: ["A", "Insert"]
29+
},
30+
{
31+
command: "parallelize",
32+
parameters: ["i", "CPU Thread", "No Races"]
33+
}
34+
],
35+
spadd: [
36+
{
37+
command: "assemble",
38+
parameters: ["A", "Insert"]
39+
},
40+
{
41+
command: "parallelize",
42+
parameters: ["i", "CPU Thread", "No Races"]
43+
}
44+
],
1845
ttv: [
1946
{
2047
command: "fuse",
@@ -35,8 +62,8 @@ var default_CPU_schedules = {
3562
{
3663
command: "parallelize",
3764
parameters: ["chunk", "CPU Thread", "No Races"]
38-
}
39-
],
65+
}
66+
],
4067
mttkrp: [
4168
{
4269
command: "reorder",
@@ -105,7 +132,8 @@ var default_GPU_schedules = {
105132
parameters: ["thread", "GPU Thread", "Atomics"]
106133
}
107134
],
108-
add: [],
135+
spgemm: [],
136+
spadd: [],
109137
ttv: [
110138
{
111139
command: "fuse",
@@ -206,4 +234,4 @@ var default_GPU_schedules = {
206234
parameters: ["thread", "GPU Thread", "Atomics"]
207235
}
208236
],
209-
}
237+
}

javascripts/demo.js

+74-18
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,24 @@ function demo() {
133133
},
134134
resetSchedule: function() {
135135
model.schedule = [];
136+
137+
model.cancelReq();
138+
model.setOutput("", "", "", "");
136139
model.updateScheduleView();
137140
},
138141
addScheduleRow: function() {
139142
model.schedule.push({command: "", parameters: []});
143+
140144
model.updateScheduleView();
141145
},
142146
deleteScheduleRow: function(row) {
147+
var isNop = (model.schedule[row].command === "");
143148
model.schedule.splice(row, 1);
144149

145-
model.cancelReq();
146-
model.setOutput("", "", "", "");
150+
if (!isNop) {
151+
model.cancelReq();
152+
model.setOutput("", "", "", "");
153+
}
147154
model.updateScheduleView();
148155
},
149156
swapScheduleRows: function(row1, row2) {
@@ -161,12 +168,23 @@ function demo() {
161168
var parameterInfo = scheduleCommands[command][i];
162169
var defaultValue = "";
163170

164-
if (parameterInfo[0] === "default" || parameterInfo[0] === "predefined dropdown") {
171+
if (parameterInfo[0] === "default" ||
172+
parameterInfo[0] === "predefined dropdown") {
165173
defaultValue = parameterInfo[1];
174+
} else if (parameterInfo[0] === "result dropdown") {
175+
for (var access in model.input.tensorOrders) {
176+
if (model.input.tensorOrders[access] > 0
177+
&& model.input.expression.indexOf(access) <= model.input.expression.indexOf("=")) {
178+
defaultValue += access;
179+
break;
180+
}
181+
}
166182
}
167183
model.schedule[row].parameters.push(defaultValue);
168184
}
169185

186+
model.cancelReq();
187+
model.setOutput("", "", "", "");
170188
model.updateScheduleView();
171189
},
172190
addScheduleParameter: function(row, index, value) {
@@ -616,13 +634,13 @@ function demo() {
616634
2: ["default", ""],
617635
3: ["text"]
618636
},
619-
// divide: {
620-
// parameters: ["Divided IndexVar", "Outer IndexVar", "Inner IndexVar", "Divide Factor"],
621-
// 0: ["index dropdown", [1, "0"], [2, "1"]],
622-
// 1: ["default", ""],
623-
// 2: ["default", ""],
624-
// 3: ["text"]
625-
// },
637+
divide: {
638+
parameters: ["Divided IndexVar", "Outer IndexVar", "Inner IndexVar", "Divide Factor"],
639+
0: ["index dropdown", [1, "0"], [2, "1"]],
640+
1: ["default", ""],
641+
2: ["default", ""],
642+
3: ["text"]
643+
},
626644
precompute: {
627645
parameters: ["Precomputed Expr", "Original IndexVar", "Workspace IndexVar"],
628646
0: ["long text"],
@@ -653,6 +671,12 @@ function demo() {
653671
"GPU Thread", "GPU Block", "GPU Warp"],
654672
2: ["predefined dropdown", "No Races",
655673
"Ignore Races", "No Races", "Atomics", "Temporary", "Parallel Reduction"]
674+
},
675+
assemble: {
676+
parameters: ["Result Tensor", "Assembly Strategy"],
677+
0: ["result dropdown"],
678+
1: ["predefined dropdown", "Insert",
679+
"Insert", "Append"]
656680
}
657681
};
658682

@@ -734,6 +758,26 @@ function demo() {
734758
return parameter;
735759
}
736760

761+
// a dropdown where user can choose from result tensors
762+
function resultDropdown(parameterName, inputId, input) {
763+
var parameter = "";
764+
var defaultParam = "";
765+
for (var access in model.input.tensorOrders) {
766+
if (model.input.tensorOrders[access] > 0
767+
&& model.input.expression.indexOf(access) <= model.input.expression.indexOf("=")) {
768+
parameter += "<li><a>";
769+
parameter += access;
770+
parameter += "</a></li>";
771+
if (defaultParam === "") {
772+
defaultParam += access;
773+
}
774+
}
775+
}
776+
parameter = dropdown(parameterName, inputId, input, defaultParam)
777+
+ parameter + "</ul></div></li>";
778+
return parameter;
779+
}
780+
737781
// a dropdown where user can choose from a set of predefined options
738782
function predefinedDropdown(parameterName, inputId, input, options) {
739783
var parameter = dropdown(parameterName, inputId, input, options[0], false, "160px");
@@ -763,6 +807,9 @@ function demo() {
763807
case "access dropdown":
764808
parameters += accessDropdown(parameterName, inputId, input);
765809
break;
810+
case "result dropdown":
811+
parameters += resultDropdown(parameterName, inputId, input);
812+
break;
766813
case "predefined dropdown":
767814
parameters += predefinedDropdown(parameterName, inputId, input, parameterInfo.slice(1));
768815
break;
@@ -858,7 +905,7 @@ function demo() {
858905
var row = rowId.substring(("schedule").length);
859906

860907
$("#" + rowId).val(command);
861-
model.addScheduleCommand(row, command, );
908+
model.addScheduleCommand(row, command);
862909
});
863910

864911
$(".schedule-input input").on("change", function(e) {
@@ -989,7 +1036,7 @@ function demo() {
9891036
var getKernel = function() {
9901037
model.setOutput("", "", "", "");
9911038

992-
var command = model.input.expression.replace(/ /g, "");
1039+
var command = "\"" + model.input.expression.replace(/ /g, "") + "\"";
9931040

9941041
var formats = "";
9951042
for (t in model.input.tensorOrders) {
@@ -1022,7 +1069,7 @@ function demo() {
10221069
var scheduleCommand = model.schedule[i]["command"];
10231070
if (!scheduleCommand) { continue; }
10241071

1025-
command += " -s=" + scheduleCommand + "(";
1072+
command += " -s=\"" + scheduleCommand + "(";
10261073
schedule += ((schedule === "") ? "" : ";") + scheduleCommand + ":";
10271074

10281075
for (var param of model.schedule[i]["parameters"]) {
@@ -1038,7 +1085,7 @@ function demo() {
10381085
}
10391086

10401087
command = command.substring(0, command.length - 1);
1041-
command += ")";
1088+
command += ")\"";
10421089
schedule = schedule.substring(0, schedule.length - 1);
10431090
}
10441091

@@ -1086,7 +1133,15 @@ function demo() {
10861133
x: { name: "Dense array", levels: { formats: ["d"], ordering: [0] } }
10871134
}
10881135
},
1089-
add: { name: "Sparse matrix addition",
1136+
spgemm: { name: "SpGEMM",
1137+
code: "A(i,j) = B(i,k) * C(k,j)",
1138+
formats: {
1139+
A: { name: "CSR", levels: { formats: ["d", "s"], ordering: [0, 1] } },
1140+
B: { name: "CSR", levels: { formats: ["d", "s"], ordering: [0, 1] } },
1141+
C: { name: "CSR", levels: { formats: ["d", "s"], ordering: [0, 1] } },
1142+
}
1143+
},
1144+
spadd: { name: "Sparse matrix addition",
10901145
code: "A(i,j) = B(i,j) + C(i,j)",
10911146
formats: {
10921147
A: { name: "CSR", levels: { formats: ["d", "s"], ordering: [0, 1] } },
@@ -1186,9 +1241,10 @@ function demo() {
11861241
}
11871242
model.setInput(code);
11881243

1189-
var schedule = default_CPU_schedules[e];
1190-
model.setExampleSchedule((schedule.length > 0) ? e : "");
1191-
model.setSchedule(schedule);
1244+
var cpuSchedule = default_CPU_schedules[e];
1245+
var gpuSchedule = default_GPU_schedules[e];
1246+
model.setExampleSchedule((gpuSchedule.length > 0) ? e : "");
1247+
model.setSchedule(cpuSchedule);
11921248
};
11931249
$("#example_" + e).click(setExample);
11941250

0 commit comments

Comments
 (0)