jukefa-ukrgen 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. jukefa_ukrgen-0.2.0.dist-info/METADATA +177 -0
  2. jukefa_ukrgen-0.2.0.dist-info/RECORD +133 -0
  3. jukefa_ukrgen-0.2.0.dist-info/WHEEL +4 -0
  4. jukefa_ukrgen-0.2.0.dist-info/entry_points.txt +3 -0
  5. jukefa_ukrgen-0.2.0.dist-info/licenses/LICENSE-GPL-3.0 +674 -0
  6. jukefa_ukrgen-0.2.0.dist-info/licenses/LICENSE-MIT +21 -0
  7. ukrgen/__init__.py +6 -0
  8. ukrgen/clitools/blisgen.py +117 -0
  9. ukrgen/clitools/internal/compose_mm.py +137 -0
  10. ukrgen/clitools/internal/ukr.py +13 -0
  11. ukrgen/clitools/ukrgen.py +200 -0
  12. ukrgen/codegen/isa_compiler_support.py +10 -0
  13. ukrgen/components/__init__.py +8 -0
  14. ukrgen/components/operation.py +222 -0
  15. ukrgen/components/tile.py +372 -0
  16. ukrgen/compute/__init__.py +6 -0
  17. ukrgen/compute/trsm/__init__.py +7 -0
  18. ukrgen/compute/trsm/trsm_mxn_register_sequence_generator.py +296 -0
  19. ukrgen/emitters/allocation.py +160 -0
  20. ukrgen/emitters/asmops.py +174 -0
  21. ukrgen/emitters/signature.py +2535 -0
  22. ukrgen/flow/hooks.py +107 -0
  23. ukrgen/flow/isa_map.py +45 -0
  24. ukrgen/flow/presets/__init__.py +133 -0
  25. ukrgen/flow/presets/gemm_fma_bc.yaml +31 -0
  26. ukrgen/flow/presets/gemm_fma_bc_blocks.yaml +33 -0
  27. ukrgen/flow/presets/gemm_fma_bc_lanes.yaml +34 -0
  28. ukrgen/flow/presets/gemm_fma_bc_vindex.yaml +31 -0
  29. ukrgen/flow/presets/gemm_fma_blocklane_vindex.yaml +34 -0
  30. ukrgen/flow/presets/gemm_fma_lane.yaml +34 -0
  31. ukrgen/flow/presets/gemm_fma_vf.yaml +31 -0
  32. ukrgen/flow/presets/gemm_fopa_bc_vindex.yaml +27 -0
  33. ukrgen/flow/presets/packm_bc.yaml +29 -0
  34. ukrgen/flow/presets/packm_vf.yaml +23 -0
  35. ukrgen/flow/presets/packm_za.yaml +10 -0
  36. ukrgen/flow/stage_engine.py +86 -0
  37. ukrgen/flow/stage_param.py +17 -0
  38. ukrgen/flow/stages/__init__.py +0 -0
  39. ukrgen/flow/stages/addresses.py +42 -0
  40. ukrgen/flow/stages/composition.py +62 -0
  41. ukrgen/flow/stages/datatype.py +69 -0
  42. ukrgen/flow/stages/dimension.py +95 -0
  43. ukrgen/flow/stages/emit.py +77 -0
  44. ukrgen/flow/stages/irmods.py +166 -0
  45. ukrgen/flow/stages/isa_specialize.py +141 -0
  46. ukrgen/flow/stages/isaparam.py +51 -0
  47. ukrgen/flow/stages/layout.py +123 -0
  48. ukrgen/flow/stages/loops.py +139 -0
  49. ukrgen/flow/stages/model.py +263 -0
  50. ukrgen/flow/stages/scheduling.py +237 -0
  51. ukrgen/flow/stages/setup.py +75 -0
  52. ukrgen/flow/stages/solve.py +766 -0
  53. ukrgen/flow/stages/stage.py +57 -0
  54. ukrgen/flow/stages/sto.py +353 -0
  55. ukrgen/flow/stages/ukr/__init__.py +10 -0
  56. ukrgen/flow/stages/ukr/gemm.py +106 -0
  57. ukrgen/flow/stages/ukr/mm.py +50 -0
  58. ukrgen/flow/stages/ukr/pack.py +60 -0
  59. ukrgen/flow/stages/ukr/storage.py +180 -0
  60. ukrgen/flow/stages/ukr/ukr.py +651 -0
  61. ukrgen/flow/stages/unvec.py +64 -0
  62. ukrgen/flow/ukr_context.py +82 -0
  63. ukrgen/generators/__init__.py +6 -0
  64. ukrgen/generators/tiling.py +159 -0
  65. ukrgen/injectors/blis/cgen.py +715 -0
  66. ukrgen/injectors/blis/families.py +870 -0
  67. ukrgen/injectors/blis/generate.py +137 -0
  68. ukrgen/injectors/blis/patch.py +119 -0
  69. ukrgen/injectors/blis/patches/pr960-dynamic-blocksizes.diff +122 -0
  70. ukrgen/injectors/blis/templates.py +250 -0
  71. ukrgen/iremu/lsc/strided_ldst.py +14 -0
  72. ukrgen/iremu/sme/scale_tile.py +22 -0
  73. ukrgen/iremu/sme/store_tile.py +34 -0
  74. ukrgen/iremu/sme/tma_tile.py +23 -0
  75. ukrgen/irmod/__init__.py +3 -0
  76. ukrgen/irmod/lsc/__init__.py +39 -0
  77. ukrgen/irmod/lsc/addrmerge.py +113 -0
  78. ukrgen/irmod/lsc/base.py +123 -0
  79. ukrgen/irmod/lsc/cluster.py +53 -0
  80. ukrgen/irmod/lsc/combine_load_transform.py +20 -0
  81. ukrgen/irmod/lsc/copyprop.py +209 -0
  82. ukrgen/irmod/lsc/hoist.py +77 -0
  83. ukrgen/irmod/lsc/lanefuse.py +101 -0
  84. ukrgen/irmod/lsc/ldinc.py +220 -0
  85. ukrgen/irmod/lsc/shufflenet.py +129 -0
  86. ukrgen/irmod/lsc/slices.py +339 -0
  87. ukrgen/irmod/lsc/structfuse.py +225 -0
  88. ukrgen/irmod/lsc/tailmask.py +217 -0
  89. ukrgen/irmod/lsc/unroll.py +199 -0
  90. ukrgen/irmod/lsc/vectorize.py +107 -0
  91. ukrgen/irmod/lsc/widen.py +239 -0
  92. ukrgen/logging.py +24 -0
  93. ukrgen/lsc_model/__init__.py +3 -0
  94. ukrgen/lsc_model/addressing.py +317 -0
  95. ukrgen/lsc_model/builder.py +1547 -0
  96. ukrgen/lsc_model/ir.py +222 -0
  97. ukrgen/lsc_model/state.py +142 -0
  98. ukrgen/matching/__init__.py +3 -0
  99. ukrgen/matching/math.py +1069 -0
  100. ukrgen/models/__init__.py +7 -0
  101. ukrgen/models/addr/reg_selectors.py +274 -0
  102. ukrgen/models/addr_resolver.md +86 -0
  103. ukrgen/models/addr_resolver.py +236 -0
  104. ukrgen/models/load_store_operations.py +593 -0
  105. ukrgen/models/lsc/index.py +49 -0
  106. ukrgen/models/lsc/offset.py +365 -0
  107. ukrgen/models/lsc/reg.py +61 -0
  108. ukrgen/models/offset_mapper.py +187 -0
  109. ukrgen/models/tile_offset_mapper.py +44 -0
  110. ukrgen/schedulers/__init__.py +7 -0
  111. ukrgen/schedulers/dependency.py +57 -0
  112. ukrgen/schedulers/distance.py +227 -0
  113. ukrgen/schedulers/issue.py +133 -0
  114. ukrgen/schedulers/list_scheduler.py +597 -0
  115. ukrgen/schedulers/reg_compare.py +46 -0
  116. ukrgen/schedulers/simple_dependency_scheduler.py +239 -0
  117. ukrgen/sequence_generator.py +39 -0
  118. ukrgen/specializers/__init__.py +6 -0
  119. ukrgen/specializers/addresses.py +492 -0
  120. ukrgen/specializers/signature.py +1106 -0
  121. ukrgen/support/__init__.py +0 -0
  122. ukrgen/support/data_move.py +618 -0
  123. ukrgen/support/dm_resolutions/__init__.py +0 -0
  124. ukrgen/support/dm_resolutions/direct.py +132 -0
  125. ukrgen/support/dm_resolutions/scalar_reduce.py +235 -0
  126. ukrgen/support/dm_resolutions/strided.py +144 -0
  127. ukrgen/support/dm_solver.py +598 -0
  128. ukrgen/support/domains.py +18 -0
  129. ukrgen/support/encoding.py +274 -0
  130. ukrgen/support/op.py +422 -0
  131. ukrgen/support/sig_group.py +250 -0
  132. ukrgen/support/tiles.py +243 -0
  133. ukrgen/support/transpose.py +129 -0
