File size: 3,782 Bytes
10eb8e1
 
 
 
1e63f7d
 
 
10eb8e1
 
1e63f7d
61547d8
1e63f7d
61547d8
10eb8e1
 
 
1e63f7d
 
10eb8e1
 
 
61547d8
1e63f7d
 
 
 
 
 
 
 
 
 
10eb8e1
1e63f7d
10eb8e1
 
 
1e63f7d
 
 
10eb8e1
 
 
61547d8
1e63f7d
 
 
 
 
10eb8e1
1e63f7d
 
 
 
 
 
 
 
 
 
10eb8e1
1e63f7d
10eb8e1
 
 
1e63f7d
10eb8e1
 
 
 
1e63f7d
61547d8
10eb8e1
1e63f7d
 
10eb8e1
 
1e63f7d
 
 
 
 
10eb8e1
 
1e63f7d
 
 
 
 
10eb8e1
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
{
  "domain": "ai.onnx",
  "name": "IsInf",
  "sinceVersion": 20,
  "inputs": { "x": { "onnx": "X", "dtype": "T" } },
  "outputs": { "y": { "onnx": "Y", "dtype": "B", "rank": "ranks.x", "shape": "shapes.x" } },
  "attributes": { "detect_negative": { "default": 1 }, "detect_positive": { "default": 1 } },
  "attributeConstraints": { "detect_negative": { "values": [0, 1] }, "detect_positive": { "values": [0, 1] } },
  "typeConstraints": { "T": ["float32", "float16"], "B": ["bool"] },
  "tunables": { "WORKGROUP_SIZE": { "default": 256 } },
  "derive": { "scalar": "dtypes.T" },
  "when": ["numel(shapes.x) == numel(shapes.y)", "ranks.y == ranks.x"],
  "bindings": { "y": { "elementType": "u32" } },
  "variants": [
    {
      "id": "detect_neither",
      "priority": 30,
      "when": ["attrs.detect_negative == 0", "attrs.detect_positive == 0"],
      "passes": [
        {
          "id": "main",
          "name": "IsInf.DetectNeither",
          "shader": "detect-neither.wgsl.jinja",
          "bindings": [
            "y",
            { "name": "params", "struct": [{ "name": "count", "type": "u32", "value": "numel(shapes.y)" }] }
          ],
          "dispatch": {
            "x": "min(ceilDiv((ceilDiv(numel(shapes.y), 4)), (tunables.WORKGROUP_SIZE)), 65535)",
            "y": "ceilDiv(ceilDiv((ceilDiv(numel(shapes.y), 4)), (tunables.WORKGROUP_SIZE)), 65535)",
            "z": 1
          }
        }
      ]
    },
    {
      "id": "same_layout_vec4",
      "priority": 20,
      "when": ["attrs.detect_negative == 1 or attrs.detect_positive == 1", "numel(shapes.x) > 0", "numel(shapes.x) % 4 == 0", "f16Ok(dtypes.T)"],
      "derive": { "vectorScalar": "\"vec4<\" ~ dtypes.T ~ \">\"", "outVec": "\"vec4<\" ~ dtypes.B ~ \">\"" },
      "passes": [
        {
          "id": "main",
          "name": "IsInf.Vec4",
          "shader": "unary-vec4.wgsl.jinja",
          "derive": {
            "detectNegative": "attrs.detect_negative",
            "detectPositive": "attrs.detect_positive",
            "vec4PerThread": "4 if numel(shapes.y) * dtypeBytes(tensorDtypes.y) <= 16777216 else 1"
          },
          "bindings": [
            { "arg": "x", "elementType": "$vectorScalar" },
            { "arg": "y", "elementType": "$outVec" },
            { "name": "params", "struct": [{ "name": "count", "type": "u32", "value": "numel(shapes.y) / 4" }] }
          ],
          "dispatch": {
            "x": "min(ceilDiv((ceilDiv(numel(shapes.y) / 4, 4 if numel(shapes.y) * dtypeBytes(tensorDtypes.y) <= 16777216 else 1)), (tunables.WORKGROUP_SIZE)), 65535)",
            "y": "ceilDiv(ceilDiv((ceilDiv(numel(shapes.y) / 4, 4 if numel(shapes.y) * dtypeBytes(tensorDtypes.y) <= 16777216 else 1)), (tunables.WORKGROUP_SIZE)), 65535)",
            "z": 1
          }
        }
      ]
    },
    {
      "id": "elementwise",
      "when": ["f16Ok(dtypes.T)"],
      "passes": [
        {
          "id": "main",
          "name": "IsInf",
          "shader": "unary-scalar.wgsl.jinja",
          "derive": { "itemsPerInvocation": 4 },
          "bindings": [
            "x",
            "y",
            {
              "name": "params",
              "struct": [
                { "name": "count", "type": "u32", "value": "numel(shapes.y)" },
                { "name": "detectNegative", "type": "u32", "value": "attrs.detect_negative" },
                { "name": "detectPositive", "type": "u32", "value": "attrs.detect_positive" }
              ]
            }
          ],
          "dispatch": {
            "x": "min(ceilDiv((ceilDiv(numel(shapes.y), 4)), (tunables.WORKGROUP_SIZE)), 65535)",
            "y": "ceilDiv(ceilDiv((ceilDiv(numel(shapes.y), 4)), (tunables.WORKGROUP_SIZE)), 65535)",
            "z": 1
          }
        }
      ]
    }
  ]
}