From 6006850c40d4850e216c8d62071f0a0549241fd7 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 8 Aug 2023 11:32:27 +0200 Subject: [PATCH] RadialIntegration: Don't keep RadialIntegration on stack --- image_analysis/RadialIntegration.cpp | 6 +++++- tools/RadialIntegrationCPUTest.cpp | 9 +++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/image_analysis/RadialIntegration.cpp b/image_analysis/RadialIntegration.cpp index 4ec71cdb2..8502cb27a 100644 --- a/image_analysis/RadialIntegration.cpp +++ b/image_analysis/RadialIntegration.cpp @@ -18,6 +18,10 @@ RadialIntegration::RadialIntegration(const std::vector& in_mapping, ui "Only pixel split of 1 and 4 allowed at the moment for radial integration"); coeff = (float *) std::aligned_alloc(64, in_mapping.size() * sizeof(float)); + if (coeff == nullptr) + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, + "Memory allocation error"); + for (int i = 0; i < in_mapping.size(); i++) coeff[i] = 1.0f; } @@ -50,7 +54,7 @@ void RadialIntegration::Process(const int16_t *__restrict data, size_t npixel) { throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Mismatch in size of pixel-to-bin mapping and image"); - auto coeff_aligned = std::assume_aligned<64>(coeff); + const auto coeff_aligned = std::assume_aligned<64>(coeff); if (pixel_split == 1) { for (int i = 0; i < npixel; i++) { diff --git a/tools/RadialIntegrationCPUTest.cpp b/tools/RadialIntegrationCPUTest.cpp index 0d853dcbc..f75693e86 100644 --- a/tools/RadialIntegrationCPUTest.cpp +++ b/tools/RadialIntegrationCPUTest.cpp @@ -25,12 +25,13 @@ auto TestRadialIntegration(const DiffractionExperiment &experiment, RadialIntegrationMapping mapping(experiment); std::vector result; - std::vector integration; + std::vector> integration; for (int i = 0; i < nthreads; i++) { if (pixel_split == 1) - integration.emplace_back(mapping); + integration.emplace_back(std::make_unique(mapping)); else - integration.emplace_back(mapping.GetPixelToBinMappingSplitTo4(), mapping.GetBinNumber(), 4); + integration.emplace_back(std::make_unique(mapping.GetPixelToBinMappingSplitTo4(), + mapping.GetBinNumber(), 4)); } auto start_time = std::chrono::system_clock::now(); @@ -38,7 +39,7 @@ auto TestRadialIntegration(const DiffractionExperiment &experiment, std::vector> futures; for (int i = 0; i < nthreads; i++) { futures.emplace_back(std::async(std::launch::async, &RunRadialIntegrationThread, - &integration[i], image, nimages, i, nthreads, + integration[i].get(), image, nimages, i, nthreads, experiment.GetPixelsNum())); } for (auto &f: futures)