@@ -113,13 +113,17 @@ function demo() {
113
113
} ;
114
114
115
115
var tblFormatsView = {
116
- cache : { } ,
116
+ levelsCache : { } ,
117
+ namesCache : { } ,
117
118
timerEvent : null ,
118
119
119
- insertCacheEntry : function ( tensor , format ) {
120
- tblFormatsView . cache [ tensor ] = format ;
120
+ insertLevelsCacheEntry : function ( tensor , level ) {
121
+ tblFormatsView . levelsCache [ tensor ] = level ;
121
122
} ,
122
- createCacheEntry : function ( listId ) {
123
+ insertNamesCacheEntry : function ( tensor , name ) {
124
+ tblFormatsView . namesCache [ tensor ] = name ;
125
+ } ,
126
+ createEntryFromId : function ( listId ) {
123
127
var dims = $ ( "#" + listId ) . sortable ( "toArray" ) ;
124
128
var formats = [ ] ;
125
129
var ordering = [ ] ;
@@ -131,7 +135,60 @@ function demo() {
131
135
132
136
return { formats : formats , ordering : ordering } ;
133
137
} ,
134
- getFormatString : function ( desc ) {
138
+ createEntryFromName : function ( name , order ) {
139
+ var rules = {
140
+ "Dense" : function ( i ) { return 'd' ; } ,
141
+ "Sparse" : function ( i ) { return 's' ; } ,
142
+ "CSR" : function ( i ) { return ( i == 0 ) ? 'd' : 's' ; } ,
143
+ "COO" : function ( i ) {
144
+ if ( i == 0 ) {
145
+ return 'u' ;
146
+ } else if ( i < order - 1 ) {
147
+ return 'c' ;
148
+ } else {
149
+ return 'q' ;
150
+ }
151
+ }
152
+ } ;
153
+ rules [ "DCSR" ] = rules [ "CSF" ] = rules [ "Sparse" ] ;
154
+
155
+ var formats = [ ] ;
156
+ var ordering = [ ] ;
157
+
158
+ var rule = rules [ name ] ;
159
+ for ( var i = 0 ; i < order ; ++ i ) {
160
+ formats . push ( rule ( i ) ) ;
161
+ ordering . push ( i ) ;
162
+ }
163
+
164
+ return { formats : formats , ordering : ordering } ;
165
+ } ,
166
+ getFormatNamesList : function ( order ) {
167
+ var names = [ "Dense" ] ;
168
+
169
+ if ( order == 1 ) {
170
+ names . push ( "Sparse" ) ;
171
+ } else if ( order == 2 ) {
172
+ names . push ( "DCSR" ) ;
173
+ names . push ( "CSR" ) ;
174
+ names . push ( "COO" ) ;
175
+ } else if ( order >= 3 ) {
176
+ names . push ( "CSF" ) ;
177
+ names . push ( "COO" ) ;
178
+ }
179
+ return names ;
180
+ } ,
181
+ getFormatName : function ( currentEntry , order ) {
182
+ var names = tblFormatsView . getFormatNamesList ( order ) ;
183
+ for ( var name of names ) {
184
+ var entry = tblFormatsView . createEntryFromName ( name , order ) ;
185
+ if ( JSON . stringify ( entry ) == JSON . stringify ( currentEntry ) ) {
186
+ return name ;
187
+ }
188
+ }
189
+ return "Custom" ;
190
+ } ,
191
+ getLevelFormatString : function ( desc ) {
135
192
switch ( desc ) {
136
193
case 'd' :
137
194
return "Dense" ;
@@ -156,18 +213,49 @@ function demo() {
156
213
var listTensorsBody = "" ;
157
214
for ( t in model . input . tensorOrders ) {
158
215
var order = model . input . tensorOrders [ t ] ;
159
- var cached = ( tblFormatsView . cache . hasOwnProperty ( t ) &&
160
- tblFormatsView . cache [ t ] . formats . length == order ) ;
216
+ var cached = ( tblFormatsView . levelsCache . hasOwnProperty ( t ) &&
217
+ tblFormatsView . levelsCache [ t ] . formats . length == order ) ;
161
218
162
219
if ( order > 0 ) {
163
220
var listId = "dims" + t ;
221
+ var formatNameId = "format" + t ;
222
+ var formatName = tblFormatsView . namesCache . hasOwnProperty ( t ) ?
223
+ tblFormatsView . namesCache [ t ] : "Dense" ;
164
224
165
225
listTensorsBody += "<tr>" ;
166
226
listTensorsBody += "<td class=\"mdl-data-table__cell--non-numeric\" " ;
167
227
listTensorsBody += "width=\"100\"><div align=\"center\" " ;
168
228
listTensorsBody += "style=\"font-size: 16px\">" ;
169
229
listTensorsBody += t ;
170
230
listTensorsBody += "</div></td>" ;
231
+
232
+ listTensorsBody += "<td class=\"mdl-data-table__cell--non-numeric\" " ;
233
+ listTensorsBody += "style=\"padding: 0px\">" ;
234
+ listTensorsBody += "<div class=\"dropdown mdl-textfield mdl-js-textfield " ;
235
+ listTensorsBody += "mdl-textfield--floating-label getmdl-select\" " ;
236
+ listTensorsBody += "style=\"width: 140px; cursor: move\">" ;
237
+ listTensorsBody += "<input class=\"mdl-textfield__input " ;
238
+ listTensorsBody += "format-input\" data-toggle=\"dropdown\" id=\"" ;
239
+ listTensorsBody += formatNameId ;
240
+ listTensorsBody += "\" type=\"text\" readonly " ;
241
+ listTensorsBody += "value=\"" ;
242
+ listTensorsBody += formatName ;
243
+ listTensorsBody += "\"/>" ;
244
+ listTensorsBody += "<label>" ;
245
+ listTensorsBody += "<i class=\"mdl-icon-toggle__label " ;
246
+ listTensorsBody += "material-icons\">keyboard_arrow_down</i>" ;
247
+ listTensorsBody += "</label>" ;
248
+ listTensorsBody += "<ul class=\"formats dropdown-menu\" for=\"" ;
249
+ listTensorsBody += formatNameId ;
250
+ listTensorsBody += "\">" ;
251
+
252
+ for ( var name of tblFormatsView . getFormatNamesList ( order ) ) {
253
+ listTensorsBody += "<li><a id=\"" ;
254
+ listTensorsBody += formatNameId + "_" + name + "\" >" ;
255
+ listTensorsBody += name + "</a></li>" ;
256
+ }
257
+ listTensorsBody += "</div></td>" ;
258
+
171
259
listTensorsBody += "<td class=\"mdl-data-table__cell--non-numeric\" " ;
172
260
listTensorsBody += "style=\"padding: 0px\">" ;
173
261
listTensorsBody += "<ul id=\"" ;
@@ -177,8 +265,8 @@ function demo() {
177
265
listTensorsBody += "style=\"width: 0px; padding: 0px\"></li>" ;
178
266
179
267
for ( var i = 0 ; i < order ; ++ i ) {
180
- var dim = cached ? tblFormatsView . cache [ t ] . ordering [ i ] : i ;
181
- var format = cached ? tblFormatsView . cache [ t ] . formats [ i ] : "d" ;
268
+ var dim = cached ? tblFormatsView . levelsCache [ t ] . ordering [ i ] : i ;
269
+ var level = cached ? tblFormatsView . levelsCache [ t ] . formats [ i ] : "d" ;
182
270
var id = "dim" + t + "_" + dim ;
183
271
var selectId = id + "_select" ;
184
272
@@ -193,9 +281,9 @@ function demo() {
193
281
listTensorsBody += selectId ;
194
282
listTensorsBody += "\" type=\"text\" readonly " ;
195
283
listTensorsBody += "value=\"" ;
196
- listTensorsBody += tblFormatsView . getFormatString ( format ) ;
284
+ listTensorsBody += tblFormatsView . getLevelFormatString ( level ) ;
197
285
listTensorsBody += "\" data-val=\"" ;
198
- listTensorsBody += format ;
286
+ listTensorsBody += level ;
199
287
listTensorsBody += "\"/>" ;
200
288
listTensorsBody += "<label>" ;
201
289
listTensorsBody += "<i class=\"mdl-icon-toggle__label " ;
@@ -236,33 +324,45 @@ function demo() {
236
324
getmdlSelect . init ( ".getmdl-select" ) ;
237
325
238
326
$ ( ".sortable" ) . sortable ( {
239
- update : function ( ev , ui ) {
240
- var listId = ui . item . parent ( ) . attr ( 'id' ) ;
241
- }
327
+ update : function ( ev , ui ) {
328
+ var listId = ui . item . parent ( ) . attr ( 'id' ) ;
329
+ var id = ui . item . context . id ;
330
+ var tensor = id . substring ( 3 , id . indexOf ( "_" ) ) ;
331
+
332
+ var entry = tblFormatsView . createEntryFromId ( listId ) ;
333
+ var name = tblFormatsView . getFormatName ( entry , model . input . tensorOrders [ tensor ] ) ;
334
+ $ ( "#format" + tensor ) . val ( name ) ;
335
+ tblFormatsView . insertNamesCacheEntry ( tensor , name ) ;
336
+ }
242
337
} ) ;
243
338
244
339
function updateCache ( selectParent , val ) {
245
340
var selectId = selectParent . attr ( 'for' ) ;
246
341
var listId = selectParent . parent ( ) . parent ( ) . parent ( ) . attr ( 'id' ) ;
247
342
var tensor = listId . replace ( "dims" , "" ) ;
248
343
249
- var format = tblFormatsView . getFormatString ( val ) ;
250
- format = format . replace ( "¬" , $ ( "<div>" ) . html ( "¬" ) . text ( ) ) ;
344
+ var level = tblFormatsView . getLevelFormatString ( val ) ;
345
+ level = level . replace ( "¬" , $ ( "<div>" ) . html ( "¬" ) . text ( ) ) ;
251
346
252
- $ ( "#" + selectId ) . val ( format ) ;
347
+ $ ( "#" + selectId ) . val ( level ) ;
253
348
$ ( "#" + selectId ) . attr ( 'data-val' , val ) ;
254
349
255
- tblFormatsView . insertCacheEntry ( tensor ,
256
- tblFormatsView . createCacheEntry ( listId ) ) ;
350
+ var tensor = listId . substring ( 4 ) ;
351
+ var entry = tblFormatsView . createEntryFromId ( listId ) ;
352
+ var name = tblFormatsView . getFormatName ( entry , model . input . tensorOrders [ tensor ] ) ;
353
+
354
+ $ ( "#format" + tensor ) . val ( name ) ;
355
+ tblFormatsView . insertNamesCacheEntry ( tensor , name ) ;
356
+ tblFormatsView . insertLevelsCacheEntry ( tensor , entry ) ;
257
357
258
358
model . cancelReq ( ) ;
259
359
model . setOutput ( "" , "" , "" , "" ) ;
260
360
}
261
361
262
362
for ( t in model . input . tensorOrders ) {
263
363
if ( model . input . tensorOrders [ t ] > 0 ) {
264
- tblFormatsView . insertCacheEntry ( t ,
265
- tblFormatsView . createCacheEntry ( "dims" + t ) ) ;
364
+ tblFormatsView . insertLevelsCacheEntry ( t ,
365
+ tblFormatsView . createEntryFromId ( "dims" + t ) ) ;
266
366
}
267
367
}
268
368
@@ -290,6 +390,23 @@ function demo() {
290
390
updateCache ( selectParent , val ) ;
291
391
} ) ;
292
392
393
+ $ ( ".formats a" ) . each ( function ( ) {
394
+ $ ( this ) . click ( function ( ) {
395
+ var formatParent = $ ( this ) . parent ( ) . parent ( ) ;
396
+ var formatId = formatParent . attr ( 'for' ) ;
397
+ $ ( "#" + formatId ) . val ( $ ( this ) . text ( ) ) ;
398
+
399
+ var id = $ ( this ) . attr ( 'id' ) ;
400
+ var tensor = id . substring ( 6 , id . indexOf ( "_" ) ) ;
401
+ var name = id . substring ( id . indexOf ( "_" ) + 1 ) ;
402
+
403
+ tblFormatsView . insertLevelsCacheEntry ( tensor ,
404
+ tblFormatsView . createEntryFromName ( name , model . input . tensorOrders [ tensor ] ) ) ;
405
+ tblFormatsView . insertNamesCacheEntry ( tensor , name ) ;
406
+ model . updateInputViews ( ) ;
407
+ } ) ;
408
+ } ) ;
409
+
293
410
$ ( "#tblFormats" ) . show ( ) ;
294
411
} else {
295
412
$ ( "#tblFormats" ) . hide ( ) ;
@@ -410,34 +527,34 @@ function demo() {
410
527
spmv : { name : "SpMV" ,
411
528
code : "y(i) = A(i,j) * x(j)" ,
412
529
formats : {
413
- y : { formats : [ "d" ] , ordering : [ 0 ] } ,
414
- A : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } ,
415
- x : { formats : [ "d" ] , ordering : [ 0 ] }
530
+ y : { name : "Dense" , levels : { formats : [ "d" ] , ordering : [ 0 ] } } ,
531
+ A : { name : "CSR" , levels : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } } ,
532
+ x : { name : "Dense" , levels : { formats : [ "d" ] , ordering : [ 0 ] } }
416
533
}
417
534
} ,
418
535
add : { name : "Sparse matrix addition" ,
419
536
code : "A(i,j) = B(i,j) + C(i,j)" ,
420
537
formats : {
421
- A : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } ,
422
- B : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } ,
423
- C : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } ,
538
+ A : { name : "CSR" , levels : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } } ,
539
+ B : { name : "CSR" , levels : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } } ,
540
+ C : { name : "CSR" , levels : { formats : [ "d" , "s" ] , ordering : [ 0 , 1 ] } } ,
424
541
}
425
542
} ,
426
543
ttv : { name : "Tensor-times-vector" ,
427
544
code : "A(i,j) = B(i,j,k) * c(k)" ,
428
545
formats : {
429
- A : { formats : [ "s" , "s" ] , ordering : [ 0 , 1 ] } ,
430
- B : { formats : [ "s" , "s" , "s" ] , ordering : [ 0 , 1 , 2 ] } ,
431
- c : { formats : [ "d" ] , ordering : [ 0 ] } ,
546
+ A : { name : "DCSR" , levels : { formats : [ "s" , "s" ] , ordering : [ 0 , 1 ] } } ,
547
+ B : { name : "CSF" , levels : { formats : [ "s" , "s" , "s" ] , ordering : [ 0 , 1 , 2 ] } } ,
548
+ c : { name : "Dense" , levels : { formats : [ "d" ] , ordering : [ 0 ] } } ,
432
549
}
433
550
} ,
434
551
mttkrp : { name : "MTTKRP" ,
435
552
code : "A(i,j) = B(i,k,l) * C(k,j) * D(l,j)" ,
436
553
formats : {
437
- A : { formats : [ "d" , "d" ] , ordering : [ 0 , 1 ] } ,
438
- B : { formats : [ "s" , "s" , "s" ] , ordering : [ 0 , 1 , 2 ] } ,
439
- C : { formats : [ "d" , "d" ] , ordering : [ 0 , 1 ] } ,
440
- D : { formats : [ "d" , "d" ] , ordering : [ 0 , 1 ] } ,
554
+ A : { name : "Dense" , levels : { formats : [ "d" , "d" ] , ordering : [ 0 , 1 ] } } ,
555
+ B : { name : "CSF" , levels : { formats : [ "s" , "s" , "s" ] , ordering : [ 0 , 1 , 2 ] } } ,
556
+ C : { name : "Dense" , levels : { formats : [ "d" , "d" ] , ordering : [ 0 , 1 ] } } ,
557
+ D : { name : "Dense" , levels : { formats : [ "d" , "d" ] , ordering : [ 0 , 1 ] } } ,
441
558
}
442
559
}
443
560
} ;
@@ -476,7 +593,8 @@ function demo() {
476
593
var setExample = function ( ) {
477
594
$ ( "#txtExpr" ) . val ( code ) ;
478
595
for ( var tensor in formats ) {
479
- tblFormatsView . insertCacheEntry ( tensor , formats [ tensor ] ) ;
596
+ tblFormatsView . insertLevelsCacheEntry ( tensor , formats [ tensor ] . levels ) ;
597
+ tblFormatsView . insertNamesCacheEntry ( tensor , formats [ tensor ] . name ) ;
480
598
}
481
599
model . setInput ( code ) ;
482
600
} ;
0 commit comments