@@ -82,3 +82,48 @@ def __init__(
8282 reuse_read .as_dict () if reuse_read is not None else None ,
8383 reuse_write .as_dict () if reuse_write is not None else None ,
8484 )
85+
86+
87+ @register_object ("meta_schedule.MultiLevelTilingVNNI" )
88+ class MultiLevelTilingVNNI (ScheduleRule ):
89+ """Multi-level tiling with reuse.
90+
91+ Parameters
92+ ----------
93+ structure : str
94+ The tiling structure. Recommended:
95+ - 'SSRSRS' on CPU
96+ - 'SSSRRSRS' on GPU
97+ tile_bind : Optional[List[str]]
98+ For each level of tiles, which thread axis it is bound to. Recommended:
99+ - None on CPU
100+ - [blockIdx.x, vthread.x, threadIdx.x] on GPU
101+ max_innermost_factor : Optional[int]
102+ The maximum size of the innermost factor. None means no limit
103+ vector_load_lens : Optional[List[int]]
104+ The length of vector lane in vectorized cooperative fetching.
105+ None means disable vectorization
106+ reuse_read : Optional[ReuseType]
107+ Data reuse configuration for reading. None means no reuse.
108+ reuse_write : Optional[ReuseType]
109+ Data reuse configuration for writing. None means no reuse.
110+ """
111+
112+ def __init__ (
113+ self ,
114+ structure : str ,
115+ tile_binds : Optional [List [str ]] = None ,
116+ max_innermost_factor : Optional [int ] = None ,
117+ vector_load_lens : Optional [List [int ]] = None ,
118+ reuse_read : Optional [ReuseType ] = None ,
119+ reuse_write : Optional [ReuseType ] = None ,
120+ ) -> None :
121+ self .__init_handle_by_constructor__ (
122+ _ffi_api .ScheduleRuleMultiLevelTilingVNNI , # type: ignore # pylint: disable=no-member
123+ structure ,
124+ tile_binds ,
125+ max_innermost_factor ,
126+ vector_load_lens ,
127+ reuse_read .as_dict () if reuse_read is not None else None ,
128+ reuse_write .as_dict () if reuse_write is not None else None ,
129+ )
0 commit comments