Skip to content

Wilcoxon rank-sum addition to rank_genes_groups#487

Closed
EriJFle wants to merge 6 commits intoscverse:mainfrom
EriJFle:wilcoxon-feature
Closed

Wilcoxon rank-sum addition to rank_genes_groups#487
EriJFle wants to merge 6 commits intoscverse:mainfrom
EriJFle:wilcoxon-feature

Conversation

@EriJFle
Copy link
Contributor

@EriJFle EriJFle commented Oct 29, 2025

Hi,

This work introduces a CuPy-based GPU implementation of the Wilcoxon rank-sum test for rank_genes_groups().

Key changes

GPU acceleration: Rank computation, group rank sums, z-scores, and two-sided p-values are computed on the GPU (CuPy + cupyx.scipy.special.ndtr).

Vectorized group operations: Replace per-group loops with a single matrix multiply group_matrix.T @ ranks to obtain all group rank sums at once.

GPU-native rank computation: Mid-ranks and tie-correction implemented via CuPy primitives (cp.argsort, cp.cumsum) to mirror Scanpy semantics.

Dynamic GPU memory management: _choose_chunk_size() queries cp.cuda.runtime.memGetInfo() to size gene chunks adaptively (avoids OOM and maximizes throughput).

Testing:
Added tests/test_rank_genes_groups_wilcoxon.py to ensure same output as Scanpy’s wilcoxon rank_genes_groups.

@asmlgkj
Copy link

asmlgkj commented Nov 14, 2025

when will this function merged, thanks a lot, very needed

@asmlgkj
Copy link

asmlgkj commented Jan 20, 2026

does it mean it fully support the Wilcoxon rank-sum on gpu?
thanks a lot @EriJFle
how I can update this

@Intron7
Copy link
Member

Intron7 commented Jan 20, 2026

@EriJFle great work on this. #535 is the PR that will be merged. It's based on your branch so your initial contributions will still be in the codebase. I also added your name to the release note. I made this even faster and more memory efficient on CPU and GPU. I also the option to define a reference.

@Intron7 Intron7 closed this Jan 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants