Xenova's picture
Xenova HF Staff
sync 91d990483a17
9953d78 verified
Raw
History Blame
8.46 kB
{
"domain": "ai.onnx",
"name": "SplitToSequence",
"conformance": "internal-lowering",
"sinceVersion": 11,
"inputs": { "input": { "dtype": "T" }, "split": { "dtype": "S", "optional": true } },
"outputs": {
"y0": { "onnx": "Y0", "dtype": "T", "rank": "ranks.input if attrs.keepdims == 1 else ranks.input - 1" },
"y1": { "onnx": "Y1", "dtype": "T", "rank": "ranks.input if attrs.keepdims == 1 else ranks.input - 1" },
"y2": {
"onnx": "Y2",
"dtype": "T",
"rank": "ranks.input if attrs.keepdims == 1 else ranks.input - 1",
"optional": true
},
"y3": {
"onnx": "Y3",
"dtype": "T",
"rank": "ranks.input if attrs.keepdims == 1 else ranks.input - 1",
"optional": true
},
"y4": {
"onnx": "Y4",
"dtype": "T",
"rank": "ranks.input if attrs.keepdims == 1 else ranks.input - 1",
"optional": true
},
"y5": {
"onnx": "Y5",
"dtype": "T",
"rank": "ranks.input if attrs.keepdims == 1 else ranks.input - 1",
"optional": true
}
},
"attributes": { "axis": { "default": 0 }, "keepdims": { "default": 1 } },
"attributeConstraints": { "keepdims": { "values": [0, 1] } },
"typeConstraints": { "T": ["float32", "float16", "bool"], "S": ["uint32"] },
"tunables": { "WORKGROUP_SIZE": { "default": 256 } },
"derive": {
"baseContract": "ranks.input >= 1 and (attrs.axis if attrs.axis >= 0 else attrs.axis + ranks.input) >= 0 and (attrs.axis if attrs.axis >= 0 else attrs.axis + ranks.input) < ranks.input and f16Ok(dtypes.T)",
"outputRankContract": "ranks.y0 == ranks.input if present.split else (ranks.y0 == ranks.input if attrs.keepdims == 1 else ranks.y0 == ranks.input - 1)",
"twoOutputContract": "baseContract and not present.y2 and ranks.y0 == ranks.y1 and outputRankContract",
"threeOutputContract": "baseContract and present.y2 and not present.y3 and ranks.y0 == ranks.y1 and ranks.y0 == ranks.y2 and outputRankContract",
"fourOutputContract": "baseContract and present.y2 and present.y3 and not present.y4 and ranks.y0 == ranks.y1 and ranks.y0 == ranks.y2 and ranks.y0 == ranks.y3 and outputRankContract",
"sixOutputContract": "baseContract and present.y2 and present.y3 and present.y4 and present.y5 and ranks.y0 == ranks.y1 and ranks.y0 == ranks.y2 and ranks.y0 == ranks.y3 and ranks.y0 == ranks.y4 and ranks.y0 == ranks.y5 and outputRankContract"
},
"variants": [
{
"id": "two_outputs",
"when": ["twoOutputContract"],
"passes": [
{
"id": "main",
"name": "SplitToSequence2",
"shader": "split-to-sequence.wgsl.jinja",
"derive": {
"inputShape": "shapes.input",
"rank": "ranks.input",
"axisSpec": "attrs.axis if attrs.axis >= 0 else attrs.axis + ranks.input",
"squeeze": "ranks.y0 < ranks.input",
"numOutputs": "2",
"outShapes": ["shapes.y0", "shapes.y1"]
},
"bindings": [
"input",
"y0",
"y1",
{
"name": "params",
"struct": [
{ "name": "y0Count", "type": "u32", "value": "numel(shapes.y0)" },
{ "name": "y1Count", "type": "u32", "value": "numel(shapes.y1)" }
]
}
],
"dispatch": {
"x": "min(ceilDiv((max(numel(shapes.y0), numel(shapes.y1))), (tunables.WORKGROUP_SIZE)), 65535)",
"y": "ceilDiv(ceilDiv((max(numel(shapes.y0), numel(shapes.y1))), (tunables.WORKGROUP_SIZE)), 65535)",
"z": 1
}
}
]
},
{
"id": "three_outputs",
"priority": 20,
"when": ["threeOutputContract"],
"passes": [
{
"id": "main",
"name": "SplitToSequence3",
"shader": "split-to-sequence.wgsl.jinja",
"derive": {
"inputShape": "shapes.input",
"rank": "ranks.input",
"axisSpec": "attrs.axis if attrs.axis >= 0 else attrs.axis + ranks.input",
"squeeze": "ranks.y0 < ranks.input",
"numOutputs": "3",
"outShapes": ["shapes.y0", "shapes.y1", "shapes.y2"]
},
"bindings": [
"input",
"y0",
"y1",
"y2",
{
"name": "params",
"struct": [
{ "name": "y0Count", "type": "u32", "value": "numel(shapes.y0)" },
{ "name": "y1Count", "type": "u32", "value": "numel(shapes.y1)" },
{ "name": "y2Count", "type": "u32", "value": "numel(shapes.y2)" }
]
}
],
"dispatch": {
"x": "min(ceilDiv((max(max(numel(shapes.y0), numel(shapes.y1)), numel(shapes.y2))), (tunables.WORKGROUP_SIZE)), 65535)",
"y": "ceilDiv(ceilDiv((max(max(numel(shapes.y0), numel(shapes.y1)), numel(shapes.y2))), (tunables.WORKGROUP_SIZE)), 65535)",
"z": 1
}
}
]
},
{
"id": "four_outputs",
"priority": 30,
"when": ["fourOutputContract"],
"passes": [
{
"id": "main",
"name": "SplitToSequence4",
"shader": "split-to-sequence.wgsl.jinja",
"derive": {
"inputShape": "shapes.input",
"rank": "ranks.input",
"axisSpec": "attrs.axis if attrs.axis >= 0 else attrs.axis + ranks.input",
"squeeze": "ranks.y0 < ranks.input",
"numOutputs": "4",
"outShapes": ["shapes.y0", "shapes.y1", "shapes.y2", "shapes.y3"]
},
"bindings": [
"input",
"y0",
"y1",
"y2",
"y3",
{
"name": "params",
"struct": [
{ "name": "y0Count", "type": "u32", "value": "numel(shapes.y0)" },
{ "name": "y1Count", "type": "u32", "value": "numel(shapes.y1)" },
{ "name": "y2Count", "type": "u32", "value": "numel(shapes.y2)" },
{ "name": "y3Count", "type": "u32", "value": "numel(shapes.y3)" }
]
}
],
"dispatch": {
"x": "min(ceilDiv((max(max(max(numel(shapes.y0), numel(shapes.y1)), numel(shapes.y2)), numel(shapes.y3))), (tunables.WORKGROUP_SIZE)), 65535)",
"y": "ceilDiv(ceilDiv((max(max(max(numel(shapes.y0), numel(shapes.y1)), numel(shapes.y2)), numel(shapes.y3))), (tunables.WORKGROUP_SIZE)), 65535)",
"z": 1
}
}
]
},
{
"id": "six_outputs",
"priority": 40,
"when": ["sixOutputContract"],
"passes": [
{
"id": "main",
"name": "SplitToSequence6",
"shader": "split-to-sequence.wgsl.jinja",
"derive": {
"inputShape": "shapes.input",
"rank": "ranks.input",
"axisSpec": "attrs.axis if attrs.axis >= 0 else attrs.axis + ranks.input",
"squeeze": "ranks.y0 < ranks.input",
"numOutputs": "6",
"outShapes": ["shapes.y0", "shapes.y1", "shapes.y2", "shapes.y3", "shapes.y4", "shapes.y5"]
},
"bindings": [
"input",
"y0",
"y1",
"y2",
"y3",
"y4",
"y5",
{
"name": "params",
"struct": [
{ "name": "y0Count", "type": "u32", "value": "numel(shapes.y0)" },
{ "name": "y1Count", "type": "u32", "value": "numel(shapes.y1)" },
{ "name": "y2Count", "type": "u32", "value": "numel(shapes.y2)" },
{ "name": "y3Count", "type": "u32", "value": "numel(shapes.y3)" },
{ "name": "y4Count", "type": "u32", "value": "numel(shapes.y4)" },
{ "name": "y5Count", "type": "u32", "value": "numel(shapes.y5)" }
]
}
],
"dispatch": {
"x": "min(ceilDiv((max(max(max(max(max(numel(shapes.y0), numel(shapes.y1)), numel(shapes.y2)), numel(shapes.y3)), numel(shapes.y4)), numel(shapes.y5))), (tunables.WORKGROUP_SIZE)), 65535)",
"y": "ceilDiv(ceilDiv((max(max(max(max(max(numel(shapes.y0), numel(shapes.y1)), numel(shapes.y2)), numel(shapes.y3)), numel(shapes.y4)), numel(shapes.y5))), (tunables.WORKGROUP_SIZE)), 65535)",
"z": 1
}
}
]
}
]
}