From 7a0012aca97dc25159ce94a663125813667d6392 Mon Sep 17 00:00:00 2001 From: allenjin123 Date: Wed, 20 May 2026 01:34:06 -0400 Subject: [PATCH 1/2] repo: add .gitignore and untrack stale __pycache__ artifacts Add a standard Python .gitignore (__pycache__, *.pyc, egg-info, build/dist, common editor/OS files) and git rm --cached the .pyc files that were previously committed under scmp_kernels/. --- .gitignore | 18 ++++++++++++++++++ .../__pycache__/__init__.cpython-311.pyc | Bin 245 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 212 -> 0 bytes .../sc/__pycache__/__init__.cpython-311.pyc | Bin 808 -> 0 bytes .../sc/__pycache__/__init__.cpython-39.pyc | Bin 743 -> 0 bytes .../sc/__pycache__/constants.cpython-311.pyc | Bin 338 -> 0 bytes .../sc/__pycache__/kernels.cpython-311.pyc | Bin 118760 -> 0 bytes .../sc/__pycache__/matmul.cpython-311.pyc | Bin 7595 -> 0 bytes .../sc/__pycache__/matmul.cpython-39.pyc | Bin 5369 -> 0 bytes .../sc/__pycache__/rng.cpython-311.pyc | Bin 12658 -> 0 bytes .../sc/__pycache__/sng.cpython-311.pyc | Bin 11203 -> 0 bytes 11 files changed, 18 insertions(+) create mode 100644 .gitignore delete mode 100644 scmp_kernels/__pycache__/__init__.cpython-311.pyc delete mode 100644 scmp_kernels/__pycache__/__init__.cpython-39.pyc delete mode 100644 scmp_kernels/sc/__pycache__/__init__.cpython-311.pyc delete mode 100644 scmp_kernels/sc/__pycache__/__init__.cpython-39.pyc delete mode 100644 scmp_kernels/sc/__pycache__/constants.cpython-311.pyc delete mode 100644 scmp_kernels/sc/__pycache__/kernels.cpython-311.pyc delete mode 100644 scmp_kernels/sc/__pycache__/matmul.cpython-311.pyc delete mode 100644 scmp_kernels/sc/__pycache__/matmul.cpython-39.pyc delete mode 100644 scmp_kernels/sc/__pycache__/rng.cpython-311.pyc delete mode 100644 scmp_kernels/sc/__pycache__/sng.cpython-311.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a5e6ccd --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# Byte-compiled / cached Python +__pycache__/ +*.py[cod] +*$py.class + +# Distribution / packaging +build/ +dist/ +*.egg-info/ +*.egg + +# Editor / IDE +.vscode/ +.idea/ +*.swp + +# OS +.DS_Store diff --git a/scmp_kernels/__pycache__/__init__.cpython-311.pyc b/scmp_kernels/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index a11aab882638358f87d5c6658ab99827e20430e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmZ3^%ge<81d8#DS;j#6F^B^LOi;#W2_R!SLkdF*V-7{dwhIiPELIMN`}uMLx0)oXXNLm z>I216^RhDY^aG0Wvr>~wiuH?=a|`0LQ;YIabI>^P@tJvS@L9mD&s0;vx5k9m4 diff --git a/scmp_kernels/__pycache__/__init__.cpython-39.pyc b/scmp_kernels/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 5ba58bfdcd17010dd9d316e5d492b6cb6f123aed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212 zcmYe~<>g`k0>ya7EMp-37{oyaOhAqU5EqL9i4=wu#vF!R#wbQch7_iB#wex~=3oX* zmY0k`NlnIEoW;rUxrrsYr8z|)eSVtEx0s5P!R%Y?@$rc{Iq~r;8H!kea$w?@y?#c1 zZmK>|A~i27GfzLDC_gJTxujUXI61cka)1UYi3B%52u?^Kp`!Mbi`VteW*xltVteV&iMQYl zK)eGF(Id*06Sqjc^~7wFmP++nV~_pK_?vIEKX!IfM&qrB=HFw+{4l4WTv zoTxCMgWW-mjt4Z}x&cgJpo;`g5pBrI< zIu)yDOHtR9k^;QS5kiS@Ku;5)|D_zzVWGYt_!^}WTAgA}0Yu6OeTf5M@>O`2(l(xc2TaB43Gud-?j*>d# zWmRuPy5USXS4IWS$Mwm@*2~J~jmB5*HYIF%`*&oPohXWy@phCfS!?dG=;0ZAaD6Vf eSoHXeJ-R-ZJ=VSRJGsB?c5cOA`|ao2ALJhz901(_ diff --git a/scmp_kernels/sc/__pycache__/__init__.cpython-39.pyc b/scmp_kernels/sc/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index cdb2196617a9297f919bed14276b813ab0c853b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmZWn&5qMB5KhwW7Q*g)Ao49c;ufb0NMYem2IA%a1o@>pCjOlI%v?^4z-(Np4S&U4Kw2l*PYpkfjjX g>L^6f-)^MVnD`ph7^VP?VpQnp{$> zU!0s<5D#?`I!7Pwe7%CoUmP~M`6;D2sdh!6-~k0hu^f>2z|6?Vc!R<30)yWJexU}Q S8~h?bf}5{_0|bjWfJy+R)?;}9 diff --git a/scmp_kernels/sc/__pycache__/kernels.cpython-311.pyc b/scmp_kernels/sc/__pycache__/kernels.cpython-311.pyc deleted file mode 100644 index 3f27fe0c53cb1ea16284bf9518d8823efb947a5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118760 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 Ig|KD*Uji5?ga7~l diff --git a/scmp_kernels/sc/__pycache__/sng.cpython-311.pyc b/scmp_kernels/sc/__pycache__/sng.cpython-311.pyc deleted file mode 100644 index a3f9e5a26d2fd3404877df8a00216539a21ea292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11203 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 Date: Wed, 20 May 2026 01:34:17 -0400 Subject: [PATCH 2/2] sc/matmul: add halve_bipolar_stoc_len flag for uSystolic-style cycle halving When True and mode='bipolar', overrides any unset stoc_len / rng_levels to 2^(sc_prec-1). Bipolar magnitudes only carry sc_prec-1 bits of info (q_max = 2^(sc_prec-1) - 1), so halving the stream and RNG grid preserves the quantization resolution while approximately halving cycles, matching the wu-hpca2022 sign-magnitude optimization. Default False preserves legacy behavior. Forwards rng_levels through all five dispatch paths (per_tensor, per_row, per_row+chunk_d, per_row+3D, per_head). --- scmp_kernels/sc/matmul.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/scmp_kernels/sc/matmul.py b/scmp_kernels/sc/matmul.py index f624e4a..608dd31 100644 --- a/scmp_kernels/sc/matmul.py +++ b/scmp_kernels/sc/matmul.py @@ -45,6 +45,7 @@ def sc_matmul( group_b: int = 1, rng_levels: Optional[int] = None, config: Optional[dict] = None, + halve_bipolar_stoc_len: bool = False, ) -> torch.Tensor: """Stochastic-computing matmul ``a @ b.T``. @@ -83,6 +84,15 @@ def sc_matmul( specific integer to keep an int8 quant grid while varying ``stoc_len``. config: optional Sobol RNG/SNG config dict. Auto-built when ``None``. + halve_bipolar_stoc_len: enable the uSystolic / HUB sign-magnitude + cycle-halving optimization from wu-hpca2022. Bipolar magnitudes + only carry ``sc_prec - 1`` bits of information, so a stream and + RNG grid of size ``2 ** (sc_prec - 1)`` are sufficient. When + ``True`` and ``mode == "bipolar"``, any ``stoc_len`` / + ``rng_levels`` left at ``None`` are overridden to + ``2 ** (sc_prec - 1)`` (≈2× fewer cycles, same magnitude grid). + Has no effect when ``mode == "unipolar"``. Default ``False`` + preserves legacy behavior. Returns: Output tensor. 2D inputs → ``(N, M)`` float32. 3D inputs → ``(BH, N, M)`` @@ -104,6 +114,17 @@ def sc_matmul( f"sc_matmul: unknown mode '{mode}'. " f"Expected one of {_VALID_MODES}.") + # ---- uSystolic / HUB sign-magnitude cycle-halving (wu-hpca2022) ---------- + # Bipolar mode is already sign-magnitude with q_max = 2^(sc_prec-1) - 1, + # so the magnitude only spans 2^(sc_prec-1) levels. The default + # stoc_len = 2^sc_prec therefore wastes ~2× cycles for no resolution gain. + if halve_bipolar_stoc_len and mode == "bipolar": + halved = 2 ** (sc_prec - 1) + if stoc_len is None: + stoc_len = halved + if rng_levels is None: + rng_levels = halved + # ---- chunk_d compatibility gate ----------------------------------------- # Currently chunk_d is only implemented in the per-row + bipolar MLP # fast path. Other granularities and unipolar quantization will silently @@ -148,7 +169,7 @@ def sc_matmul( max_fp_a=a_max, min_fp_a=a_min, max_fp_b=b_max, min_fp_b=b_min, mode=mode, sc_prec=sc_prec, - stoc_len=stoc_len, config=config, + stoc_len=stoc_len, rng_levels=rng_levels, config=config, ) if granularity == "per_row":