chaobrain/brainevent: Version 0.0.6
Fuente:
Zenodo
Enregistré dans:
| Auteurs principaux: | , , , |
|---|---|
| Format: | Recurso digital |
| Publié: |
Zenodo
2026
|
| Accès en ligne: | |
| Tags: |
Ajouter un tag
Pas de tags, Soyez le premier à ajouter un tag!
|
| _version_ | 1866901688483315712 |
|---|---|
| author | Chaoming Wang Sichao He Minghao Wang xinzhu-L |
| author_facet | Chaoming Wang Sichao He Minghao Wang xinzhu-L |
| contents | <p>This release is our most rigorously validated to date, having passed all CPU and GPU test suites. Performance optimizations are not yet included and are planned for version 0.0.7.</p> <h3>Added</h3> <ul> <li><strong><code>DataRepresentation</code> base class</strong> with buffer registry for mutable named state on sparse matrices (<code>register_buffer</code>, <code>set_buffer</code>, <code>buffers</code>), plus <code>JITCMatrix</code> with full operator overloading (<code>__mul__</code>, <code>__add__</code>, <code>apply</code>, <code>apply2</code>, etc.) (#81)</li> <li><strong>CSR/CSC row slicing</strong> via <code>csr_slice_rows</code> with full autodiff support (JVP, transpose, batching) and three backends (numba, warp, pallas); enables <code>csr[row_indices]</code> and <code>csc[col_indices]</code> indexing (#80)</li> <li><strong>SDDMM helpers</strong> (<code>sddmm_indices</code>, <code>sddmm_coo_indices</code>, <code>sddmm_bcoo</code>) for Sampled Dense-Dense Matrix Multiplication built on <code>jax.experimental.sparse</code> (#75)</li> <li><strong>Primitive registry</strong> (<code>get_registry</code>, <code>get_primitives_by_tags</code>, <code>get_all_primitive_names</code>) with automatic registration of all <code>XLACustomKernel</code> instances (#65)</li> <li><strong>User backend configuration</strong> (<code>brainevent/config.py</code>) with JSON persistence, per-primitive default backend selection, Numba threading config, and LFSR algorithm selection (#65, #74)</li> <li><strong>CLI tool</strong> (<code>brainevent benchmark-performance</code>) for automated benchmarking across backends with tabular output and automatic optimal-default persistence (#65)</li> <li><strong>Configurable LFSR RNG</strong> for both Numba (<code>_numba_random.py</code>) and Pallas (<code>_pallas_random.py</code>) with three algorithm families: LFSR88 (~2^88 period), LFSR113 (~2^113 period), LFSR128 (~2^128 period) (#74)</li> <li><strong>TPU backend support</strong> for CSR operations (#72)</li> <li><strong>Event representation classes</strong>: <code>IndexedBinary1d/2d</code>, <code>IndexedSpFloat1d/2d</code> for indexed subsets of events, with <code>binary_array_index()</code> extraction function</li> <li><strong>Fixed-connection matmul helpers</strong> (<code>binary_fcnmv/mm</code>, <code>fcnmv/mm</code>, <code>spfloat_fcnmv/mm</code>) and JITC matmul helpers for scalar/normal/uniform connectivity (#61)</li> <li><strong><code>namescope</code> JAX decorator</strong> for per-backend JIT compilation caching (#62)</li> <li><strong>Custom error types</strong>: <code>KernelNotAvailableError</code>, <code>KernelCompilationError</code>, <code>KernelFallbackExhaustedError</code>, <code>KernelExecutionError</code></li> <li>Tutorial on BinaryArray usage and optimization techniques (#64)</li> </ul> <h3>Changed</h3> <ul> <li><strong>Major codebase restructuring</strong>: flat modules reorganized into coherent subpackages (<code>_coo/</code>, <code>_csr/</code>, <code>_dense/</code>, <code>_fcn/</code>, <code>_jit_scalar/</code>, <code>_jit_normal/</code>, <code>_jit_uniform/</code>, <code>_event/</code>) (#59, #69)</li> <li><strong>Consistent function naming convention</strong> across all operations: <code>binary_*mv/mm</code>, <code>*mv/mm</code>, <code>spfloat_*mv/mm</code>, <code>update_*_on_binary_pre/post</code>, with <code>_p</code> suffix for raw primitives (#62)</li> <li><strong><code>EventArray</code> renamed to <code>BinaryArray</code></strong> across the entire codebase (backward-compatible alias retained)</li> <li><strong>JITC class renames</strong>: <code>JITCHomoR/C</code> → <code>JITCScalarR/C</code>; module renames <code>_jitc_homo</code> → <code>_jit_scalar</code>, <code>_jitc_normal</code> → <code>_jit_normal</code>, <code>_jitc_uniform</code> → <code>_jit_uniform</code></li> <li><strong>Pallas RNG class renames</strong>: <code>LFSR88RNG</code> → <code>PallasLFSR88RNG</code>, <code>LFSR113RNG</code> → <code>PallasLFSR113RNG</code>; new factory <code>PallasLFSRRNG(seed)</code></li> <li><strong>Plasticity function renames</strong>: <code>csr_on_pre</code> → <code>update_csr_on_binary_pre</code>, <code>coo_on_pre</code> → <code>update_coo_on_binary_pre</code>, etc. (backward-compatible aliases for CSR/dense variants)</li> <li><strong>Configuration system</strong>: replaced <code>_config.py</code> singleton with <code>config.py</code> module using JSON file persistence</li> <li><code>XLACustomKernel</code> enhanced with <code>def_tags()</code>, <code>def_benchmark_data()</code>, <code>benchmark()</code>, <code>available_backends()</code>, <code>set_default()</code>, and <code>KernelEntry</code> dataclass</li> <li><code>csrmv_yw2y</code> moved to its own module <code>_csr/yw2y.py</code> (#79)</li> <li>Unified sparse-float dense matmul operations across all formats (#77)</li> <li>Project description updated to "Enabling Event-driven Computation in CPU/GPU/TPU"</li> <li>Added Python 3.14 support; dropped Python 3.10 from classifiers</li> <li>Core dependency <code>jax>=0.5.0</code> now explicitly required</li> </ul> <h3>Fixed</h3> <ul> <li><strong>Pallas GPU <code>binary_densemm</code> kernel corruption</strong>: <code>pl.ds()</code> out-of-bounds reads when <code>block_dim > m</code> corrupted adjacent GPU memory; fixed with scalar <code>pl.program_id()</code> indexing and <code>jnp.where</code> instead of <code>jax.lax.cond</code> (#71)</li> <li><strong>Warp tile operation bug</strong>: cooperative tile ops (<code>tile_load</code>, <code>tile_store</code>, <code>tile_atomic_add</code>) produced diagonal-like output when launch dimensions < 32 threads; replaced with scalar loops in <code>_jit_normal/float.py</code> (#71)</li> <li><strong>Backend passthrough in AD rules</strong>: JVP/transpose/batching rules now correctly forward <code>backend=</code> parameter to <code>*_p_call()</code> functions, preventing silent use of wrong backend for tangent computation (#72)</li> <li>Fixed-connection matmul return values (#62)</li> <li>Bool-to-float conversion added in <code>binary_densemm_p_call</code> before passing to primitive (#71)</li> </ul> <h3>Removed</h3> <ul> <li><code>BlockCSR</code> class and <code>_block_csr</code> module</li> <li><code>BlockELL</code> class and <code>_block_ell</code> module</li> <li><code>BaseArray</code>, <code>BinaryArrayIndex</code>, <code>MaskedFloat</code>, <code>MaskedFloatIndex</code> classes (replaced by new event representations)</li> <li><code>GPUKernelChoice</code>, <code>pallas_kernel</code>, <code>warp_kernel</code> from <code>_op</code></li> <li><code>_primitives.py</code> module (replaced by <code>_registry.py</code>)</li> </ul> |
| format | Recurso digital |
| id | zenodo_https___doi_org_10_5281_zenodo_18642969 |
| institution | Zenodo |
| language | |
| publishDate | 2026 |
| publisher | Zenodo |
| record_format | zenodo |
| spellingShingle | chaobrain/brainevent: Version 0.0.6 Chaoming Wang Sichao He Minghao Wang xinzhu-L <p>This release is our most rigorously validated to date, having passed all CPU and GPU test suites. Performance optimizations are not yet included and are planned for version 0.0.7.</p> <h3>Added</h3> <ul> <li><strong><code>DataRepresentation</code> base class</strong> with buffer registry for mutable named state on sparse matrices (<code>register_buffer</code>, <code>set_buffer</code>, <code>buffers</code>), plus <code>JITCMatrix</code> with full operator overloading (<code>__mul__</code>, <code>__add__</code>, <code>apply</code>, <code>apply2</code>, etc.) (#81)</li> <li><strong>CSR/CSC row slicing</strong> via <code>csr_slice_rows</code> with full autodiff support (JVP, transpose, batching) and three backends (numba, warp, pallas); enables <code>csr[row_indices]</code> and <code>csc[col_indices]</code> indexing (#80)</li> <li><strong>SDDMM helpers</strong> (<code>sddmm_indices</code>, <code>sddmm_coo_indices</code>, <code>sddmm_bcoo</code>) for Sampled Dense-Dense Matrix Multiplication built on <code>jax.experimental.sparse</code> (#75)</li> <li><strong>Primitive registry</strong> (<code>get_registry</code>, <code>get_primitives_by_tags</code>, <code>get_all_primitive_names</code>) with automatic registration of all <code>XLACustomKernel</code> instances (#65)</li> <li><strong>User backend configuration</strong> (<code>brainevent/config.py</code>) with JSON persistence, per-primitive default backend selection, Numba threading config, and LFSR algorithm selection (#65, #74)</li> <li><strong>CLI tool</strong> (<code>brainevent benchmark-performance</code>) for automated benchmarking across backends with tabular output and automatic optimal-default persistence (#65)</li> <li><strong>Configurable LFSR RNG</strong> for both Numba (<code>_numba_random.py</code>) and Pallas (<code>_pallas_random.py</code>) with three algorithm families: LFSR88 (~2^88 period), LFSR113 (~2^113 period), LFSR128 (~2^128 period) (#74)</li> <li><strong>TPU backend support</strong> for CSR operations (#72)</li> <li><strong>Event representation classes</strong>: <code>IndexedBinary1d/2d</code>, <code>IndexedSpFloat1d/2d</code> for indexed subsets of events, with <code>binary_array_index()</code> extraction function</li> <li><strong>Fixed-connection matmul helpers</strong> (<code>binary_fcnmv/mm</code>, <code>fcnmv/mm</code>, <code>spfloat_fcnmv/mm</code>) and JITC matmul helpers for scalar/normal/uniform connectivity (#61)</li> <li><strong><code>namescope</code> JAX decorator</strong> for per-backend JIT compilation caching (#62)</li> <li><strong>Custom error types</strong>: <code>KernelNotAvailableError</code>, <code>KernelCompilationError</code>, <code>KernelFallbackExhaustedError</code>, <code>KernelExecutionError</code></li> <li>Tutorial on BinaryArray usage and optimization techniques (#64)</li> </ul> <h3>Changed</h3> <ul> <li><strong>Major codebase restructuring</strong>: flat modules reorganized into coherent subpackages (<code>_coo/</code>, <code>_csr/</code>, <code>_dense/</code>, <code>_fcn/</code>, <code>_jit_scalar/</code>, <code>_jit_normal/</code>, <code>_jit_uniform/</code>, <code>_event/</code>) (#59, #69)</li> <li><strong>Consistent function naming convention</strong> across all operations: <code>binary_*mv/mm</code>, <code>*mv/mm</code>, <code>spfloat_*mv/mm</code>, <code>update_*_on_binary_pre/post</code>, with <code>_p</code> suffix for raw primitives (#62)</li> <li><strong><code>EventArray</code> renamed to <code>BinaryArray</code></strong> across the entire codebase (backward-compatible alias retained)</li> <li><strong>JITC class renames</strong>: <code>JITCHomoR/C</code> → <code>JITCScalarR/C</code>; module renames <code>_jitc_homo</code> → <code>_jit_scalar</code>, <code>_jitc_normal</code> → <code>_jit_normal</code>, <code>_jitc_uniform</code> → <code>_jit_uniform</code></li> <li><strong>Pallas RNG class renames</strong>: <code>LFSR88RNG</code> → <code>PallasLFSR88RNG</code>, <code>LFSR113RNG</code> → <code>PallasLFSR113RNG</code>; new factory <code>PallasLFSRRNG(seed)</code></li> <li><strong>Plasticity function renames</strong>: <code>csr_on_pre</code> → <code>update_csr_on_binary_pre</code>, <code>coo_on_pre</code> → <code>update_coo_on_binary_pre</code>, etc. (backward-compatible aliases for CSR/dense variants)</li> <li><strong>Configuration system</strong>: replaced <code>_config.py</code> singleton with <code>config.py</code> module using JSON file persistence</li> <li><code>XLACustomKernel</code> enhanced with <code>def_tags()</code>, <code>def_benchmark_data()</code>, <code>benchmark()</code>, <code>available_backends()</code>, <code>set_default()</code>, and <code>KernelEntry</code> dataclass</li> <li><code>csrmv_yw2y</code> moved to its own module <code>_csr/yw2y.py</code> (#79)</li> <li>Unified sparse-float dense matmul operations across all formats (#77)</li> <li>Project description updated to "Enabling Event-driven Computation in CPU/GPU/TPU"</li> <li>Added Python 3.14 support; dropped Python 3.10 from classifiers</li> <li>Core dependency <code>jax>=0.5.0</code> now explicitly required</li> </ul> <h3>Fixed</h3> <ul> <li><strong>Pallas GPU <code>binary_densemm</code> kernel corruption</strong>: <code>pl.ds()</code> out-of-bounds reads when <code>block_dim > m</code> corrupted adjacent GPU memory; fixed with scalar <code>pl.program_id()</code> indexing and <code>jnp.where</code> instead of <code>jax.lax.cond</code> (#71)</li> <li><strong>Warp tile operation bug</strong>: cooperative tile ops (<code>tile_load</code>, <code>tile_store</code>, <code>tile_atomic_add</code>) produced diagonal-like output when launch dimensions < 32 threads; replaced with scalar loops in <code>_jit_normal/float.py</code> (#71)</li> <li><strong>Backend passthrough in AD rules</strong>: JVP/transpose/batching rules now correctly forward <code>backend=</code> parameter to <code>*_p_call()</code> functions, preventing silent use of wrong backend for tangent computation (#72)</li> <li>Fixed-connection matmul return values (#62)</li> <li>Bool-to-float conversion added in <code>binary_densemm_p_call</code> before passing to primitive (#71)</li> </ul> <h3>Removed</h3> <ul> <li><code>BlockCSR</code> class and <code>_block_csr</code> module</li> <li><code>BlockELL</code> class and <code>_block_ell</code> module</li> <li><code>BaseArray</code>, <code>BinaryArrayIndex</code>, <code>MaskedFloat</code>, <code>MaskedFloatIndex</code> classes (replaced by new event representations)</li> <li><code>GPUKernelChoice</code>, <code>pallas_kernel</code>, <code>warp_kernel</code> from <code>_op</code></li> <li><code>_primitives.py</code> module (replaced by <code>_registry.py</code>)</li> </ul> |
| title | chaobrain/brainevent: Version 0.0.6 |
| url | https://doi.org/10.5281/zenodo.18642969 |