nvmath-python 0.5.0__cp313-cp313-win_amd64.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.
- nvmath/__init__.pxd +0 -0
- nvmath/__init__.py +37 -0
- nvmath/_internal/__init__.py +0 -0
- nvmath/_internal/layout.py +58 -0
- nvmath/_utils.py +363 -0
- nvmath/bindings/__init__.pxd +0 -0
- nvmath/bindings/__init__.py +44 -0
- nvmath/bindings/_internal/__init__.pxd +0 -0
- nvmath/bindings/_internal/__init__.py +0 -0
- nvmath/bindings/_internal/cublas.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cublas.pxd +518 -0
- nvmath/bindings/_internal/cublasLt.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cublasLt.pxd +54 -0
- nvmath/bindings/_internal/cudss.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cudss.pxd +44 -0
- nvmath/bindings/_internal/cufft.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cufft.pxd +69 -0
- nvmath/bindings/_internal/cufftMp.pxd +77 -0
- nvmath/bindings/_internal/curand.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/curand.pxd +42 -0
- nvmath/bindings/_internal/cusolver.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cusolver.pxd +15 -0
- nvmath/bindings/_internal/cusolverDn.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cusolverDn.pxd +386 -0
- nvmath/bindings/_internal/cusparse.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/cusparse.pxd +270 -0
- nvmath/bindings/_internal/mathdx.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/mathdx.pxd +79 -0
- nvmath/bindings/_internal/nvshmem.pxd +29 -0
- nvmath/bindings/_internal/utils.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/_internal/utils.pxd +186 -0
- nvmath/bindings/cublas.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cublas.pxd +545 -0
- nvmath/bindings/cublas.pyi +18 -0
- nvmath/bindings/cublasLt.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cublasLt.pxd +99 -0
- nvmath/bindings/cudss.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cudss.pxd +83 -0
- nvmath/bindings/cudss.pyi +249 -0
- nvmath/bindings/cufft.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cufft.pxd +114 -0
- nvmath/bindings/cufftMp.pxd +124 -0
- nvmath/bindings/curand.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/curand.pxd +71 -0
- nvmath/bindings/cusolver.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cusolver.pxd +60 -0
- nvmath/bindings/cusolverDn.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cusolverDn.pxd +410 -0
- nvmath/bindings/cusparse.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cusparse.pxd +329 -0
- nvmath/bindings/cycublas.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycublas.pxd +657 -0
- nvmath/bindings/cycublasLt.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycublasLt.pxd +1010 -0
- nvmath/bindings/cycudss.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycudss.pxd +191 -0
- nvmath/bindings/cycufft.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycufft.pxd +320 -0
- nvmath/bindings/cycufftMp.pxd +333 -0
- nvmath/bindings/cycurand.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycurand.pxd +146 -0
- nvmath/bindings/cycusolver.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycusolver.pxd +143 -0
- nvmath/bindings/cycusolverDn.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycusolverDn.pxd +414 -0
- nvmath/bindings/cycusparse.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cycusparse.pxd +476 -0
- nvmath/bindings/cymathdx.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/cymathdx.pxd +363 -0
- nvmath/bindings/cynvshmem.pxd +126 -0
- nvmath/bindings/mathdx.cp313-win_amd64.pyd +0 -0
- nvmath/bindings/mathdx.pxd +131 -0
- nvmath/bindings/mathdx.pyi +686 -0
- nvmath/bindings/nvpl/__init__.pxd +0 -0
- nvmath/bindings/nvpl/__init__.py +11 -0
- nvmath/bindings/nvpl/_internal/__init__.pxd +0 -0
- nvmath/bindings/nvpl/_internal/__init__.py +0 -0
- nvmath/bindings/nvpl/_internal/fft.pxd +36 -0
- nvmath/bindings/nvpl/cyfft.pxd +87 -0
- nvmath/bindings/nvpl/fft.pxd +100 -0
- nvmath/bindings/nvshmem.pxd +54 -0
- nvmath/device/__init__.py +23 -0
- nvmath/device/_deprecated.py +33 -0
- nvmath/device/caching.py +51 -0
- nvmath/device/common.py +131 -0
- nvmath/device/common_backend.py +125 -0
- nvmath/device/common_cuda.py +156 -0
- nvmath/device/common_mathdx.py +97 -0
- nvmath/device/common_numba.py +159 -0
- nvmath/device/common_opaque_tensor.py +128 -0
- nvmath/device/cublasdx.py +1085 -0
- nvmath/device/cublasdx_backend.py +552 -0
- nvmath/device/cublasdx_numba.py +528 -0
- nvmath/device/cufftdx.py +551 -0
- nvmath/device/cufftdx_backend.py +194 -0
- nvmath/device/cufftdx_numba.py +123 -0
- nvmath/device/curand_kernel.py +9147 -0
- nvmath/device/nvrtc.py +95 -0
- nvmath/device/patch.py +35 -0
- nvmath/device/random.py +417 -0
- nvmath/device/random_helpers.py +23 -0
- nvmath/device/random_states.py +189 -0
- nvmath/device/types.py +11 -0
- nvmath/device/vector_types_numba.py +203 -0
- nvmath/distributed/__init__.py +117 -0
- nvmath/distributed/_internal/__init__.py +0 -0
- nvmath/distributed/_internal/nvshmem.py +243 -0
- nvmath/distributed/_internal/tensor_ifc_cupy.py +111 -0
- nvmath/distributed/_internal/tensor_ifc_numpy.py +53 -0
- nvmath/distributed/_internal/tensor_ifc_torch.py +108 -0
- nvmath/distributed/_internal/tensor_wrapper.py +59 -0
- nvmath/distributed/_utils.py +152 -0
- nvmath/distributed/fft/__init__.py +6 -0
- nvmath/distributed/fft/_configuration.py +86 -0
- nvmath/distributed/fft/fft.py +1737 -0
- nvmath/distributed/reshape/__init__.py +6 -0
- nvmath/distributed/reshape/_configuration.py +39 -0
- nvmath/distributed/reshape/reshape.py +1249 -0
- nvmath/fft/__init__.py +7 -0
- nvmath/fft/_configuration.py +208 -0
- nvmath/fft/_exec_utils.py +116 -0
- nvmath/fft/_helpers.py +260 -0
- nvmath/fft/fft.py +2346 -0
- nvmath/internal/__init__.py +5 -0
- nvmath/internal/enum_utils.py +142 -0
- nvmath/internal/formatters.py +87 -0
- nvmath/internal/mem_limit.py +51 -0
- nvmath/internal/package_ifc.py +119 -0
- nvmath/internal/package_ifc_cuda.py +43 -0
- nvmath/internal/package_ifc_cupy.py +49 -0
- nvmath/internal/package_ifc_torch.py +31 -0
- nvmath/internal/package_wrapper.py +14 -0
- nvmath/internal/tensor_ifc.py +143 -0
- nvmath/internal/tensor_ifc_cupy.py +185 -0
- nvmath/internal/tensor_ifc_numpy.py +157 -0
- nvmath/internal/tensor_ifc_torch.py +115 -0
- nvmath/internal/tensor_wrapper.py +160 -0
- nvmath/internal/typemaps.py +154 -0
- nvmath/internal/utils.py +634 -0
- nvmath/linalg/__init__.py +11 -0
- nvmath/linalg/_internal/__init__.py +3 -0
- nvmath/linalg/_internal/algo_cap_ifc.py +86 -0
- nvmath/linalg/_internal/algo_config_ifc.py +87 -0
- nvmath/linalg/_internal/enum_to_tuples.py +64 -0
- nvmath/linalg/_internal/epilog_protocol.py +738 -0
- nvmath/linalg/_internal/matmul_desc_ifc.py +72 -0
- nvmath/linalg/_internal/matmul_pref_ifc.py +65 -0
- nvmath/linalg/_internal/matrix_layout_ifc.py +59 -0
- nvmath/linalg/_internal/typemaps.py +135 -0
- nvmath/linalg/_internal/utils.py +96 -0
- nvmath/linalg/advanced/__init__.py +8 -0
- nvmath/linalg/advanced/_algorithmmod.py +142 -0
- nvmath/linalg/advanced/_configuration.py +320 -0
- nvmath/linalg/advanced/helpers/__init__.py +5 -0
- nvmath/linalg/advanced/helpers/matmul.py +173 -0
- nvmath/linalg/advanced/matmulmod.py +2855 -0
- nvmath/memory.py +266 -0
- nvmath/sparse/__init__.py +18 -0
- nvmath/sparse/_internal/__init__.py +21 -0
- nvmath/sparse/_internal/common_utils.py +81 -0
- nvmath/sparse/_internal/cudss_config_ifc.py +584 -0
- nvmath/sparse/_internal/cudss_data_ifc.py +291 -0
- nvmath/sparse/_internal/cudss_utils.py +398 -0
- nvmath/sparse/_internal/sparse_csr_ifc.py +154 -0
- nvmath/sparse/_internal/sparse_format_helpers.py +88 -0
- nvmath/sparse/_internal/sparse_tensor_ifc.py +80 -0
- nvmath/sparse/advanced/__init__.py +7 -0
- nvmath/sparse/advanced/_configuration.py +150 -0
- nvmath/sparse/advanced/direct_solver.py +1705 -0
- nvmath_python-0.5.0.dist-info/METADATA +122 -0
- nvmath_python-0.5.0.dist-info/RECORD +174 -0
- nvmath_python-0.5.0.dist-info/WHEEL +5 -0
- nvmath_python-0.5.0.dist-info/licenses/LICENSE +177 -0
- nvmath_python-0.5.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Interface class to encapsulate low-level calls to get algorithm capabilities information.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
__all__ = ["AlgoCapInterface"]
|
|
10
|
+
|
|
11
|
+
import numpy as np
|
|
12
|
+
|
|
13
|
+
from nvmath.bindings import cublasLt as cublaslt
|
|
14
|
+
from .enum_to_tuples import ENUM_TO_MATMUL_STAGE, ENUM_TO_MATMUL_TILE
|
|
15
|
+
|
|
16
|
+
CapEnum = cublaslt.MatmulAlgoCapAttribute
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def scalar_attributes():
|
|
20
|
+
return [e.name for e in CapEnum if not e.name.endswith("_IDS")]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
CAP_ENUM_SCALAR_ATTR = scalar_attributes()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class AlgoCapInterface:
|
|
27
|
+
def __init__(self, algorithm):
|
|
28
|
+
""" """
|
|
29
|
+
assert isinstance(algorithm, cublaslt.MatmulHeuristicResult), "Internal error."
|
|
30
|
+
self.algorithm = algorithm
|
|
31
|
+
|
|
32
|
+
def __getattr__(self, name):
|
|
33
|
+
_name = name.upper()
|
|
34
|
+
if _name not in CAP_ENUM_SCALAR_ATTR:
|
|
35
|
+
return super().__getattr__(name)
|
|
36
|
+
name = _name
|
|
37
|
+
get_dtype = cublaslt.get_matmul_algo_cap_attribute_dtype
|
|
38
|
+
attribute_buffer = np.zeros((1,), dtype=get_dtype(CapEnum[name]))
|
|
39
|
+
size_written = np.zeros((1,), dtype=np.uint64)
|
|
40
|
+
cublaslt.matmul_algo_cap_get_attribute(
|
|
41
|
+
self.algorithm["algo"].ctypes.data,
|
|
42
|
+
CapEnum[name].value,
|
|
43
|
+
attribute_buffer.ctypes.data,
|
|
44
|
+
attribute_buffer.itemsize,
|
|
45
|
+
size_written.ctypes.data,
|
|
46
|
+
)
|
|
47
|
+
return attribute_buffer[0]
|
|
48
|
+
|
|
49
|
+
def _get_array_attribute(self, name, enum_to_value_map):
|
|
50
|
+
assert name in ["TILE_IDS", "STAGES_IDS"], "Internal error."
|
|
51
|
+
|
|
52
|
+
get_dtype = cublaslt.get_matmul_algo_cap_attribute_dtype
|
|
53
|
+
dtype = get_dtype(CapEnum[name])
|
|
54
|
+
size_written = np.zeros((1,), dtype=np.uint64)
|
|
55
|
+
|
|
56
|
+
# First get the buffer size needed.
|
|
57
|
+
cublaslt.matmul_algo_cap_get_attribute(
|
|
58
|
+
self.algorithm["algo"].ctypes.data, CapEnum[name].value, 0, 0, size_written.ctypes.data
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# Check if any data needs to be written.
|
|
62
|
+
size = size_written[0]
|
|
63
|
+
if size == 0:
|
|
64
|
+
return ()
|
|
65
|
+
|
|
66
|
+
# Then allocate the buffer and get the data.
|
|
67
|
+
num = int(size // dtype().itemsize)
|
|
68
|
+
attribute_buffer = np.zeros((num,), dtype=dtype)
|
|
69
|
+
cublaslt.matmul_algo_cap_get_attribute(
|
|
70
|
+
self.algorithm["algo"].ctypes.data,
|
|
71
|
+
CapEnum[name].value,
|
|
72
|
+
attribute_buffer.ctypes.data,
|
|
73
|
+
size,
|
|
74
|
+
size_written.ctypes.data,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# Convert to value.
|
|
78
|
+
return tuple(enum_to_value_map[e] for e in attribute_buffer)
|
|
79
|
+
|
|
80
|
+
@property
|
|
81
|
+
def tile_ids(self):
|
|
82
|
+
return self._get_array_attribute("TILE_IDS", ENUM_TO_MATMUL_TILE)
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def stages_ids(self):
|
|
86
|
+
return self._get_array_attribute("STAGES_IDS", ENUM_TO_MATMUL_STAGE)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Interface class to encapsulate low-level calls to get algorithm configuration information.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
__all__ = ["AlgoConfigInterface"]
|
|
10
|
+
|
|
11
|
+
from collections import namedtuple
|
|
12
|
+
|
|
13
|
+
import numpy as np
|
|
14
|
+
|
|
15
|
+
from nvmath.bindings import cublasLt as cublaslt
|
|
16
|
+
from .enum_to_tuples import (
|
|
17
|
+
CLUSTER_SHAPE_TO_ENUM,
|
|
18
|
+
ENUM_TO_CLUSTER_SHAPE,
|
|
19
|
+
MATMUL_STAGE_TO_ENUM,
|
|
20
|
+
ENUM_TO_MATMUL_STAGE,
|
|
21
|
+
MATMUL_TILE_TO_ENUM,
|
|
22
|
+
ENUM_TO_MATMUL_TILE,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
ConfigEnum = cublaslt.MatmulAlgoConfigAttribute
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def scalar_attributes():
|
|
29
|
+
return [e.name for e in ConfigEnum]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
CAP_ENUM_SCALAR_ATTR = scalar_attributes()
|
|
33
|
+
|
|
34
|
+
# Special Handling.
|
|
35
|
+
Maps = namedtuple("Maps", ["to_enumerator", "to_value"])
|
|
36
|
+
SPECIAL_ATTR = {
|
|
37
|
+
"CLUSTER_SHAPE_ID": Maps(CLUSTER_SHAPE_TO_ENUM, ENUM_TO_CLUSTER_SHAPE),
|
|
38
|
+
"STAGES_ID": Maps(MATMUL_STAGE_TO_ENUM, ENUM_TO_MATMUL_STAGE),
|
|
39
|
+
"TILE_ID": Maps(MATMUL_TILE_TO_ENUM, ENUM_TO_MATMUL_TILE),
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AlgoConfigInterface:
|
|
44
|
+
def __init__(self, algorithm):
|
|
45
|
+
""" """
|
|
46
|
+
assert isinstance(algorithm, cublaslt.MatmulHeuristicResult), "Internal error."
|
|
47
|
+
self.algorithm = algorithm
|
|
48
|
+
|
|
49
|
+
def __getattr__(self, name):
|
|
50
|
+
_name = name.upper()
|
|
51
|
+
if _name not in CAP_ENUM_SCALAR_ATTR:
|
|
52
|
+
return super().__getattr__(name)
|
|
53
|
+
name = _name
|
|
54
|
+
get_dtype = cublaslt.get_matmul_algo_config_attribute_dtype
|
|
55
|
+
attribute_buffer = np.zeros((1,), dtype=get_dtype(ConfigEnum[name]))
|
|
56
|
+
size_written = np.zeros((1,), dtype=np.uint64)
|
|
57
|
+
cublaslt.matmul_algo_config_get_attribute(
|
|
58
|
+
self.algorithm["algo"].ctypes.data,
|
|
59
|
+
ConfigEnum[name].value,
|
|
60
|
+
attribute_buffer.ctypes.data,
|
|
61
|
+
attribute_buffer.itemsize,
|
|
62
|
+
size_written.ctypes.data,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
if name not in SPECIAL_ATTR:
|
|
66
|
+
return attribute_buffer[0]
|
|
67
|
+
|
|
68
|
+
return SPECIAL_ATTR[name].to_value[attribute_buffer[0]]
|
|
69
|
+
|
|
70
|
+
def __setattr__(self, name, value):
|
|
71
|
+
_name = name.upper()
|
|
72
|
+
if _name not in CAP_ENUM_SCALAR_ATTR:
|
|
73
|
+
return super().__setattr__(name, value)
|
|
74
|
+
name = _name
|
|
75
|
+
|
|
76
|
+
if name in SPECIAL_ATTR:
|
|
77
|
+
value = SPECIAL_ATTR[name].to_enumerator[value]
|
|
78
|
+
|
|
79
|
+
get_dtype = cublaslt.get_matmul_algo_config_attribute_dtype
|
|
80
|
+
attribute_buffer = np.zeros((1,), dtype=get_dtype(ConfigEnum[name]))
|
|
81
|
+
attribute_buffer[0] = value
|
|
82
|
+
cublaslt.matmul_algo_config_set_attribute(
|
|
83
|
+
self.algorithm["algo"].ctypes.data,
|
|
84
|
+
ConfigEnum[name].value,
|
|
85
|
+
attribute_buffer.ctypes.data,
|
|
86
|
+
attribute_buffer.itemsize,
|
|
87
|
+
)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Utilities to convert tuple like enumerators to tuples, along with forward and inverse maps.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"CLUSTER_SHAPES",
|
|
11
|
+
"CLUSTER_SHAPE_TO_ENUM",
|
|
12
|
+
"ENUM_TO_CLUSTER_SHAPE",
|
|
13
|
+
"MATMUL_STAGES",
|
|
14
|
+
"MATMUL_STAGE_TO_ENUM",
|
|
15
|
+
"ENUM_TO_MATMUL_STAGE",
|
|
16
|
+
"MATMUL_TILES",
|
|
17
|
+
"MATMUL_TILE_TO_ENUM",
|
|
18
|
+
"ENUM_TO_MATMUL_TILE",
|
|
19
|
+
]
|
|
20
|
+
|
|
21
|
+
import re
|
|
22
|
+
|
|
23
|
+
from nvmath.bindings import cublasLt as cublaslt
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def integer_or_string(value):
|
|
27
|
+
try:
|
|
28
|
+
value = int(value)
|
|
29
|
+
except ValueError:
|
|
30
|
+
...
|
|
31
|
+
return value
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def create_valid_tuples_from_enum(enum, prefix, *, expr=r"(?:(\d+)x(\d+|\w+)(?:x(\d+))?|(AUTO|UNDEFINED))"):
|
|
35
|
+
"""
|
|
36
|
+
Create a sequence of tuples representing the allowed combinations for the given
|
|
37
|
+
enumeration.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
combinations = []
|
|
41
|
+
enumerator_to_value = {}
|
|
42
|
+
value_to_enumerator = {}
|
|
43
|
+
expr = prefix + expr
|
|
44
|
+
for e in enum:
|
|
45
|
+
m = re.match(expr, e.name)
|
|
46
|
+
if m:
|
|
47
|
+
# print(m.groups())
|
|
48
|
+
if m.group(4):
|
|
49
|
+
v = m.group(4)
|
|
50
|
+
else:
|
|
51
|
+
groups = m.groups()[: m.groups().index(None)]
|
|
52
|
+
v = tuple(map(integer_or_string, (g for g in groups)))
|
|
53
|
+
combinations.append(v)
|
|
54
|
+
value_to_enumerator[v] = e
|
|
55
|
+
enumerator_to_value[e] = v
|
|
56
|
+
|
|
57
|
+
return tuple(combinations), value_to_enumerator, enumerator_to_value
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
CLUSTER_SHAPES, CLUSTER_SHAPE_TO_ENUM, ENUM_TO_CLUSTER_SHAPE = create_valid_tuples_from_enum(cublaslt.ClusterShape, "SHAPE_")
|
|
61
|
+
|
|
62
|
+
MATMUL_STAGES, MATMUL_STAGE_TO_ENUM, ENUM_TO_MATMUL_STAGE = create_valid_tuples_from_enum(cublaslt.MatmulStages, "STAGES_")
|
|
63
|
+
|
|
64
|
+
MATMUL_TILES, MATMUL_TILE_TO_ENUM, ENUM_TO_MATMUL_TILE = create_valid_tuples_from_enum(cublaslt.MatmulTile, "TILE_")
|