5
5
:OpJointMatrixLoadINTEL_token: 6120
6
6
:OpJointMatrixStoreINTEL_token: 6121
7
7
:OpJointMatrixMadINTEL_token: 6122
8
+ :OpJointMatrixSUMadINTEL_token: 6128
9
+ :OpJointMatrixUSMadINTEL_token: 6129
10
+ :OpJointMatrixUUMadINTEL_token: 6130
8
11
9
12
{extension_name}
10
13
================
@@ -25,6 +28,7 @@ https://github.com/intel/llvm
25
28
- Alexey Sotkin, Intel +
26
29
- Dounia Khaldi, Intel +
27
30
- Mateusz, Belicki Intel +
31
+ - Dmitry Sidorov, Intel +
28
32
29
33
== Notice
30
34
@@ -97,6 +101,9 @@ OpTypeJointMatrixINTEL
97
101
OpJointMatrixLoadINTEL
98
102
OpJointMatrixStoreINTEL
99
103
OpJointMatrixMADINTEL
104
+ OpJointMatrixSUMADINTEL
105
+ OpJointMatrixUSMADINTEL
106
+ OpJointMatrixUUMADINTEL
100
107
101
108
----
102
109
@@ -107,10 +114,13 @@ OpJointMatrixMADINTEL
107
114
[grid="rows"]
108
115
|====
109
116
|*{capability_name}* | {capability_token}
110
- |*OpTypeJointMatrixINTEL* | {OpTypeJointMatrixINTEL_token}
111
- |*OpJointMatrixLoadINTEL* | {OpJointMatrixLoadINTEL_token}
112
- |*OpJointMatrixStoreINTEL* | {OpJointMatrixStoreINTEL_token}
113
- |*OpJointMatrixMadINTEL* | {OpJointMatrixMadINTEL_token}
117
+ |*OpTypeJointMatrixINTEL* | {OpTypeJointMatrixINTEL_token}
118
+ |*OpJointMatrixLoadINTEL* | {OpJointMatrixLoadINTEL_token}
119
+ |*OpJointMatrixStoreINTEL* | {OpJointMatrixStoreINTEL_token}
120
+ |*OpJointMatrixMadINTEL* | {OpJointMatrixMadINTEL_token}
121
+ |*OpJointMatrixSUMadINTEL* | {OpJointMatrixSUMadINTEL_token}
122
+ |*OpJointMatrixUSMadINTEL* | {OpJointMatrixUSMadINTEL_token}
123
+ |*OpJointMatrixUUMadINTEL* | {OpJointMatrixUUMadINTEL_token}
114
124
|====
115
125
116
126
== Modifications to the SPIR-V Specification, Version 1.5
@@ -290,13 +300,21 @@ multiplication: `A*B+C`. Here 'A' is a `M x K` matrix, 'B' is a `K x N`
290
300
matrix and 'C' is a `M x N` matrix. +
291
301
+
292
302
Behavior is undefined if sizes of operands do not meet the conditions above.
293
- All operands and the 'Ruslt Type' must be
303
+ All operands and the 'Result Type' must be
294
304
<<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>>. +
295
305
+
296
306
'A' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
307
+ 'Component Type' be a signed 'numerical type' or 16-bit unsigned integer type
308
+ (which stands for 'bfloat16' type) in case if 'B' is of 16-bit unsigned integer
309
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> type as well and 'C' is of
310
+ 'float' <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> type.
297
311
'Rown Count' equals to 'M' and 'Column Count' equals to 'K' +
298
312
+
299
313
'B' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
314
+ 'Component Type' be a signed 'numerical type' or 16-bit unsigned integer type
315
+ (which stands for 'bfloat16' type) in case if 'A' is of 16-bit unsigned integer
316
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> type as well and 'C' is of
317
+ 'float' <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> type.
300
318
'Rown Count' equals to 'K' and 'Column Count' equals to 'N' +
301
319
+
302
320
'C' and 'Result Type' must be a
@@ -322,6 +340,135 @@ result of a constant instruction with scalar 'integer type'. +
322
340
'Scope'
323
341
|=====
324
342
343
+ [cols="1,1,6*3",width="100%"]
344
+ |=====
345
+ 7+|[[OpJointMatrixSUMadINTEL]]*OpJointMatrixSUMadINTEL* +
346
+ +
347
+ Multiply matrix 'A' by matrix 'B' and add matrix 'C' to the result of the
348
+ multiplication: `A*B+C`. Here 'A' is a `M x K` matrix, 'B' is a `K x N`
349
+ matrix and 'C' is a `M x N` matrix. +
350
+ +
351
+ Behavior is undefined if sizes of operands do not meet the conditions above.
352
+ All operands and the 'Result Type' must be
353
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>>. +
354
+ +
355
+ 'A' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
356
+ 'Component Type' be a signed 'numerical type', 'Rown Count' equals to 'M' and
357
+ 'Column Count' equals to 'K' +
358
+ +
359
+ 'B' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
360
+ 'Component Type' be an unsigned 'numerical type', 'Rown Count' equals to 'K' and
361
+ 'Column Count' equals to 'N' +
362
+ +
363
+ 'C' and 'Result Type' must be a
364
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with 'Rown Count' equals to
365
+ 'M' and 'Column Count' equals to 'N' +
366
+ +
367
+ 'Scope' is syncronization scope for operation on the matrix. It must be the
368
+ result of a constant instruction with scalar 'integer type'. +
369
+
370
+ 1+|Capability: +
371
+ *{capability_name}*
372
+ 1+| 7 | {OpJointMatrixSUMadINTEL_token}
373
+ | '<id>' +
374
+ 'Result Type'
375
+ |'Result <id>'
376
+ | '<id>' +
377
+ 'A'
378
+ | '<id>' +
379
+ 'B'
380
+ | '<id>' +
381
+ 'C'
382
+ | '<id>' +
383
+ 'Scope'
384
+ |=====
385
+
386
+ [cols="1,1,6*3",width="100%"]
387
+ |=====
388
+ 7+|[[OpJointMatrixUSMadINTEL]]*OpJointMatrixUSMadINTEL* +
389
+ +
390
+ Multiply matrix 'A' by matrix 'B' and add matrix 'C' to the result of the
391
+ multiplication: `A*B+C`. Here 'A' is a `M x K` matrix, 'B' is a `K x N`
392
+ matrix and 'C' is a `M x N` matrix. +
393
+ +
394
+ Behavior is undefined if sizes of operands do not meet the conditions above.
395
+ All operands and the 'Result Type' must be
396
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>>. +
397
+ +
398
+ 'A' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
399
+ 'Component Type' be an unsigned 'numerical type', 'Rown Count' equals to 'M' and
400
+ 'Column Count' equals to 'K' +
401
+ +
402
+ 'B' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
403
+ 'Component Type' be a signed 'numerical type', 'Rown Count' equals to 'K' and
404
+ 'Column Count' equals to 'N' +
405
+ +
406
+ 'C' and 'Result Type' must be a
407
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with 'Rown Count' equals to
408
+ 'M' and 'Column Count' equals to 'N' +
409
+ +
410
+ 'Scope' is syncronization scope for operation on the matrix. It must be the
411
+ result of a constant instruction with scalar 'integer type'. +
412
+
413
+ 1+|Capability: +
414
+ *{capability_name}*
415
+ 1+| 7 | {OpJointMatrixUSMadINTEL_token}
416
+ | '<id>' +
417
+ 'Result Type'
418
+ |'Result <id>'
419
+ | '<id>' +
420
+ 'A'
421
+ | '<id>' +
422
+ 'B'
423
+ | '<id>' +
424
+ 'C'
425
+ | '<id>' +
426
+ 'Scope'
427
+ |=====
428
+
429
+ [cols="1,1,6*3",width="100%"]
430
+ |=====
431
+ 7+|[[OpJointMatrixUUMadINTEL]]*OpJointMatrixUUMadINTEL* +
432
+ +
433
+ Multiply matrix 'A' by matrix 'B' and add matrix 'C' to the result of the
434
+ multiplication: `A*B+C`. Here 'A' is a `M x K` matrix, 'B' is a `K x N`
435
+ matrix and 'C' is a `M x N` matrix. +
436
+ +
437
+ Behavior is undefined if sizes of operands do not meet the conditions above.
438
+ All operands and the 'Result Type' must be
439
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>>. +
440
+ +
441
+ 'A' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
442
+ 'Component Type' be an unsigned 'numerical type', 'Rown Count' equals to 'M' and
443
+ 'Column Count' equals to 'K' +
444
+ +
445
+ 'B' must be a <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with
446
+ 'Component Type' be an unsigned 'numerical type', 'Rown Count' equals to 'K' and
447
+ 'Column Count' equals to 'N' +
448
+ +
449
+ 'C' and 'Result Type' must be a
450
+ <<OpTypeJointMatrixINTEL,*OpTypeJointMatrixINTEL*>> with 'Rown Count' equals to
451
+ 'M' and 'Column Count' equals to 'N' +
452
+ +
453
+ 'Scope' is syncronization scope for operation on the matrix. It must be the
454
+ result of a constant instruction with scalar 'integer type'. +
455
+
456
+ 1+|Capability: +
457
+ *{capability_name}*
458
+ 1+| 7 | {OpJointMatrixUUMadINTEL_token}
459
+ | '<id>' +
460
+ 'Result Type'
461
+ |'Result <id>'
462
+ | '<id>' +
463
+ 'A'
464
+ | '<id>' +
465
+ 'B'
466
+ | '<id>' +
467
+ 'C'
468
+ | '<id>' +
469
+ 'Scope'
470
+ |=====
471
+
325
472
=== Issues
326
473
327
474
None
@@ -335,4 +482,5 @@ Revision History
335
482
|========================================
336
483
|Rev|Date|Author|Changes
337
484
|1|2021-02-16|Alexey Sotkin|Initial revision
485
+ |1|2021-09-06|Dmitry Sidorov|Split OpJointMatrixMadINTEL instruction into 4
338
486
|========================================
0 commit comments