Skip to content

Perf(test): reuse random data across container types in quantile test#8985

Open
aymuos15 wants to merge 2 commits into
Project-MONAI:devfrom
aymuos15:perf/quantile-reuse-data
Open

Perf(test): reuse random data across container types in quantile test#8985
aymuos15 wants to merge 2 commits into
Project-MONAI:devfrom
aymuos15:perf/quantile-reuse-data

Conversation

@aymuos15

@aymuos15 aymuos15 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Description

test_many_elements_quantile allocated a fresh np.random.randn(elements) array — up to 17M elements (~130 MB) — inside the innermost loop, so the same large array was regenerated once for every (container type, element count, quantile-arg type) combination. The random values are irrelevant to the test (assertions only check the return type and that CPU/GPU results agree), so the repeated allocation and RNG fill added runtime without adding coverage.

This makes for the data generation to once per element count and reuses it across the container and argument types.

     @skip_if_quick
     def test_many_elements_quantile(self):  # pytorch#64947
-        for p in TEST_NDARRAYS:
-            for elements in (1000, 17_000_000):
+        for elements in (1000, 17_000_000):
+            data = np.random.randn(elements)
+            for p in TEST_NDARRAYS:
+                x = p(data)
                 for t in [*TEST_NDARRAYS, list]:
-                    x = p(np.random.randn(elements))
                     q = percentile(x, t([10, 50]))

Performance

Wall-clock of pytest tests/transforms/test_utils_pytorch_numpy_unification.py, median of 3 runs on the same machine:

Median wall (3 runs) Individual runs
Before 17.16s 18.36, 16.74, 17.16
After 12.01s 12.19, 11.99, 12.01

Machine: 12th Gen Intel Core i7-12800H (20 threads), Ubuntu 22.04.5 (kernel 6.8.0-124), Python 3.10.12, torch 2.10.0+cu128, CUDA available (NVIDIA RTX A1000 Laptop GPU).

Types of changes

  • Non-breaking change (test-only; no functional code touched)
  • Tests pass locally (pytest tests/transforms/test_utils_pytorch_numpy_unification.py)

test_many_elements_quantile regenerated random data for every container
type; generate it once per element count and reuse across types. Test-only
speedup, identical coverage.

Signed-off-by: Soumya Snigdha Kundu <soumya_snigdha.kundu@kcl.ac.uk>
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The change updates a test in test_utils_pytorch_numpy_unification.py. The random data array is now generated once per elements size, outside the backend conversion loop, rather than being regenerated within nested loop iterations. The data is converted to x per backend, then quantile assertions run per input type using that shared x.

Estimated code review effort: 1 (Trivial) | ~3 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the test-only quantile optimization and matches the main change.
Description check ✅ Passed The description covers the change, rationale, performance impact, and types of changes.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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.

1 participant