RadialIntegration: Enable pixel splitting with CPU based routine

This commit is contained in:
2023-08-08 10:20:26 +02:00
parent 28675fb3be
commit 2eac43b925
6 changed files with 126 additions and 41 deletions

View File

@@ -45,7 +45,7 @@ auto TestAll(const DiffractionExperiment &experiment, const JFJochProtoBuf::Data
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
std::ostringstream strstream;
logger.Info("{:20s} {:8.1f} ms/image", "Full",
logger.Info("{:30s} {:8.1f} ms/image", "Full",
elapsed.count() / (1000.0 * (double) nimages));
return strstream.str();
@@ -85,7 +85,7 @@ auto TestAllWithROI(const DiffractionExperiment &experiment, const JFJochProtoBu
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
std::ostringstream strstream;
logger.Info("{:20s} {:8.1f} ms/image", "Full+ROI",
logger.Info("{:30s} {:8.1f} ms/image", "Full+ROI",
elapsed.count() / (1000.0 * (double) nimages));
return strstream.str();
@@ -127,7 +127,7 @@ void TestIndexing() {
auto end_time = std::chrono::system_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
logger.Info("Fast feedback index. {:8.1f} ms/image", elapsed.count() / (1000.0 * nexec));
logger.Info("{:30s} {:8.1f} ms/image", "Fast feedback index.", elapsed.count() / (1000.0 * nexec));
}
}
@@ -149,7 +149,7 @@ auto TestSpotFinder(const DiffractionExperiment &experiment, const JFJochProtoBu
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
std::ostringstream strstream;
logger.Info("{:20s} {:8.1f} ms/image {:5d} spots", "Spot finding",
logger.Info("{:30s} {:8.1f} ms/image {:5d} spots", "Spot finding",
elapsed.count() / (1000.0 * (double) nimages), spots.size());
return strstream.str();
@@ -173,7 +173,7 @@ auto TestSpotFinderWithoutCopyToDevice(const DiffractionExperiment &experiment,
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
std::ostringstream strstream;
logger.Info("{:20s} {:8.1f} ms/image {:5d} spots", "Spot finding",
logger.Info("{:30s} {:8.1f} ms/image {:5d} spots", "Spot finding",
elapsed.count() / (1000.0 * (double) nimages), spots.size());
return strstream.str();
@@ -237,18 +237,29 @@ auto TestRadialIntegrationGPUWithoutCopyToDevice(const DiffractionExperiment &x,
}
auto TestRadialIntegration(const DiffractionExperiment &experiment, const JFJochProtoBuf::DataProcessingSettings &settings,
int16_t* image, size_t nimages) {
auto TestRadialIntegration(const DiffractionExperiment &experiment,
const JFJochProtoBuf::DataProcessingSettings &settings,
int16_t* image, size_t nimages,
uint32_t pixel_split = 1) {
uint32_t nredo = 20;
RadialIntegrationMapping mapping(experiment);
RadialIntegration integration(mapping);
std::unique_ptr<RadialIntegration> integration;
if (pixel_split == 1) {
integration = std::make_unique<RadialIntegration>(mapping);
} else {
integration = std::make_unique<RadialIntegration>(mapping.GetPixelToBinMappingSplitTo4(),
mapping.GetBinNumber(),
4);
}
std::vector<float> result;
auto start_time = std::chrono::system_clock::now();
for (int redo = 0; redo < nredo; redo++) {
for (int i = 0; i < nimages; i++) {
integration.ProcessOneImage(image + i * experiment.GetPixelsNum(), experiment.GetPixelsNum());
integration->ProcessOneImage(image + i * experiment.GetPixelsNum(), experiment.GetPixelsNum());
//integration.GetResult(result);
}
}
@@ -332,14 +343,17 @@ int main(int argc, char **argv) {
TestSpotFinder(x, settings, local_peakfinder_gpu,image_conv.data(), nimages);
}
logger.Info("{:20s} {:8.1f} ms/image", "Radial int. (GPU)", TestRadialIntegrationGPU(x, settings,
logger.Info("{:30s} {:8.1f} ms/image", "Radial int. (GPU)", TestRadialIntegrationGPU(x, settings,
image_conv.data(), nimages));
logger.Info("{:20s} {:8.1f} ms/image", "Radial int. (GPU/nocopy)", TestRadialIntegrationGPUWithoutCopyToDevice(x, settings,
logger.Info("{:30s} {:8.1f} ms/image", "Radial int. (GPU/nocpy)", TestRadialIntegrationGPUWithoutCopyToDevice(x, settings,
image_conv.data(), nimages));
logger.Info("{:20s} {:8.1f} ms/image", "Radial int. (CPU)", TestRadialIntegration(x, settings,
logger.Info("{:30s} {:8.1f} ms/image", "Radial int. (CPU)", TestRadialIntegration(x, settings,
image_conv.data(), nimages));
logger.Info("{:30s} {:8.1f} ms/image", "Radial int. pxlspl 2 (CPU)", TestRadialIntegration(x, settings,
image_conv.data(), nimages, 4));
TestIndexing();
logger.Info("Full package");