@@ -0,0 +1,177 @@
1
+ Metadata-Version: 2.5
2
+ Name: jukefa-ukrgen
3
+ Version: 0.2.0
4
+ Summary: A microkernel generator
5
+ Author-email: linedot <linedot@linedot.org>
6
+ License-File: LICENSE-GPL-3.0
7
+ License-File: LICENSE-MIT
8
+ Classifier: Operating System :: OS Independent
9
+ Classifier: Programming Language :: Python :: 3
10
+ Requires-Python: >=3.12
11
+ Requires-Dist: gitpython
12
+ Requires-Dist: jukefa-asmgen>=0.6.0
13
+ Requires-Dist: mako
14
+ Requires-Dist: pyyaml
15
+ Description-Content-Type: text/markdown
16
+
17
+ # ukrgen - compute kernel generators based on asmgen
18
+
19
+ ukrgen generates BLAS microkernels - `{s,d}gemm` and `{s,d}packm` - for
20
+ AVX2, AVX-512, NEON, SVE, SME (and SME with SVE, the microtile split between
21
+ them) and RVV, from tile operations and a few parameters, and schedules
22
+ them. `blisgen` builds a complete BLIS configuration from families of such
23
+ kernels, the microkernel chosen at run time; `ukrgen` generates a single
24
+ kernel, to inspect its code or debug the generator.
25
+
26
+ ## Installation
27
+
28
+ ```
29
+ git clone https://github.com/FZJ-JSC/jukefa-ukrgen
30
+ cd jukefa-ukrgen
31
+ pip install . "asmgen @ git+https://github.com/FZJ-JSC/jukefa-asmgen"
32
+ ```
33
+
34
+ Python 3.10 or newer, asmgen 0.6 or newer. Cross-compilers and qemu are
35
+ needed only to build and test kernels for another ISA.
36
+
37
+ ## blisgen
38
+
39
+ Generates a BLIS configuration from kernel families: one YAML file per data
40
+ type and kernel type. `ukrconfig/<isa>/<config>/` has configurations for
41
+ every ISA - [docs/UKRCONFIG.md](docs/UKRCONFIG.md) lists them and describes
42
+ their keys and tuning.
43
+
44
+ ```bash
45
+ # patch a BLIS tree with SVE kernels
46
+ blisgen --sgemm-config ukrconfig/sve/fma_bc_vindex/sgemm.yaml \
47
+ --dgemm-config ukrconfig/sve/fma_bc_vindex/dgemm.yaml \
48
+ --spackm-config ukrconfig/sve/fma_bc_vindex/spackm.yaml \
49
+ --dpackm-config ukrconfig/sve/fma_bc_vindex/dpackm.yaml \
50
+ --from-dir /path/to/blis --out-dir /path/to/blis-ukrgen-sve \
51
+ --author "Your Name"
52
+
53
+ # configure and build it (here cross-compiling on an x86 machine)
54
+ cd /path/to/blis-ukrgen-sve
55
+ CC=aarch64-linux-gnu-gcc ./configure -t none ukrgen_sve
56
+ make -j$(nproc) && make testsuite-bin
57
+
58
+ # run BLIS's testsuite under qemu
59
+ cd testsuite
60
+ qemu-aarch64 -cpu max,sve512=on -L /usr/aarch64-linux-gnu ../test_libblis.x
61
+ ```
62
+
63
+ `--from-git` clones BLIS from github.com/flame/blis instead of
64
+ `--from-dir`; with neither, blisgen writes the configuration's files alone.
65
+ `--config-name` names the configuration (default `ukrgen_<isa>`), `-j`
66
+ builds that many kernels at once. Every size of a family the registers hold
67
+ is built, and `BLIS_MR_D`, `BLIS_NR_D` (`_S` for singles) choose among them
68
+ at run time - see [docs/UKRCONFIG.md](docs/UKRCONFIG.md#at-run-time).
69
+
70
+ ## ukrgen
71
+
72
+ Generates one kernel from the command line. Its options come in stages,
73
+ each appearing once the ones before it are given:
74
+ `ukrgen --isa rvv --rvv-LMUL 1 --ukr gemm --help` lists what follows.
75
+ Without `--print-asm` ukrgen prints the tile operation chosen for each of
76
+ the kernel's steps; `--print-stos`, `--print-ir` and `--print-schedule` show
77
+ the stages' work, `--list-tileop-candidates` every tile operation a step
78
+ could take, and `--<step>-tileop` overrides a preset's choice.
79
+
80
+ ### Example: a gemm kernel
81
+
82
+ - RVV, LMUL 1, FP32 (sgemm)
83
+ - vector-scalar FMA, `vfmacc.vf`: the `gemm_fma_vf` preset, vectors along m
84
+ - 2 vectors by 12 columns, k unrolled 8 times
85
+ - A and B packed (`k:p`), C column-major at a column stride (`n:s`)
86
+ - two address registers each for A and B, taken in turn
87
+ - 13 instructions between a vector register's dependent uses, 3 between
88
+ an address bump and the accesses using it
89
+
90
+ ```
91
+ $ ukrgen --isa rvv --rvv-LMUL 1 --ukr gemm \
92
+ --A-data-type FP32 --B-data-type FP32 --AB-data-type FP32 --C-data-type FP32 \
93
+ --A-layout m:c k:p --B-layout n:c k:p --C-layout m:c n:s \
94
+ --tileop-preset gemm_fma_vf --tileop-vectorize m \
95
+ --m 2 --n 12 --k 8 \
96
+ --A-addr-regs 2 --B-addr-regs 2 --A-addr-pattern rotate --B-addr-pattern rotate \
97
+ --distances "RAW:data::::13" "WAW:data::::13" "WAR:data::::13" "RAW:address:greg:::3" \
98
+ --print-asm
99
+ // bases: A in a1, B in a2, C in a3, alpha in a4, beta in a5
100
+ vsetvli t0, zero, e32, m1, ta, ma
101
+ [...]
102
+ // block mm, loop over k
103
+ // init
104
+ vmv.v.i v1,0
105
+ [...]
106
+ // body
107
+ vfmacc.vf v1,f0,v25
108
+ vfmacc.vf v2,f1,v25
109
+ vfmacc.vf v3,f2,v25
110
+ [...]
111
+ // case beta==0 and alpha==1
112
+ // block store_ab
113
+ [...]
114
+ ```
115
+
116
+ Without `--print-asm`, the tile operations the preset chose:
117
+
118
+ ```
119
+ --mm-tileop "fma[bdreg:VF](A.VEC:direct, B.FP:use_scalar, AB.VEC){i=m, n=1, k*=1}"
120
+ --store_ab-tileop "AB.VEC:direct"
121
+ --alphamul-tileop "mul[bdreg:VF](AB.VEC, alpha.FP:use_scalar, C.VEC){i=m, n=1}"
122
+ [...]
123
+ ```
124
+
125
+ ### Example: a packm kernel
126
+
127
+ - RVV, LMUL 1, FP64 (dpackm)
128
+ - vectors along cdim: the `packm_vf` preset - a plain copy for kappa 1,
129
+ `vfmul.vf` by kappa otherwise
130
+ - 2 vectors a column (cdim 2 x VL), 4 columns an iteration
131
+ - A (`X`) and the packed panel (`Y`) column-major at a column stride
132
+
133
+ ```
134
+ $ ukrgen --isa rvv --rvv-LMUL 1 --ukr pack \
135
+ --X-data-type FP64 --Y-data-type FP64 \
136
+ --X-layout m:c n:s --Y-layout m:c n:s \
137
+ --tileop-preset packm_vf --tileop-vectorize m \
138
+ --m 2 --n 4 --print-asm
139
+ // bases: X in a1, Y in a2, kappa in a3
140
+ vsetvli t0, zero, e64, m1, ta, ma
141
+ [...]
142
+ // case kappa==1
143
+ // block copy+store, loop over n
144
+ // prologue
145
+ [...]
146
+ vle64.v v1, (a1)
147
+ [...]
148
+ vse64.v v1, (a2)
149
+ [...]
150
+ // case otherwise
151
+ // block pack+store, loop over n
152
+ // init
153
+ fld f0, 0(a3)
154
+ [...]
155
+ vfmul.vf v3,v2,f0
156
+ [...]
157
+ ```
158
+
159
+ ## Documentation
160
+
161
+ - [docs/UKRCONFIG.md](docs/UKRCONFIG.md): the example configurations,
162
+ building BLIS with them, choosing kernels at run time, tuning
163
+ - [docs/GENERATOR.md](docs/GENERATOR.md): the generator's systems
164
+ - [docs/SCHEDULING.md](docs/SCHEDULING.md): scheduling
165
+ - [docs/BLISGEN_PLAN.md](docs/BLISGEN_PLAN.md),
166
+ [docs/PACKING_PLAN.md](docs/PACKING_PLAN.md): plans and progress
167
+
168
+
169
+ # License
170
+
171
+ ukrgen is distributed under the terms of both the MIT license and the GNU General Public License v3.0. Users may choose either license, at their option.
172
+
173
+ All new contributions must be made under both the MIT and GNU General Public License v3.0.
174
+
175
+ See LICENSE-GPL-3.0, LICENSE-MIT for details.
176
+
177
+ SPDX-License-Identifier: MIT OR GPL-3.0-or-later
@@ -0,0 +1,133 @@
1
+ ukrgen/__init__.py,sha256=DJphCo52IfF1WlxjAPfI6ArRrRxlTNF06NLscg6iG2Q,329
2
+ ukrgen/logging.py,sha256=t-ioHNwrUYn6tmNpByPv0ktPT_I9rKtE4nNS7n2ABAs,1052
3
+ ukrgen/sequence_generator.py,sha256=fd5c8hCdu56oQ6AEsTZVAoA0zcbvnH3HovUHdjT3VK4,1641
4
+ ukrgen/clitools/blisgen.py,sha256=stO-derKT0sjkEssLBTCF95gZe6Z00bxSUtKUC02mi0,6293
5
+ ukrgen/clitools/ukrgen.py,sha256=e9DzuatOOFNFmv_qxXtKf7LpmPU-4lCZ20ldmb1Z8sQ,7251
6
+ ukrgen/clitools/internal/compose_mm.py,sha256=d_BF--C5xlShipSn5hgQOUs0gXUJHn4DrQPQBw3sxLM,4284
7
+ ukrgen/clitools/internal/ukr.py,sha256=8sSHSxFKtCa8tfR-4nFVddgeI-kcXkS0miWINQhj-5c,534
8
+ ukrgen/codegen/isa_compiler_support.py,sha256=7vZUXaLQGkulu8C09_OLhcH-bchicVPaCmdCelsdjk8,285
9
+ ukrgen/components/__init__.py,sha256=ui4o8-fqL-y6SiYvBMrzWlLEXRUMpP3UlMkurODLYF4,374
10
+ ukrgen/components/operation.py,sha256=1yVFqgKA9tNUCjcgY-4CbQlBXXQB7eD6ssTbpBrjyEU,10174
11
+ ukrgen/components/tile.py,sha256=Z4ulwLaFQpvOVTbZQiwDFgsmSd_imTC6Jeqe8VZ43Og,13679
12
+ ukrgen/compute/__init__.py,sha256=DJphCo52IfF1WlxjAPfI6ArRrRxlTNF06NLscg6iG2Q,329
13
+ ukrgen/compute/trsm/__init__.py,sha256=qWcUuRJ_g13qXDI3uQjM6eQWjua5oLVS0DExHwk9gzQ,381
14
+ ukrgen/compute/trsm/trsm_mxn_register_sequence_generator.py,sha256=lJqDS5dW4Gj3Psfky9nXqF9LZfwOJE6zsT85RqXpTSQ,10551
15
+ ukrgen/emitters/allocation.py,sha256=w_TTJy4lCn6DhskEJIsY49vTzlN5YeQ01QcM8iSDhyc,7950
16
+ ukrgen/emitters/asmops.py,sha256=oUYl9DKLfF979Su_WdXhezk0acHbjKW-iUmQ0RiKnvc,7616
17
+ ukrgen/emitters/signature.py,sha256=HJ3cx74mE5BUX-dUs9BBg1kaKiNnVmiNUoJ-ESQfgDU,127100
18
+ ukrgen/flow/hooks.py,sha256=949gMCULndJCH8Qmr3N5x8MQZmh17KpxtNWaezItwcY,3664
19
+ ukrgen/flow/isa_map.py,sha256=WYUCgJYqyzwi2LfQb15Gni2BiV-wmZccPSYDZT4DpAQ,1069
20
+ ukrgen/flow/stage_engine.py,sha256=Yk0Pkuzpx1IrCzpi6TrKfbKPnJDSsLMoOs3bxcfVv6U,2904
21
+ ukrgen/flow/stage_param.py,sha256=k8ITkQmWCQ68MetoLOU1jCQpjwgADE43LPWgLVNd-EQ,505
22
+ ukrgen/flow/ukr_context.py,sha256=IA9_4TSLMVJp5-g93Q9TgGruSumZFX2OHzgnAXi4WvY,4135
23
+ ukrgen/flow/presets/__init__.py,sha256=U7NUUhC2Zp5Gu65GCO34nYXV593zslCL02bDPy82VO8,6188
24
+ ukrgen/flow/presets/gemm_fma_bc.yaml,sha256=PN-5_fr7hVxs5yo-BbupEtxTLGdEQVpnbViNYB1kkM0,972
25
+ ukrgen/flow/presets/gemm_fma_bc_blocks.yaml,sha256=fU8s7bHK-MLpUOpvkQZjaKgG4F8PYr0gvvQYQqJLAlA,899
26
+ ukrgen/flow/presets/gemm_fma_bc_lanes.yaml,sha256=jL1JRAwW0VC_k_eXrXYtjuMSXlXffJapIxgedvSFTqc,850
27
+ ukrgen/flow/presets/gemm_fma_bc_vindex.yaml,sha256=Q11aeQrxzzrULTgYo6MY5-BXs3T_gYwFY0Y884abvck,788
28
+ ukrgen/flow/presets/gemm_fma_blocklane_vindex.yaml,sha256=FSl-YMYT4tAoSFqGiHE8JkYQkjh0vTxdn9HJGIsIdG0,1019
29
+ ukrgen/flow/presets/gemm_fma_lane.yaml,sha256=CZc9GtINc2TFamr6es5wZ232GUF5vasPDOXV44lR0UE,993
30
+ ukrgen/flow/presets/gemm_fma_vf.yaml,sha256=tQriskh_xMNuX4MWpKFw54njt6E3RRnFVibzc8mCzy0,1036
31
+ ukrgen/flow/presets/gemm_fopa_bc_vindex.yaml,sha256=imV0aW3jaMyLl-EpPzzE197ZOEMmTPdMI5e1VUrny8M,1371
32
+ ukrgen/flow/presets/packm_bc.yaml,sha256=H4YOOs4zRBtTRv1Q2hOv81OBcmlaTUV4KZa3mWyhvuE,859
33
+ ukrgen/flow/presets/packm_vf.yaml,sha256=0Umtj-9kFuiTYbPiIfhOWG4xrjdqvZ_n4OO94B5rJR4,618
34
+ ukrgen/flow/presets/packm_za.yaml,sha256=KojLC0NDL5BnlE5XcTQmZo6TbkG6-liJi9SF6Q-tprQ,469
35
+ ukrgen/flow/stages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ ukrgen/flow/stages/addresses.py,sha256=_C0yvcnE3wAhpTGcUcDt1AbKImGj-9kWUdUUDz8klYw,1609
37
+ ukrgen/flow/stages/composition.py,sha256=Ktha-tgdemxKjwKeZcUXYjZ578AUUVljWXttm1w4F8U,1589
38
+ ukrgen/flow/stages/datatype.py,sha256=0j5e01EYP8aNDC5oXKzDVZBmJaK6ai86Hei1rmjkHqQ,2194
39
+ ukrgen/flow/stages/dimension.py,sha256=7XuU48_XgseeWN-dBA349W6AEIvAplShTXdz1PndJqs,4421
40
+ ukrgen/flow/stages/emit.py,sha256=18_rZapDlZg2RE71XyI-5CeTVfIBTSuuM6AFkVGpIFM,3750
41
+ ukrgen/flow/stages/irmods.py,sha256=IXGZutm9QHz63OgKJ-BdjxeD35Z8Ofy8IJhGaUzVKEs,7468
42
+ ukrgen/flow/stages/isa_specialize.py,sha256=xahW4hWDNyROKc9fYfBNl1ZBUdXxc9o_7ZyWZMFL8BI,7364
43
+ ukrgen/flow/stages/isaparam.py,sha256=cdESuzMv15P4HqtL7xsThpeEj-p9kTod6uMts27Fwcs,1846
44
+ ukrgen/flow/stages/layout.py,sha256=sLrOObj3uSKwxizcv0TgPoJvHbOJ50oGiQTOcW45_SQ,5822
45
+ ukrgen/flow/stages/loops.py,sha256=k1cwCTrhVa-1CXzZZj_TCzXrEgMVwQgF7fOrZENyC10,6366
46
+ ukrgen/flow/stages/model.py,sha256=smzcLPeXEb1qOnIBNe6CYZ1f5SWy4TcVl3Rd3wrfV00,14707
47
+ ukrgen/flow/stages/scheduling.py,sha256=PPy-0mPJeBuMbQDvqDSJjvHQ8am7F7-m1Djdo8AtquQ,12384
48
+ ukrgen/flow/stages/setup.py,sha256=06AerJLj5AG29BDYlZgW8UVosKhQ-ALTLymfvaLETjQ,3305
49
+ ukrgen/flow/stages/solve.py,sha256=5BjG6ewtTQpcV8o8pd4gvJNsNbqsdeI53b-q_jjKlQo,36709
50
+ ukrgen/flow/stages/stage.py,sha256=GC3urmGneHutV9tT1JmKHXrSgNH-TP6ZgtDq8t3PJ9c,1710
51
+ ukrgen/flow/stages/sto.py,sha256=K1QkuQ2tHe8aMeRIaBayPzoH4hH8F8LqULEl_MCwmfg,16951
52
+ ukrgen/flow/stages/unvec.py,sha256=vvIiLoQhgLql_spH8O3fHujg7CGafl-4D98pOpdkoiY,2417
53
+ ukrgen/flow/stages/ukr/__init__.py,sha256=e2zNivdx9WZmhUKzgR_outOvS9halMWCtFd7ImsfGE8,281
54
+ ukrgen/flow/stages/ukr/gemm.py,sha256=Ro7D2dcCjJIhT8aVXeRl62AWcGbZTMb2s_gEs3RS88Q,5212
55
+ ukrgen/flow/stages/ukr/mm.py,sha256=DK_QILjxHsBzm3CncSG4RL4bYziYSo6pHCms_leLrH4,1633
56
+ ukrgen/flow/stages/ukr/pack.py,sha256=th3FetCXwDgCGqt6HXxe3sv88bxRyiLxodhEE6aF4cE,2125
57
+ ukrgen/flow/stages/ukr/storage.py,sha256=XbZRj4pbCuywVIPQEXDSg8i87-E2OV5jwmXWuI3MGS0,7167
58
+ ukrgen/flow/stages/ukr/ukr.py,sha256=ioEgLzKlgKbX1cUOpml_8TguY52U-Q5X0l2f6NqKX0o,23614
59
+ ukrgen/generators/__init__.py,sha256=DJphCo52IfF1WlxjAPfI6ArRrRxlTNF06NLscg6iG2Q,329
60
+ ukrgen/generators/tiling.py,sha256=DYo_Mik9OHUurqGvPl9sFCrXCIIT6H8uGxbTiKlWzO4,6760
61
+ ukrgen/injectors/blis/cgen.py,sha256=2J6s2kzFdglxDInsoT4yswOVVIaeo36U6q-oL5okseU,30844
62
+ ukrgen/injectors/blis/families.py,sha256=sZZPcso3YDI6BjA43tut1r8K5K_jxKrmvzI2HAWF6po,40933
63
+ ukrgen/injectors/blis/generate.py,sha256=1Y1eSQdAyRD-xl3Fdfdknvo2Nqab7vO055e-RWCAKdE,6851
64
+ ukrgen/injectors/blis/patch.py,sha256=43yoa9OFM_s-yZeYeuueLPs3H7QLst4oZJtvH3gookU,5160
65
+ ukrgen/injectors/blis/templates.py,sha256=0p9IhTOnjt0H1lRlAOlOdEO5dwkCmFrEJ-nLPbCVPPo,6598
66
+ ukrgen/injectors/blis/patches/pr960-dynamic-blocksizes.diff,sha256=84GjsKLbOfKcKmMXtqy9CvfxsS9cr0qIl6-7r50kHSM,5223
67
+ ukrgen/iremu/lsc/strided_ldst.py,sha256=sSlv7lV5q1t3Vj4JYvahmBu_y06h8VBjfjVhrZUSgac,185
68
+ ukrgen/iremu/sme/scale_tile.py,sha256=rpAAAfvWQQLQvUJStah50XIhtenCyINtDQkmr0SsHdg,508
69
+ ukrgen/iremu/sme/store_tile.py,sha256=kCtYpL5d9afgvXXi4rtAFwM9gw8pTNPjNv7cGAVpiLc,858
70
+ ukrgen/iremu/sme/tma_tile.py,sha256=CAZQe4Cezoe6I-ape3akG2VA6Or9GURS4H6_mc9EcQM,606
71
+ ukrgen/irmod/__init__.py,sha256=DRRde-LDLZoO-eqlwuh15TVgDQHcdxgi_1NOKIRe2lk,25
72
+ ukrgen/irmod/lsc/__init__.py,sha256=RpXSf-IAOK3QOhhQqsGSHLW0XTYmUV1gmjM_gqhsQNI,1917
73
+ ukrgen/irmod/lsc/addrmerge.py,sha256=P2eU1PFMiI54XIERRMsqEJBXYWOhzXgkctlbpEVEzk8,5103
74
+ ukrgen/irmod/lsc/base.py,sha256=LPDFyh-Es_OPtVGUC5I1dwBw-_PrTTXpmW9MiTHOaAw,3842
75
+ ukrgen/irmod/lsc/cluster.py,sha256=BMJswYMOViiVfSnabU_sn3zDIW080RhX50MbYYnN-UU,2592
76
+ ukrgen/irmod/lsc/combine_load_transform.py,sha256=NJW0vaU98ISNDReyWZceaGZNcuimcO_U-i8TAu970W8,526
77
+ ukrgen/irmod/lsc/copyprop.py,sha256=BJN0WC09IGfiqvnyPTgfXk01w7o6HelHmR_44NSgQ7Q,7767
78
+ ukrgen/irmod/lsc/hoist.py,sha256=bg__Z5Hr4FDq2enxoaTVvVSJQvqfCSEyCHjoPng0C8Y,3375
79
+ ukrgen/irmod/lsc/lanefuse.py,sha256=tFp_e4mEme6a2ffnMjAJ0wWqQkCN3wm71W1Rn1HmBHw,4540
80
+ ukrgen/irmod/lsc/ldinc.py,sha256=hZiGa2GkfzPCW6l_e_MWJrKM-Cl-4vyfRAvVkZD7uHQ,11628
81
+ ukrgen/irmod/lsc/shufflenet.py,sha256=_F03Qwjk4KkCMNEEkGWGVa2JtfBt9kEj1do-JjgE5_Q,6269
82
+ ukrgen/irmod/lsc/slices.py,sha256=qJzStMlTfwdkfC5c9QsngBzao8-us6jFPtJl7NGvAgE,14915
83
+ ukrgen/irmod/lsc/structfuse.py,sha256=n1qocydgbEhMsN2RPs2GV34GcD9VCurwqW7IeSMJ7A0,10900
84
+ ukrgen/irmod/lsc/tailmask.py,sha256=DkwTj7nlzbRt5FgDPaqiPitSBDr-JVQEv-9xdHFq-kM,10817
85
+ ukrgen/irmod/lsc/unroll.py,sha256=6rfP8nht34R_Xanh4wsigcInJCNApiL09y1ququTVR8,8623
86
+ ukrgen/irmod/lsc/vectorize.py,sha256=MftSrL4GpiVTFh5I4dEK5upCzDVVLAG1Qg097LqraYY,4520
87
+ ukrgen/irmod/lsc/widen.py,sha256=EsEHzwJOccDfZFY-s4iRIWH4e4UXILXsxlpo-anrvSg,10847
88
+ ukrgen/lsc_model/__init__.py,sha256=ec_p4rzTewV-HBi4pL6AjD7O3Wpg_mN20fsq0eyzCV4,94
89
+ ukrgen/lsc_model/addressing.py,sha256=k2Elb-WEUvX6fqQGyfEEeXhd2MAeX0zofZqUzEnmSYI,12291
90
+ ukrgen/lsc_model/builder.py,sha256=WeoSaNY1SuZKONrNySkXjPiO25b4JAUGRrowVj1UlQY,78363
91
+ ukrgen/lsc_model/ir.py,sha256=aUvhSxiv57B_fDa_13KnFMtEaIgWQhtFS_z2lXVwNBk,9586
92
+ ukrgen/lsc_model/state.py,sha256=fCpRcp8HxTVfsWOGFt0sp0I6VHFNOWKf-JHyXH_nW5A,6293
93
+ ukrgen/matching/__init__.py,sha256=9PVroCac9qIFrbWg7ICtHcPwF6_7LEyUiJPZD5aRq1A,57
94
+ ukrgen/matching/math.py,sha256=8vvAEalWhlwXjNUsE3_Xtostovpk-D8u_WRzmzo_368,36786
95
+ ukrgen/models/__init__.py,sha256=kv5rhvW4ho0cPePoRdFnbZMwHIldi3rrc9ANBx-5VBA,358
96
+ ukrgen/models/addr_resolver.md,sha256=maluuzaPCfsS1YN3HmM32_DffgQMqxHMAkCGHTpWfaI,1734
97
+ ukrgen/models/addr_resolver.py,sha256=9tZrDlWaoNe2NKvyWM-Amt3vVU8-Te22tq5x9nWR8jU,9454
98
+ ukrgen/models/load_store_operations.py,sha256=m6wI4zHae37R-tlYFwoBtguf7CNL_UixsBpqIkPIbJQ,21256
99
+ ukrgen/models/offset_mapper.py,sha256=frd3r9rv9ybsU3CAQ_AeJvwun022wVUNVGf76Y0tBZ8,6543
100
+ ukrgen/models/tile_offset_mapper.py,sha256=K0_ZAvkTOtEmeCwWRBzkgkSRdxRWZNHVC5iJm4-5uPc,1690
101
+ ukrgen/models/addr/reg_selectors.py,sha256=bsfeK90ywVbW2GgttFi8AN9MqfGQi1pEEe6bsyKtmIM,8990
102
+ ukrgen/models/lsc/index.py,sha256=_YQrsCecvY53AKQIDP3E8kApSF8piFbIc2j7wfq9npc,1938
103
+ ukrgen/models/lsc/offset.py,sha256=bWtxPSMgvqmNtK_2wnmUblui6ofcu48ZPKbEVmPVZhM,13156
104
+ ukrgen/models/lsc/reg.py,sha256=pSocP1e4r3YFnVwwhN5JF6NmbEZmfkn4w-SpjomywBU,1869
105
+ ukrgen/schedulers/__init__.py,sha256=ryUbeptn8lEm7vtZGcg7lXitINDpHwkKrHRKyrqQcdU,372
106
+ ukrgen/schedulers/dependency.py,sha256=5qGrBycO8n9RTWa7frtRBPM0lsVKRIDi4Rl-S-RNvhw,2049
107
+ ukrgen/schedulers/distance.py,sha256=CZ0pPgRKWDwDJ1CdVCm8Ta_a7lLbHr4elbXzRLwC_Rk,8277
108
+ ukrgen/schedulers/issue.py,sha256=BCgarfw7klGlyckSskn46AKKm6jQTHj_0DLbhRmgazg,5603
109
+ ukrgen/schedulers/list_scheduler.py,sha256=d7OEFOs7Rdx-4y6Rl7mRLmuBd5klFqqCh1HEM_SsPiE,25895
110
+ ukrgen/schedulers/reg_compare.py,sha256=q9SOA3J2uA94QlIZxF6ITAyUlqnXlYql0j5K2IBtPnA,1520
111
+ ukrgen/schedulers/simple_dependency_scheduler.py,sha256=QfobKJMfC4XdizyGu9wNiap8SSw0mZNTxa6sGJcxpxw,10949
112
+ ukrgen/specializers/__init__.py,sha256=DJphCo52IfF1WlxjAPfI6ArRrRxlTNF06NLscg6iG2Q,329
113
+ ukrgen/specializers/addresses.py,sha256=wOsHgegoJiYjcelodDoPAT8T7ptE4ybfTnc0c3mC2eM,22363
114
+ ukrgen/specializers/signature.py,sha256=9ecqwwcuO5Sin-Tu_99UtJBc9KGVNPzeztF1NHAmths,59091
115
+ ukrgen/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
+ ukrgen/support/data_move.py,sha256=c_YkiiDkk_MJTlH15k6TMze17yK3blF0wRTOIIi5q8M,21938
117
+ ukrgen/support/dm_solver.py,sha256=sg8XTqnefMHwCYF7Oejomyd0Ohc0qODraknw2KSrnkg,21509
118
+ ukrgen/support/domains.py,sha256=CWsQj-x7QzdqKmEQ_0luzoRMq1Ghl0cJFo6U36Ulw6M,637
119
+ ukrgen/support/encoding.py,sha256=6eBc4jIfAiJVoXF49bc5YrWtiHLUFgz7_8jrQESxd78,11107
120
+ ukrgen/support/op.py,sha256=giMv6oFlYAaWFun531HAh4l0zT_kLlJ_b8d6y8YNM-U,14233
121
+ ukrgen/support/sig_group.py,sha256=I_P8R4ytdfUEsxv8D10Hp10a5H_voGoauC089r_2KVg,6950
122
+ ukrgen/support/tiles.py,sha256=-GxmtaPQ81Xk0HqIKLPgsj29FE3SKRWKtBu9pjPX4Gk,10819
123
+ ukrgen/support/transpose.py,sha256=5dziOIicyFqC_Ng2GwID_jWc06DOLhW8-rJjmQjDG_k,4989
124
+ ukrgen/support/dm_resolutions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
+ ukrgen/support/dm_resolutions/direct.py,sha256=-6c-BwpLPej3KoJUqlzMkEQZzSHvMuFVvlqNzdg9bvk,6307
126
+ ukrgen/support/dm_resolutions/scalar_reduce.py,sha256=qUS193ERZJJS1_7cmVFbRYvlSkXiV0qvvhDEivSx77A,9399
127
+ ukrgen/support/dm_resolutions/strided.py,sha256=Q1OBI2g66oINsYlheocV5m6pq8J4lRm07K-yZu-IfDk,7772
128
+ jukefa_ukrgen-0.2.0.dist-info/METADATA,sha256=STtzhLfo6bOe5B6CJEceS8OtEeBgV5Hxoeh-vBO3buM,6237
129
+ jukefa_ukrgen-0.2.0.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
130
+ jukefa_ukrgen-0.2.0.dist-info/entry_points.txt,sha256=VzOxpFShCwysjzYcaN7pjpD9prdnGNE-HxLpzL2MHDc,94
131
+ jukefa_ukrgen-0.2.0.dist-info/licenses/LICENSE-GPL-3.0,sha256=HgFeraA0-kQtru2vFH_cXmKE_G9rXae-RgDX8Yn-EHY,35130
132
+ jukefa_ukrgen-0.2.0.dist-info/licenses/LICENSE-MIT,sha256=Rjy-wKdcrIJGx0P_cOba5XJjvG3onIAL4VX0rtA1rx4,1070
133
+ jukefa_ukrgen-0.2.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.33.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ blisgen = ukrgen.clitools.blisgen:main
3
+ ukrgen = ukrgen.clitools.ukrgen:main