XLA Implementation Status#
List of XLA(mhlo-mlir) Ops that SPU supports:
The list of mhlo ops is obtained from this file:
https://github.com/tensorflow/mlir-hlo/blob/master/include/mlir-hlo/Dialect/mhlo/IR/hlo_ops.td
General limitation with SPU:
* Dynamic shape is not supported
* Complex number is not supported
* SPU only supports fixed-point numbers, so no-finite is not supported
XLA nullary ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
fully |
Always yields a public value |
|
fully |
Always yields a public value |
|
no |
|
|
no |
Count: Total = 4, fully supported = 2
XLA unary element-wise ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
fully |
|
|
no |
|
|
fully |
|
|
fully |
|
|
no |
|
|
no |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
no |
|
|
no |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
not |
|
|
not |
|
|
not |
|
|
fully |
|
|
partial |
|
|
not |
|
|
fully |
|
|
fully |
Count: Total = 24, fully supported = 12, partial = 0
XLA binary element-wise ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
fully |
|
|
no |
|
|
no |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
partial |
rhs must be a public |
|
partial |
rhs must be a public |
|
partial |
rhs must be a public |
|
fully |
Count: Total = 14, fully supported = 9, partial = 3
XLA binary logical element-wise ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
fully |
|
|
fully |
|
|
fully |
Count: Total = 3, fully supported = 3
XLA communication ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
no |
|
|
no |
|
|
no |
|
|
no |
Count: Total = 4, fully supported = 0
XLA control flow ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
no |
|
|
partial |
condition variable must be a public scalar |
|
no |
|
|
partial |
condition region must return a public scalar |
|
no |
|
|
no |
|
|
no |
|
|
no |
|
|
fully |
inherits limitations from reduce function |
Count: Total = 9, fully supported = 1, partial = 2
XLA tuple ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
fully |
|
|
fully |
Count: Total = 2, fully supported = 2
XLA other ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
fully |
|
|
partial |
start_indices must be public values |
|
partial |
start_indices must be public values |
|
fully |
Rely on XLA’s batchnorm_expander pass |
|
fully |
Rely on XLA’s batchnorm_expander pass |
|
fully |
Rely on XLA’s batchnorm_expander pass |
|
partial |
Only supports convert to type of same size |
|
fully |
|
|
fully |
|
|
no |
|
|
fully |
Rely on CholeskyExpander pass |
|
fully |
|
|
fully |
|
|
no |
|
|
fully |
|
|
no |
|
|
no |
|
|
no |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
no |
|
|
fully |
|
|
no |
|
|
fully |
Rely on XLA’s MapInliner pass |
|
fully |
|
|
no |
|
|
no |
|
|
fully |
|
|
fully |
|
|
no |
|
|
fully |
|
|
fully |
|
|
fully |
|
|
no |
|
|
fully |
|
|
fully |
Rely on XLA’s TriangularSolverExpander pass |
|
fully |
|
|
fully |
|
|
no |
|
|
no |
Count: Total = 42, fully supported = 26, partial = 3
XLA RNG ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
partial |
Bound [a, b) must all be public scalar, result is also a public tensor |
|
no |
|
|
no |
Count: Total = 3, fully supported = 0, partial = 1
XLA quantize op#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
no |
Count: Total = 1, fully supported = 0, partial = 0
XLA miscellaneous ops#
Op Name |
supported(fully/partial/no) |
notes |
---|---|---|
|
no |
|
|
no |
Internal op to XLA/GPU |
|
no |
|
|
no |
|
|
no |
|
|
no |
|
|
no |
|
|
no |
|
|
no |
|
|
no |
Count: Total = 10, fully supported = 0, partial = 0