Skip to content

Commit ee9c10a

Browse files
authored
Merge pull request #78 from DiamondLightSource/power_of_2_cropping_estimator
Update the LPRec memory estimator
2 parents b204eeb + 6b5ec70 commit ee9c10a

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

httomo_backends/methods_database/packages/backends/httomolibgpu/supporting_funcs/recon/algorithm.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ def _calc_memory_bytes_LPRec3d_tomobar(
197197
min_mem_usage_ifft2 = False
198198
if "min_mem_usage_ifft2" in kwargs:
199199
min_mem_usage_ifft2 = kwargs["min_mem_usage_ifft2"]
200+
power_of_2_cropping = False
201+
if "power_of_2_cropping" in kwargs:
202+
power_of_2_cropping = kwargs["power_of_2_cropping"]
200203

201204
angles_tot = non_slice_dims_shape[0]
202205
DetectorsLengthH_prepad = non_slice_dims_shape[1]
@@ -205,6 +208,10 @@ def _calc_memory_bytes_LPRec3d_tomobar(
205208
_CENTER_SIZE_MIN = 192 # must be divisible by 8
206209

207210
n = DetectorsLengthH
211+
if(power_of_2_cropping):
212+
n_pow2 = 2 ** math.ceil(math.log2(n))
213+
if( 0.9 < n / n_pow2 ):
214+
n = n_pow2
208215

209216
odd_horiz = False
210217
if (n % 2) != 0:

pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ dev_template = "{tag}"
2424

2525
[project]
2626
name = "httomo-backends"
27-
version = "0.7.1"
27+
version = "0.7.2"
2828
description = "Supplementary files for HTTomo backends."
2929
readme = "README.rst"
3030
license = {text = "BSD-3-Clause"}
@@ -55,7 +55,6 @@ dependencies = [
5555
"astra-toolbox",
5656
"tomobar",
5757
"scikit-image",
58-
"ccpi-regularisation-cupy",
5958
]
6059

6160
[project.optional-dependencies]

tests/test_httomolibgpu.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,8 @@ def test_recon_FBP3d_tomobar_memoryhook(
543543

544544

545545
@pytest.mark.cupy
546-
@pytest.mark.parametrize("min_mem_usage_filter_ifft2", [(False, False), (True, False), (True, True)])
546+
@pytest.mark.parametrize("min_mem_usage_filter_ifft2", [(False, False)])
547+
@pytest.mark.parametrize("power_of_2_cropping", [False])
547548
@pytest.mark.parametrize("padding_detx", [0, 10, 50, 100])
548549
@pytest.mark.parametrize("projections", [1500, 1801, 2560])
549550
@pytest.mark.parametrize("detX_size", [2560])
@@ -556,6 +557,7 @@ def test_recon_LPRec3d_tomobar_0_pi_memoryhook(
556557
projection_angle_range,
557558
min_mem_usage_filter_ifft2,
558559
padding_detx,
560+
power_of_2_cropping,
559561
ensure_clean_memory,
560562
):
561563
__test_recon_LPRec3d_tomobar_memoryhook_common(
@@ -565,13 +567,15 @@ def test_recon_LPRec3d_tomobar_0_pi_memoryhook(
565567
projection_angle_range,
566568
padding_detx,
567569
min_mem_usage_filter_ifft2,
570+
power_of_2_cropping,
568571
ensure_clean_memory,
569572
)
570573

571574

572575
@pytest.mark.full
573576
@pytest.mark.cupy
574577
@pytest.mark.parametrize("min_mem_usage_filter_ifft2", [(False, False), (True, False), (True, True)])
578+
@pytest.mark.parametrize("power_of_2_cropping", [False, True])
575579
@pytest.mark.parametrize("padding_detx", [0, 10, 50, 100, 800])
576580
@pytest.mark.parametrize("projections", [1500, 1801, 2560, 3601])
577581
@pytest.mark.parametrize("detX_size", [2560])
@@ -584,6 +588,7 @@ def test_recon_LPRec3d_tomobar_0_pi_memoryhook_full(
584588
projection_angle_range,
585589
padding_detx,
586590
min_mem_usage_filter_ifft2,
591+
power_of_2_cropping,
587592
ensure_clean_memory,
588593
):
589594
__test_recon_LPRec3d_tomobar_memoryhook_common(
@@ -593,13 +598,15 @@ def test_recon_LPRec3d_tomobar_0_pi_memoryhook_full(
593598
projection_angle_range,
594599
padding_detx,
595600
min_mem_usage_filter_ifft2,
601+
power_of_2_cropping,
596602
ensure_clean_memory,
597603
)
598604

599605

600606
@pytest.mark.full
601607
@pytest.mark.cupy
602608
@pytest.mark.parametrize("min_mem_usage_filter_ifft2", [(False, False), (True, False), (True, True)])
609+
@pytest.mark.parametrize("power_of_2_cropping", [False, True])
603610
@pytest.mark.parametrize("padding_detx", [0, 10, 50, 100, 800])
604611
@pytest.mark.parametrize("projections", [1500, 1801, 2560, 3601])
605612
@pytest.mark.parametrize("detX_size", [2560])
@@ -614,6 +621,7 @@ def test_recon_LPRec3d_tomobar_memoryhook_full(
614621
projection_angle_range,
615622
padding_detx,
616623
min_mem_usage_filter_ifft2,
624+
power_of_2_cropping,
617625
ensure_clean_memory,
618626
):
619627
__test_recon_LPRec3d_tomobar_memoryhook_common(
@@ -623,6 +631,7 @@ def test_recon_LPRec3d_tomobar_memoryhook_full(
623631
projection_angle_range,
624632
padding_detx,
625633
min_mem_usage_filter_ifft2,
634+
power_of_2_cropping,
626635
ensure_clean_memory,
627636
)
628637

@@ -634,6 +643,7 @@ def __test_recon_LPRec3d_tomobar_memoryhook_common(
634643
projection_angle_range,
635644
padding_detx,
636645
min_mem_usage_filter_ifft2,
646+
power_of_2_cropping,
637647
ensure_clean_memory,
638648
):
639649
angles_number = projections
@@ -646,6 +656,7 @@ def __test_recon_LPRec3d_tomobar_memoryhook_common(
646656
kwargs["detector_pad"] = padding_detx
647657
kwargs["min_mem_usage_filter"] = min_mem_usage_filter_ifft2[0]
648658
kwargs["min_mem_usage_ifft2"] = min_mem_usage_filter_ifft2[1]
659+
kwargs["power_of_2_cropping"] = power_of_2_cropping
649660
kwargs["recon_size"] = detX_size
650661
kwargs["recon_mask_radius"] = 0.8
651662

0 commit comments

Comments
 (0)