RadialIntegration: Enable pixel splitting with CPU based routine
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user