{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2608-24067","title":"A Feature-Major Codebook for Memory-Efficient Sparse-Binary Self-Organizing Maps: Scaling a MEDLINE Atlas to 1.05 Million Neurons on a Single Consumer GPU","arxiv_id":"2608.24067","date":"2026-08-25","proceeding":null,"authors":["Andrew James Amos"],"abstract":"A self-organising map turns a large corpus into a browsable two-dimensional atlas, but building one at MEDLINE scale has been impractical: the best-matching-unit (BMU) search that dominates training is bound by the bandwidth needed to read the codebook every epoch. I show that this bottleneck is largely an artefact of codebook layout. Storing it feature-major with each feature's weights contiguous, W[v.M+i], recasts the search as a tiled sparse-dense product in which every loaded weight column is reused across a tile of samples. Varying only the layout, with implementation, precision and update rule held fixed, accelerates the BMU search by 4.5-8.5x. Because an exact-argmin BMU is invariant to how the codebook is stored, this gain costs nothing: held-out quantisation error agrees with a cuSPARSE baseline to within 0.5% at every map size. Against that baseline the advantage is a crossover rather than a constant: cuSPARSE.SOM is faster at small maps, SparseBin.SOM is 1.5x faster at 128x128 and 2.6x at 256x256, and at 512x512 it is the only one that runs at all on 24 GB. Paired with a radius-independent box-blur update and a convergence-based stopping rule, it trains a converged map over 29.9 million MEDLINE articles in about 72 s at 64x64 on one 24 GB GPU, and accommodates 262,144 neurons (512x512 edges) where every alternative algorithm I tested exceeds memory constraints. On a 141 GB H200 it reaches 1,048,576 neurons (1024x1024 edges) - to my knowledge the largest self-organising map yet reported. Held-out error follows a smooth power law with no elbow across three decades of map size, so the limit on resolution is compute rather than any breakpoint in the data. At matched work the design is ~82x faster than MedSOM, the CUDA implementation behind our earlier MEDLINE atlases and, at 128x128, 621x faster than the best available multicore-CPU library.","url_abs":"https://arxiv.org/abs/2608.24067","url_pdf":"https://arxiv.org/pdf/2608.24067","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2608.24067","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2608.24067"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/mongrolwarrior/sparsesom-roofline-addendum","reach":null},{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/mongrolwarrior/sparsesom-paper1","reach":null}],"summary":{"ran":5,"unverified":6},"by_repo_kind":{"found_in_text":{"samples":11,"ran":5,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"5d6e345c4ee5f54e","entry":"build_provenance","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/provenance.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/provenance.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5d6e345c4ee5f54e"}},{"code_sha256_prefix":"e6f4544f4d434209","entry":"load","repo":"mongrolwarrior/sparsesom-roofline-addendum","repo_kind":"found_in_text","path":"aggregate2.py","file_url":"https://github.com/mongrolwarrior/sparsesom-roofline-addendum/blob/HEAD/aggregate2.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e6f4544f4d434209"}},{"code_sha256_prefix":"ee1ae50202292a50","entry":"parse_sparsesom_done","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/parsers.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/parsers.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ee1ae50202292a50"}},{"code_sha256_prefix":"7b16c59a7518bdd5","entry":"sha256_file","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/fetch_data.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/fetch_data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7b16c59a7518bdd5"}},{"code_sha256_prefix":"9ed2c9dc37848cb2","entry":"tiles_per_epoch","repo":"mongrolwarrior/sparsesom-roofline-addendum","repo_kind":"found_in_text","path":"aggregate2.py","file_url":"https://github.com/mongrolwarrior/sparsesom-roofline-addendum/blob/HEAD/aggregate2.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9ed2c9dc37848cb2"}},{"code_sha256_prefix":"6d08eef61ed652a2","entry":"config_hash","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/config.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/config.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6d08eef61ed652a2"}},{"code_sha256_prefix":"cd5839913a33398d","entry":"load_experiment","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/config.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/config.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cd5839913a33398d"}},{"code_sha256_prefix":"2dc721ebdb521add","entry":"parse_sparsesom_epoch","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/parsers.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/parsers.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2dc721ebdb521add"}},{"code_sha256_prefix":"4ab494984150152a","entry":"parse_sparsesom_metrics","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/parsers.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/parsers.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4ab494984150152a"}},{"code_sha256_prefix":"ddbf04f49dd7f3b6","entry":"resolve","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/config.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/config.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ddbf04f49dd7f3b6"}},{"code_sha256_prefix":"f5a7bc3b3f0e946f","entry":"run","repo":"mongrolwarrior/sparsesom-paper1","repo_kind":"found_in_text","path":"pipeline/profile_outline.py","file_url":"https://github.com/mongrolwarrior/sparsesom-paper1/blob/HEAD/pipeline/profile_outline.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f5a7bc3b3f0e946f"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":{"kind":"leaderboard_placements","source":"Syntology's leaderboard-shaped extractor over the paper's own arXiv-HTML tables: a model pointed at a cell, the number was read from that cell and checked against the board's metric, dataset, split and scale, and an independent check accepted the entry; not reviewed by the paper's authors or the archive's editors","extractor_model":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","verifier_model":null,"prompt_sha":"fa63d4bb9d755694","coverage":{"sentence":"Syntology has checked 6,264 of the 9,581 papers on this site that are newer than the archive; results from the others appear after they are checked.","papers_newer_than_archive":9581,"papers_checked":6264},"entries":[],"not_placed":{"boards":0,"rejected_by_independent_check":0,"refused_by_a_rule":0,"check_did_not_answer":0,"proposed_without_a_cell":0,"declined_by_site":0}}}