1313 算子(reshape/matmul/…)产出并按 [dims]dtype 存回 kvspace。
1414 · tensor data 零拷贝:读走权威 kvspaceDecodeHead,在 kvspace-c SHM 地址上建 ndarray 视图;
1515 写走权威 N 维 kvspaceTlvEncode,dims 直接落盘。
16- · 遵照读写码:从 kvlang_rwirextParams 取 opcode 与读/写操作数名;读参优先按路径零拷贝 view,
17- 否则回退 kvlang_rwirextResolveRead ;写参经 kvlang_rwirextResolveWrite 解析为 KV 路径。
16+ · 遵照读写码:从 kvlangRwirextParams 取 opcode 与读/写操作数名;读参优先按路径零拷贝 view,
17+ 否则回退 kvlangRwirextResolveRead ;写参经 kvlangRwirextResolveWrite 解析为 KV 路径。
1818 · numpy.print 走本进程自身的 stdout(不经 kvlang println)。
1919"""
2020
@@ -90,16 +90,16 @@ def _bind():
9090 ctypes .c_char_p , ctypes .c_uint32 ]
9191 _ks .kvspaceDel .restype = ctypes .c_int
9292 # rwirext ABI(kvspace 不提供的 runtime 语义):句柄传扩展自连的 kvspace
93- for fn in ("kvlang_rwirextParams " , "kvlang_rwirextResolveRead " , "kvlang_rwirextResolveReadPath " ,
94- "kvlang_rwirextResolveWrite " , "kvlang_rwirextNextPc " ):
93+ for fn in ("kvlangRwirextParams " , "kvlangRwirextResolveRead " , "kvlangRwirextResolveReadPath " ,
94+ "kvlangRwirextResolveWrite " , "kvlangRwirextNextPc " ):
9595 getattr (_rt , fn ).restype = ctypes .c_void_p
96- _rt .kvlang_rwirextRegister .restype = ctypes .c_int
97- _rt .kvlang_rwirextRegister .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int32 , ctypes .c_int32 , ctypes .c_char_p ]
98- _rt .kvlang_rwirextParams .argtypes = [ctypes .c_void_p , ctypes .c_char_p ]
99- _rt .kvlang_rwirextResolveRead .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int ]
100- _rt .kvlang_rwirextResolveReadPath .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int ]
101- _rt .kvlang_rwirextResolveWrite .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int ]
102- _rt .kvlang_rwirextNextPc .argtypes = [ctypes .c_char_p ]
96+ _rt .kvlangRwirextRegister .restype = ctypes .c_int
97+ _rt .kvlangRwirextRegister .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int32 , ctypes .c_int32 , ctypes .c_char_p ]
98+ _rt .kvlangRwirextParams .argtypes = [ctypes .c_void_p , ctypes .c_char_p ]
99+ _rt .kvlangRwirextResolveRead .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int ]
100+ _rt .kvlangRwirextResolveReadPath .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int ]
101+ _rt .kvlangRwirextResolveWrite .argtypes = [ctypes .c_void_p , ctypes .c_char_p , ctypes .c_int ]
102+ _rt .kvlangRwirextNextPc .argtypes = [ctypes .c_char_p ]
103103 _lay .kvlangLayoutFile .restype = ctypes .c_int
104104 _lay .kvlangLayoutFile .argtypes = [ctypes .c_char_p , ctypes .c_char_p , ctypes .c_char_p ,
105105 ctypes .c_uint32 , ctypes .c_char_p , ctypes .c_uint32 ]
@@ -279,32 +279,32 @@ def alloc(self, key, arr):
279279
280280 # ── 读参:解析为帧槽路径后零拷贝 view;内联字面量回退 resolve_read ──
281281 def read_arg (self , pc , i ):
282- path = _s (_rt .kvlang_rwirextResolveReadPath (self .kv , pc .encode (), i ))
282+ path = _s (_rt .kvlangRwirextResolveReadPath (self .kv , pc .encode (), i ))
283283 if path :
284284 v = self .view (path )
285285 if v is not None :
286286 return v
287- return _parse (_s (_rt .kvlang_rwirextResolveRead (self .kv , pc .encode (), i )))
287+ return _parse (_s (_rt .kvlangRwirextResolveRead (self .kv , pc .encode (), i )))
288288
289289 # ── 注册五大类 ─────────────────────────────────────────────────
290290 def register (self ):
291291 for op , (nr , _ ) in OPS .items ():
292- _rt .kvlang_rwirextRegister (self .kv , op .encode (), nr , 1 , ("\n " .join (["any" ] * (nr + 1 ))).encode ())
293- _rt .kvlang_rwirextRegister (self .kv , b"numpy.print" , 1 , 0 , b"any..." )
292+ _rt .kvlangRwirextRegister (self .kv , op .encode (), nr , 1 , ("\n " .join (["any" ] * (nr + 1 ))).encode ())
293+ _rt .kvlangRwirextRegister (self .kv , b"numpy.print" , 1 , 0 , b"any..." )
294294
295295 def _handle (self , op , nr , fn , pc ):
296- params = _s (_rt .kvlang_rwirextParams (self .kv , pc .encode ())).split ("\n " )
296+ params = _s (_rt .kvlangRwirextParams (self .kv , pc .encode ())).split ("\n " )
297297 if op == "numpy.print" :
298298 parts = []
299299 for i in range (len (params ) - 1 ):
300- path = _s (_rt .kvlang_rwirextResolveReadPath (self .kv , pc .encode (), i ))
300+ path = _s (_rt .kvlangRwirextResolveReadPath (self .kv , pc .encode (), i ))
301301 v = self .view (path ) if path else None
302302 parts .append (_fmt (v ) if v is not None
303- else _s (_rt .kvlang_rwirextResolveRead (self .kv , pc .encode (), i )))
303+ else _s (_rt .kvlangRwirextResolveRead (self .kv , pc .encode (), i )))
304304 print (" " .join (parts ), flush = True )
305305 else :
306306 args = [self .read_arg (pc , i ) for i in range (nr )]
307- self .alloc (_s (_rt .kvlang_rwirextResolveWrite (self .kv , pc .encode (), 0 )), np .asarray (fn (args )))
307+ self .alloc (_s (_rt .kvlangRwirextResolveWrite (self .kv , pc .encode (), 0 )), np .asarray (fn (args )))
308308
309309 def serve (self , stop ):
310310 table = {** OPS , "numpy.print" : (1 , None )}
@@ -321,7 +321,7 @@ def serve(self, stop):
321321 self ._handle (op , nr , fn , pc )
322322 except Exception as e : # 计算失败也要放行,避免 run 阻塞超时
323323 print (f"[numpy] { op } @ { pc } : { e } " , file = sys .stderr , flush = True )
324- nxt = _s (_rt .kvlang_rwirextNextPc (pc .encode ()))
324+ nxt = _s (_rt .kvlangRwirextNextPc (pc .encode ()))
325325 self .kv_set (f"/vthread/{ vid } /‥pc" , nxt )
326326 self .kv_set (f"{ base } /.done<{ vid } >" , pid )
327327 self .kv_del (todo )
0 commit comments