From 91c94f77d62cd1c7d6955cbceab9a3985948ffce Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 8 Aug 2023 11:25:54 +0200 Subject: [PATCH] RadialIntegration: Remove RadialIntegration preparation from timed loop --- tools/RadialIntegrationCPUTest.cpp | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/tools/RadialIntegrationCPUTest.cpp b/tools/RadialIntegrationCPUTest.cpp index 233995a7..b8637918 100644 --- a/tools/RadialIntegrationCPUTest.cpp +++ b/tools/RadialIntegrationCPUTest.cpp @@ -9,14 +9,10 @@ Logger logger{"RadialIntegrationCPUTest"}; -void RunRadialIntegrationThread(const std::vector& mapping, - uint32_t nbins, uint32_t pixel_split, +void RunRadialIntegrationThread(RadialIntegration &integration, int16_t* image, size_t nimages, size_t image0, size_t stride, size_t npixel) { - - RadialIntegration integration(mapping, nbins, pixel_split); - for (size_t i = image0; i < nimages; i += stride) integration.ProcessOneImage(image + i * npixel, npixel); } @@ -29,24 +25,21 @@ auto TestRadialIntegration(const DiffractionExperiment &experiment, RadialIntegrationMapping mapping(experiment); std::vector result; + std::vector integration; + for (int i = 0; i < nthreads; i++) { + if (pixel_split == 1) + integration.emplace_back(mapping); + else + integration.emplace_back(mapping.GetPixelToBinMappingSplitTo4(), mapping.GetBinNumber(), 4); + } auto start_time = std::chrono::system_clock::now(); for (int redo = 0; redo < nredo; redo++) { std::vector> futures; for (int i = 0; i < nthreads; i++) { - if (pixel_split == 1) futures.emplace_back(std::async(std::launch::async, &RunRadialIntegrationThread, - std::ref(mapping.GetPixelToBinMapping()), mapping.GetBinNumber(), 1, - image, nimages, - i, nthreads, + std::ref(integration[i]), image, nimages, i, nthreads, experiment.GetPixelsNum())); - else - futures.emplace_back(std::async(std::launch::async, &RunRadialIntegrationThread, - mapping.GetPixelToBinMappingSplitTo4(), mapping.GetBinNumber(), 4, - image, nimages, - i, nthreads, - experiment.GetPixelsNum())); - } for (auto &f: futures) f.get();