RadialIntegration: Remove RadialIntegration preparation from timed loop

This commit is contained in:
2023-08-08 11:25:54 +02:00
parent 480161ad7d
commit 91c94f77d6

View File

@@ -9,14 +9,10 @@
Logger logger{"RadialIntegrationCPUTest"};
void RunRadialIntegrationThread(const std::vector<uint16_t>& 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<float> result;
std::vector<RadialIntegration> 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<std::future<void>> 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();