pygpgpu 0.1.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.
- pygpgpu/__init__.py +113 -0
- pygpgpu/constants.py +107 -0
- pygpgpu/cparser/ShaderBuiltins.py +16874 -0
- pygpgpu/cparser/__init__.py +4 -0
- pygpgpu/cparser/cparser.py +1200 -0
- pygpgpu/cparser/cpreprocessor.py +135 -0
- pygpgpu/cparser/csyntaxtree.py +88 -0
- pygpgpu/cparser/ctokens.py +319 -0
- pygpgpu/cparser/generate_code.py +481 -0
- pygpgpu/cparser/minifyc.py +311 -0
- pygpgpu/cparser/pcpp/__init__.py +6 -0
- pygpgpu/cparser/pcpp/evaluator.py +897 -0
- pygpgpu/cparser/pcpp/lextab.py +169 -0
- pygpgpu/cparser/pcpp/parser.py +491 -0
- pygpgpu/cparser/pcpp/parsetab.py +2757 -0
- pygpgpu/cparser/pcpp/pcmd.py +465 -0
- pygpgpu/cparser/pcpp/ply/__init__.py +5 -0
- pygpgpu/cparser/pcpp/ply/cpp.py +1050 -0
- pygpgpu/cparser/pcpp/ply/ctokens.py +159 -0
- pygpgpu/cparser/pcpp/ply/lex.py +1237 -0
- pygpgpu/cparser/pcpp/ply/yacc.py +3751 -0
- pygpgpu/cparser/pcpp/ply/ygen.py +75 -0
- pygpgpu/cparser/pcpp/preprocessor.py +1698 -0
- pygpgpu/cparser/ts_parser.py +691 -0
- pygpgpu/cuda/__init__.py +7 -0
- pygpgpu/cuda/cuimport.py +201 -0
- pygpgpu/cuda/driver/__init__.py +48 -0
- pygpgpu/cuda/driver/cuda.py +187 -0
- pygpgpu/cuda/driver/cuda.pyi +184 -0
- pygpgpu/cuda/driver/cuinfo.py +725 -0
- pygpgpu/cuda/driver/cutypes.py +364 -0
- pygpgpu/cuda/driver/nvrtc.py +200 -0
- pygpgpu/cuda/driver/nvrtc.pyi +54 -0
- pygpgpu/cuda/driver/nvrtcinfo.py +125 -0
- pygpgpu/cuda/driver/nvrtctypes.py +63 -0
- pygpgpu/cuda/driver/vec_types/__init__.py +25 -0
- pygpgpu/cuda/driver/vec_types/char3.py +15 -0
- pygpgpu/cuda/driver/vec_types/char3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/double3.py +15 -0
- pygpgpu/cuda/driver/vec_types/double3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/float3.py +15 -0
- pygpgpu/cuda/driver/vec_types/float3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/int3.py +15 -0
- pygpgpu/cuda/driver/vec_types/int3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/long2.py +14 -0
- pygpgpu/cuda/driver/vec_types/long2.pyi +320 -0
- pygpgpu/cuda/driver/vec_types/long3.py +15 -0
- pygpgpu/cuda/driver/vec_types/long3.pyi +1229 -0
- pygpgpu/cuda/driver/vec_types/long4.py +16 -0
- pygpgpu/cuda/driver/vec_types/long4.pyi +3650 -0
- pygpgpu/cuda/driver/vec_types/short3.py +15 -0
- pygpgpu/cuda/driver/vec_types/short3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/uchar3.py +15 -0
- pygpgpu/cuda/driver/vec_types/uchar3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/uint3.py +15 -0
- pygpgpu/cuda/driver/vec_types/uint3.pyi +1230 -0
- pygpgpu/cuda/driver/vec_types/ulong2.py +14 -0
- pygpgpu/cuda/driver/vec_types/ulong2.pyi +320 -0
- pygpgpu/cuda/driver/vec_types/ulong3.py +15 -0
- pygpgpu/cuda/driver/vec_types/ulong3.pyi +1229 -0
- pygpgpu/cuda/driver/vec_types/ulong4.py +16 -0
- pygpgpu/cuda/driver/vec_types/ulong4.pyi +3650 -0
- pygpgpu/cuda/driver/vec_types/ushort3.py +15 -0
- pygpgpu/cuda/driver/vec_types/ushort3.pyi +1227 -0
- pygpgpu/cuda/oop/__init__.py +2 -0
- pygpgpu/cuda/oop/buffer.py +73 -0
- pygpgpu/cuda/oop/build_options.py +198 -0
- pygpgpu/cuda/oop/context.py +210 -0
- pygpgpu/cuda/oop/cuobject.py +137 -0
- pygpgpu/cuda/oop/device.py +88 -0
- pygpgpu/cuda/oop/device.pyi +733 -0
- pygpgpu/cuda/oop/devices.py +92 -0
- pygpgpu/cuda/oop/event.py +55 -0
- pygpgpu/cuda/oop/kernel.py +423 -0
- pygpgpu/cuda/oop/mem_object.py +151 -0
- pygpgpu/cuda/oop/nvrtc_program.py +228 -0
- pygpgpu/cuda/oop/program.py +135 -0
- pygpgpu/cuda/oop/program_info.py +147 -0
- pygpgpu/cuda/oop/program_parser.py +482 -0
- pygpgpu/cuda/oop/stream.py +97 -0
- pygpgpu/exceptions.py +5 -0
- pygpgpu/hip/__init__.py +6 -0
- pygpgpu/hip/driver/__init__.py +15 -0
- pygpgpu/hip/driver/hip.py +129 -0
- pygpgpu/hip/driver/hipinfo.py +138 -0
- pygpgpu/hip/driver/hiptypes.py +28 -0
- pygpgpu/hip/hipimport.py +179 -0
- pygpgpu/hip/oop/__init__.py +8 -0
- pygpgpu/hip/oop/buffer.py +73 -0
- pygpgpu/hip/oop/build_options.py +21 -0
- pygpgpu/hip/oop/context.py +57 -0
- pygpgpu/hip/oop/device.py +82 -0
- pygpgpu/hip/oop/devices.py +93 -0
- pygpgpu/hip/oop/event.py +60 -0
- pygpgpu/hip/oop/hip_compiler.py +209 -0
- pygpgpu/hip/oop/hipobject.py +137 -0
- pygpgpu/hip/oop/kernel.py +423 -0
- pygpgpu/hip/oop/mem_object.py +148 -0
- pygpgpu/hip/oop/program.py +142 -0
- pygpgpu/hip/oop/program_info.py +147 -0
- pygpgpu/hip/oop/program_parser.py +485 -0
- pygpgpu/hip/oop/stream.py +98 -0
- pygpgpu/kernel/__init__.py +14 -0
- pygpgpu/kernel/builtins.py +125 -0
- pygpgpu/kernel/decorator.py +594 -0
- pygpgpu/kernel/translator.py +1846 -0
- pygpgpu/numpy/__init__.py +9 -0
- pygpgpu/numpy/array_creation.py +83 -0
- pygpgpu/numpy/ndarray.py +287 -0
- pygpgpu/opencl/__init__.py +27 -0
- pygpgpu/opencl/climport.py +130 -0
- pygpgpu/opencl/common.py +76 -0
- pygpgpu/opencl/driver/__init__.py +120 -0
- pygpgpu/opencl/driver/cl.py +196 -0
- pygpgpu/opencl/driver/cl.pyi +197 -0
- pygpgpu/opencl/driver/clinfo.py +1913 -0
- pygpgpu/opencl/driver/cltypes.py +964 -0
- pygpgpu/opencl/driver/image_types/__init__.py +7 -0
- pygpgpu/opencl/driver/image_types/image1d_array_t.py +25 -0
- pygpgpu/opencl/driver/image_types/image1d_t.py +25 -0
- pygpgpu/opencl/driver/image_types/image2d_array_t.py +25 -0
- pygpgpu/opencl/driver/image_types/image2d_t.py +25 -0
- pygpgpu/opencl/driver/image_types/image3d_t.py +25 -0
- pygpgpu/opencl/driver/image_types/imagend_t.py +178 -0
- pygpgpu/opencl/driver/image_types/sampler_t.py +42 -0
- pygpgpu/opencl/driver/vec_types/__init__.py +29 -0
- pygpgpu/opencl/driver/vec_types/char3.py +16 -0
- pygpgpu/opencl/driver/vec_types/char3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/double3.py +16 -0
- pygpgpu/opencl/driver/vec_types/double3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/float3.py +16 -0
- pygpgpu/opencl/driver/vec_types/float3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/int3.py +16 -0
- pygpgpu/opencl/driver/vec_types/int3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/long16.py +28 -0
- pygpgpu/opencl/driver/vec_types/long16.pyi +192 -0
- pygpgpu/opencl/driver/vec_types/long2.py +14 -0
- pygpgpu/opencl/driver/vec_types/long2.pyi +320 -0
- pygpgpu/opencl/driver/vec_types/long3.py +16 -0
- pygpgpu/opencl/driver/vec_types/long3.pyi +1229 -0
- pygpgpu/opencl/driver/vec_types/long4.py +16 -0
- pygpgpu/opencl/driver/vec_types/long4.pyi +3650 -0
- pygpgpu/opencl/driver/vec_types/long8.py +20 -0
- pygpgpu/opencl/driver/vec_types/long8.pyi +108 -0
- pygpgpu/opencl/driver/vec_types/short3.py +16 -0
- pygpgpu/opencl/driver/vec_types/short3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/uchar3.py +16 -0
- pygpgpu/opencl/driver/vec_types/uchar3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/uint3.py +16 -0
- pygpgpu/opencl/driver/vec_types/uint3.pyi +1230 -0
- pygpgpu/opencl/driver/vec_types/ulong16.py +28 -0
- pygpgpu/opencl/driver/vec_types/ulong16.pyi +192 -0
- pygpgpu/opencl/driver/vec_types/ulong2.py +14 -0
- pygpgpu/opencl/driver/vec_types/ulong2.pyi +320 -0
- pygpgpu/opencl/driver/vec_types/ulong3.py +16 -0
- pygpgpu/opencl/driver/vec_types/ulong3.pyi +1229 -0
- pygpgpu/opencl/driver/vec_types/ulong4.py +16 -0
- pygpgpu/opencl/driver/vec_types/ulong4.pyi +3650 -0
- pygpgpu/opencl/driver/vec_types/ulong8.py +20 -0
- pygpgpu/opencl/driver/vec_types/ulong8.pyi +108 -0
- pygpgpu/opencl/driver/vec_types/ushort3.py +16 -0
- pygpgpu/opencl/driver/vec_types/ushort3.pyi +1227 -0
- pygpgpu/opencl/oop/__init__.py +18 -0
- pygpgpu/opencl/oop/buffer.py +127 -0
- pygpgpu/opencl/oop/build_options.py +117 -0
- pygpgpu/opencl/oop/clobject.py +151 -0
- pygpgpu/opencl/oop/command_queue.py +82 -0
- pygpgpu/opencl/oop/command_queue.pyi +42 -0
- pygpgpu/opencl/oop/context.py +312 -0
- pygpgpu/opencl/oop/context.pyi +122 -0
- pygpgpu/opencl/oop/device.py +63 -0
- pygpgpu/opencl/oop/device.pyi +481 -0
- pygpgpu/opencl/oop/event.py +213 -0
- pygpgpu/opencl/oop/event.pyi +68 -0
- pygpgpu/opencl/oop/image1d.py +100 -0
- pygpgpu/opencl/oop/image1d_array.py +100 -0
- pygpgpu/opencl/oop/image2d.py +101 -0
- pygpgpu/opencl/oop/image2d_array.py +100 -0
- pygpgpu/opencl/oop/image3d.py +100 -0
- pygpgpu/opencl/oop/imagend.py +55 -0
- pygpgpu/opencl/oop/kernel.py +495 -0
- pygpgpu/opencl/oop/kernel.pyi +70 -0
- pygpgpu/opencl/oop/kernel_wrapper.py +90 -0
- pygpgpu/opencl/oop/kernel_wrapper.pyi +45 -0
- pygpgpu/opencl/oop/mem_object.py +147 -0
- pygpgpu/opencl/oop/mem_object.pyi +104 -0
- pygpgpu/opencl/oop/pipe.py +85 -0
- pygpgpu/opencl/oop/platform.py +157 -0
- pygpgpu/opencl/oop/platform.pyi +121 -0
- pygpgpu/opencl/oop/platforms.py +88 -0
- pygpgpu/opencl/oop/program.py +369 -0
- pygpgpu/opencl/oop/program.pyi +111 -0
- pygpgpu/opencl/oop/program_info.py +192 -0
- pygpgpu/opencl/oop/program_parser.py +534 -0
- pygpgpu/opencl/oop/program_wrapper.py +109 -0
- pygpgpu/opencl/oop/sampler.py +83 -0
- pygpgpu/opencl/oop/sampler.pyi +34 -0
- pygpgpu/opencl/oop/svm_buffer.py +121 -0
- pygpgpu/py.typed +0 -0
- pygpgpu/utils.py +362 -0
- pygpgpu/vec_types/__init__.py +51 -0
- pygpgpu/vec_types/char16.py +28 -0
- pygpgpu/vec_types/char16.pyi +192 -0
- pygpgpu/vec_types/char2.py +14 -0
- pygpgpu/vec_types/char2.pyi +320 -0
- pygpgpu/vec_types/char4.py +16 -0
- pygpgpu/vec_types/char4.pyi +3652 -0
- pygpgpu/vec_types/char8.py +20 -0
- pygpgpu/vec_types/char8.pyi +108 -0
- pygpgpu/vec_types/double16.py +28 -0
- pygpgpu/vec_types/double16.pyi +192 -0
- pygpgpu/vec_types/double2.py +14 -0
- pygpgpu/vec_types/double2.pyi +320 -0
- pygpgpu/vec_types/double4.py +16 -0
- pygpgpu/vec_types/double4.pyi +3652 -0
- pygpgpu/vec_types/double8.py +20 -0
- pygpgpu/vec_types/double8.pyi +108 -0
- pygpgpu/vec_types/float16.py +28 -0
- pygpgpu/vec_types/float16.pyi +192 -0
- pygpgpu/vec_types/float2.py +15 -0
- pygpgpu/vec_types/float2.pyi +320 -0
- pygpgpu/vec_types/float4.py +16 -0
- pygpgpu/vec_types/float4.pyi +3652 -0
- pygpgpu/vec_types/float8.py +20 -0
- pygpgpu/vec_types/float8.pyi +108 -0
- pygpgpu/vec_types/funcs.py +316 -0
- pygpgpu/vec_types/genVec.py +387 -0
- pygpgpu/vec_types/genVec16.py +18 -0
- pygpgpu/vec_types/genVec16.pyi.in +13 -0
- pygpgpu/vec_types/genVec2.py +13 -0
- pygpgpu/vec_types/genVec2.pyi.in +15 -0
- pygpgpu/vec_types/genVec3.py +13 -0
- pygpgpu/vec_types/genVec3.pyi.in +16 -0
- pygpgpu/vec_types/genVec4.py +13 -0
- pygpgpu/vec_types/genVec4.pyi.in +17 -0
- pygpgpu/vec_types/genVec8.py +14 -0
- pygpgpu/vec_types/genVec8.pyi.in +13 -0
- pygpgpu/vec_types/helper.py +167 -0
- pygpgpu/vec_types/int16.py +28 -0
- pygpgpu/vec_types/int16.pyi +192 -0
- pygpgpu/vec_types/int2.py +14 -0
- pygpgpu/vec_types/int2.pyi +320 -0
- pygpgpu/vec_types/int4.py +16 -0
- pygpgpu/vec_types/int4.pyi +3652 -0
- pygpgpu/vec_types/int8.py +20 -0
- pygpgpu/vec_types/int8.pyi +108 -0
- pygpgpu/vec_types/short16.py +28 -0
- pygpgpu/vec_types/short16.pyi +192 -0
- pygpgpu/vec_types/short2.py +14 -0
- pygpgpu/vec_types/short2.pyi +320 -0
- pygpgpu/vec_types/short4.py +16 -0
- pygpgpu/vec_types/short4.pyi +3652 -0
- pygpgpu/vec_types/short8.py +20 -0
- pygpgpu/vec_types/short8.pyi +108 -0
- pygpgpu/vec_types/uchar16.py +28 -0
- pygpgpu/vec_types/uchar16.pyi +192 -0
- pygpgpu/vec_types/uchar2.py +14 -0
- pygpgpu/vec_types/uchar2.pyi +320 -0
- pygpgpu/vec_types/uchar4.py +16 -0
- pygpgpu/vec_types/uchar4.pyi +3652 -0
- pygpgpu/vec_types/uchar8.py +20 -0
- pygpgpu/vec_types/uchar8.pyi +108 -0
- pygpgpu/vec_types/uint16.py +28 -0
- pygpgpu/vec_types/uint16.pyi +192 -0
- pygpgpu/vec_types/uint2.py +14 -0
- pygpgpu/vec_types/uint2.pyi +320 -0
- pygpgpu/vec_types/uint4.py +16 -0
- pygpgpu/vec_types/uint4.pyi +3652 -0
- pygpgpu/vec_types/uint8.py +20 -0
- pygpgpu/vec_types/uint8.pyi +108 -0
- pygpgpu/vec_types/ushort16.py +28 -0
- pygpgpu/vec_types/ushort16.pyi +192 -0
- pygpgpu/vec_types/ushort2.py +14 -0
- pygpgpu/vec_types/ushort2.pyi +320 -0
- pygpgpu/vec_types/ushort4.py +16 -0
- pygpgpu/vec_types/ushort4.pyi +3652 -0
- pygpgpu/vec_types/ushort8.py +20 -0
- pygpgpu/vec_types/ushort8.pyi +108 -0
- pygpgpu-0.1.0.dist-info/METADATA +425 -0
- pygpgpu-0.1.0.dist-info/RECORD +283 -0
- pygpgpu-0.1.0.dist-info/WHEEL +5 -0
- pygpgpu-0.1.0.dist-info/licenses/LICENSE +21 -0
- pygpgpu-0.1.0.dist-info/top_level.txt +1 -0
pygpgpu/__init__.py
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""PyGPGPU: decorate a Python function and it runs on the GPU (OpenCL / CUDA / HIP).
|
|
2
|
+
|
|
3
|
+
The top level aggregates the commonly used public API so you do not have to
|
|
4
|
+
remember subpackage names::
|
|
5
|
+
|
|
6
|
+
from pygpgpu import kernel, gpu, float4 # @kernel / device builtins / vector types
|
|
7
|
+
from pygpgpu import available_devices, get_device
|
|
8
|
+
from pygpgpu import climport, cuimport, hipimport # import hooks for handwritten .cl/.cu/.hip files
|
|
9
|
+
|
|
10
|
+
Subpackage paths (pygpgpu.kernel / pygpgpu.vec_types / pygpgpu.opencl / ...)
|
|
11
|
+
still work. Note that top-level `pygpgpu.kernel` refers to the @kernel
|
|
12
|
+
decorator (same name as the subpackage; the top level exports the decorator),
|
|
13
|
+
so to use things from the submodules write `from pygpgpu.kernel import ...`.
|
|
14
|
+
"""
|
|
15
|
+
import importlib
|
|
16
|
+
from typing import Any, List
|
|
17
|
+
|
|
18
|
+
# pygf owns the single process-wide numpy.array monkey-patch. Importing it
|
|
19
|
+
# applies that patch (patch_nparray), which teaches numpy.array to read a
|
|
20
|
+
# host vector container as its components -- including the structured dtype
|
|
21
|
+
# path the vector-typed buffers below depend on. PyGPGPU no longer ships its
|
|
22
|
+
# own copy of the patch; this is a deliberate unification.
|
|
23
|
+
import pygf # noqa: F401 (applies the numpy.array patch on import)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# ---------- Top-level exports: public API of kernel ----------
|
|
27
|
+
# kernel subpackage's __all__ copied as-is (top-level kernel is the @kernel decorator)
|
|
28
|
+
|
|
29
|
+
from .kernel import (
|
|
30
|
+
DEFAULT_BACKEND_ORDER,
|
|
31
|
+
PyKernel,
|
|
32
|
+
PyKernelSyntaxError,
|
|
33
|
+
available_devices,
|
|
34
|
+
get_device,
|
|
35
|
+
gpu,
|
|
36
|
+
kernel,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# ---------- Top-level exports: public API of vec_types ----------
|
|
40
|
+
|
|
41
|
+
from .vec_types import (
|
|
42
|
+
char2, char4, char8, char16,
|
|
43
|
+
uchar2, uchar4, uchar8, uchar16,
|
|
44
|
+
short2, short4, short8, short16,
|
|
45
|
+
ushort2, ushort4, ushort8, ushort16,
|
|
46
|
+
int2, int4, int8, int16,
|
|
47
|
+
uint2, uint4, uint8, uint16,
|
|
48
|
+
float2, float4, float8, float16,
|
|
49
|
+
double2, double4, double8, double16,
|
|
50
|
+
genVec, genVec2, genVec3, genVec4, genVec8, genVec16,
|
|
51
|
+
)
|
|
52
|
+
from .vec_types import funcs # dual-purpose function library: runs on the host, translates to device builtins inside @kernel
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# ---------- Top-level exports: import hooks for handwritten kernel files ----------
|
|
56
|
+
|
|
57
|
+
class _LazyBackendHook:
|
|
58
|
+
"""Lazy proxy for a backend import hook.
|
|
59
|
+
|
|
60
|
+
Backend packages initialize their runtime at import time (nvcuda/amdhip64/
|
|
61
|
+
OpenCL) and raise immediately when the runtime is missing; this defers
|
|
62
|
+
loading the backend package until a hook method is actually called, so
|
|
63
|
+
`from pygpgpu import climport, cuimport, hipimport` works on any machine
|
|
64
|
+
and only the backend you use requires its runtime.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
def __init__(self, module_name:str, attr_name:str):
|
|
68
|
+
self._module_name:str = module_name
|
|
69
|
+
self._attr_name:str = attr_name
|
|
70
|
+
self._target:Any = None
|
|
71
|
+
|
|
72
|
+
def _resolve(self)->Any:
|
|
73
|
+
if self._target is None:
|
|
74
|
+
module = importlib.import_module(self._module_name, __name__)
|
|
75
|
+
self._target = getattr(module, self._attr_name)
|
|
76
|
+
return self._target
|
|
77
|
+
|
|
78
|
+
def __getattr__(self, name:str):
|
|
79
|
+
if name.startswith("__") and name.endswith("__"):
|
|
80
|
+
raise AttributeError(name)
|
|
81
|
+
return getattr(self._resolve(), name)
|
|
82
|
+
|
|
83
|
+
def __repr__(self)->str:
|
|
84
|
+
return f"<lazy hook {self._module_name}.{self._attr_name}>"
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
climport = _LazyBackendHook(".opencl.climport", "climport")
|
|
88
|
+
cuimport = _LazyBackendHook(".cuda.cuimport", "cuimport")
|
|
89
|
+
hipimport = _LazyBackendHook(".hip.hipimport", "hipimport")
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
__all__ = [
|
|
93
|
+
# kernel
|
|
94
|
+
"kernel", "gpu", "PyKernel", "PyKernelSyntaxError", "DEFAULT_BACKEND_ORDER",
|
|
95
|
+
"available_devices", "get_device",
|
|
96
|
+
# vec_types
|
|
97
|
+
"funcs",
|
|
98
|
+
"char2", "char4", "char8", "char16",
|
|
99
|
+
"uchar2", "uchar4", "uchar8", "uchar16",
|
|
100
|
+
"short2", "short4", "short8", "short16",
|
|
101
|
+
"ushort2", "ushort4", "ushort8", "ushort16",
|
|
102
|
+
"int2", "int4", "int8", "int16",
|
|
103
|
+
"uint2", "uint4", "uint8", "uint16",
|
|
104
|
+
"float2", "float4", "float8", "float16",
|
|
105
|
+
"double2", "double4", "double8", "double16",
|
|
106
|
+
"genVec", "genVec2", "genVec3", "genVec4", "genVec8", "genVec16",
|
|
107
|
+
# import hooks for handwritten kernel files
|
|
108
|
+
"climport", "cuimport", "hipimport",
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def __dir__()->List[str]:
|
|
113
|
+
return sorted(set(globals()) | set(__all__))
|
pygpgpu/constants.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING, Dict, Union, Any
|
|
3
|
+
from ctypes import c_uint, sizeof
|
|
4
|
+
import enum
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from ctypes import Array, _Pointer, c_void_p
|
|
8
|
+
|
|
9
|
+
# A host-side pointer as the ctypes layers use it: an explicit c_void_p, a raw address, a
|
|
10
|
+
# bytes-like buffer, or a ctypes Array/_Pointer. Declared once so the three backend stacks
|
|
11
|
+
# agree (Buffers construct such values in several places).
|
|
12
|
+
# The names after "from __future__ import annotations" are strings, so nothing here is
|
|
13
|
+
# evaluated at runtime -- ctypes.Array/_Pointer are not subscriptable.
|
|
14
|
+
HostPointer = Union["c_void_p", int, bytes, bytearray, "Array[Any]", "_Pointer[Any]", None]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Constant:
|
|
18
|
+
|
|
19
|
+
__instances:Dict[Union[str, int], Constant] = {}
|
|
20
|
+
|
|
21
|
+
def __init__(self, name:str, value:Any):
|
|
22
|
+
self.__name:str = name
|
|
23
|
+
Constant.__instances[name] = self
|
|
24
|
+
|
|
25
|
+
@property
|
|
26
|
+
def name(self)->str:
|
|
27
|
+
return self.__name
|
|
28
|
+
|
|
29
|
+
@staticmethod
|
|
30
|
+
def get(key:int)->Constant:
|
|
31
|
+
return Constant.__instances[key]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class IntConstant(int, Constant):
|
|
35
|
+
|
|
36
|
+
def __new__(cls, name:str, value:int):
|
|
37
|
+
instance = int.__new__(cls, value)
|
|
38
|
+
return instance
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def value(self)->int:
|
|
42
|
+
return int(self)
|
|
43
|
+
|
|
44
|
+
def __str__(self)->str:
|
|
45
|
+
return f"{self.name}({int.__str__(self)})"
|
|
46
|
+
|
|
47
|
+
def __repr__(self)->str:
|
|
48
|
+
return str(self)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class FloatConstant(float, Constant):
|
|
52
|
+
|
|
53
|
+
def __new__(cls, name:str, value:float):
|
|
54
|
+
instance = float.__new__(cls, value)
|
|
55
|
+
return instance
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def value(self)->float:
|
|
59
|
+
return float(self)
|
|
60
|
+
|
|
61
|
+
def __str__(self)->str:
|
|
62
|
+
return f"{self.name}({float.__str__(self)})"
|
|
63
|
+
|
|
64
|
+
def __repr__(self)->str:
|
|
65
|
+
return str(self)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class IntEnum(enum.IntEnum):
|
|
69
|
+
|
|
70
|
+
def __str__(self)->str:
|
|
71
|
+
return f"{self.name}({self.value})"
|
|
72
|
+
|
|
73
|
+
def __repr__(self)->str:
|
|
74
|
+
return str(self)
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def dtype(cls):
|
|
78
|
+
return c_uint
|
|
79
|
+
|
|
80
|
+
@classmethod
|
|
81
|
+
def size(cls):
|
|
82
|
+
return sizeof(cls.dtype())
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class IntFlag(enum.IntFlag):
|
|
86
|
+
|
|
87
|
+
def __str__(self)->str:
|
|
88
|
+
if len(list(self)) < 2:
|
|
89
|
+
return f"{self.name}({self.value})"
|
|
90
|
+
else:
|
|
91
|
+
return enum.Flag.__str__(self)
|
|
92
|
+
|
|
93
|
+
def __repr__(self)->str:
|
|
94
|
+
return str(self)
|
|
95
|
+
|
|
96
|
+
@classmethod
|
|
97
|
+
def dtype(cls):
|
|
98
|
+
return c_uint
|
|
99
|
+
|
|
100
|
+
@classmethod
|
|
101
|
+
def size(cls):
|
|
102
|
+
return sizeof(cls.dtype())
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class KernelFlags(IntFlag):
|
|
106
|
+
Readed = (1 << 0)
|
|
107
|
+
Writed = (1 << 1)
|