MCPcopy Index your code
hub / github.com/tinygrad/tinygrad / PtrDType

Class PtrDType

tinygrad/dtype.py:103–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

101
102@dataclass(frozen=True, eq=False)
103class PtrDType(DType):
104 _base: DType
105 addrspace: AddrSpace
106 v: int
107 size: int = -1 # -1 is unlimited size
108 @property
109 def base(self): return self._base
110 @functools.cache # pylint: disable=method-cache-max-size-none
111 def vec(self, sz:int) -> DType:
112 assert self.v == 1, f"can't vectorize ptr {self} with size {sz}"
113 if sz == 1: return self # sz=1 is a scalar
114 if isinstance(self, ImageDType):
115 return ImageDType(self.priority, self.bitsize, self.name, self.fmt, self.count, self, self._base, self.addrspace, sz, self.size, self.shape)
116 return type(self)(self.priority, self.bitsize, self.name, self.fmt, self.count, self, self._base, self.addrspace, sz, self.size)
117 def ptr(self, size=-1, addrspace=AddrSpace.GLOBAL) -> PtrDType: raise RuntimeError("can't make a pointer from a pointer")
118 def nbytes(self) -> int:
119 if self.size == -1: raise RuntimeError("can't get nbytes of a pointer with unlimited size")
120 return self.size*self.itemsize
121 @property
122 def vcount(self): return self.v
123 def __repr__(self):
124 return f"{self.base.__repr__()}.ptr({self.size}{', '+str(self.addrspace) if self.addrspace != AddrSpace.GLOBAL else ''})" + \
125 (f'.vec({self.v})' if self.v != 1 else '')
126
127@dataclass(frozen=True, eq=False)
128class ImageDType(PtrDType):

Callers 1

ptrMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…