50 #include <boost/log/core.hpp> 51 #include <boost/log/trivial.hpp> 52 #include <boost/log/expressions.hpp> 60 #include <cuda_profiler_api.h> 64 boost::log::core::get()->set_filter(boost::log::trivial::severity >= boost::log::trivial::debug);
66 boost::log::core::get()->set_filter(boost::log::trivial::severity >= boost::log::trivial::info);
70 int main(
int argc,
char *argv[]) {
77 BOOST_LOG_TRIVIAL(error) <<
"Call the program like this: ./example <path_to_config_file>";
80 std::string configFile = argv[1];
83 auto outputPath = std::string {
"Reco" };
84 auto inputPath = std::string {
"Sino" };
85 auto prefix = std::string {
"IMG" };
87 auto address = std::string {
"10.0.0.10" };
107 CHECK(cudaGetDeviceCount(&numberofDevices));
113 auto h2d = pipeline.
create<copyStageH2D>(configFile);
114 auto reordering = pipeline.create<reorderingStage>(configFile);
115 auto attenuation = pipeline.create<attenuationStage>(configFile);
116 auto fan2Para = pipeline.create<fan2ParaStage>(configFile);
117 auto filter = pipeline.create<filterStage>(configFile);
118 auto backProjection = pipeline.create<backProjectionStage>(configFile);
120 auto d2h = pipeline.create<copyStageD2H>(configFile);
121 auto sink = pipeline.create<sinkStage>(outputPath, prefix, configFile);
122 auto source = pipeline.create<sourceStage>(address, configFile);
124 pipeline.connect(source, h2d);
125 pipeline.connect(h2d, reordering);
126 pipeline.connect(reordering, attenuation);
127 pipeline.connect(attenuation, fan2Para);
128 pipeline.connect(fan2Para, filter);
129 pipeline.connect(filter, backProjection);
131 pipeline.connect(backProjection, d2h);
132 pipeline.connect(d2h, sink);
134 pipeline.run(source, h2d, reordering, attenuation, fan2Para, filter, backProjection, d2h, sink);
135 BOOST_LOG_TRIVIAL(info) <<
"Initialization finished.";
137 for (
auto i = 0; i < numberofDevices; i++){
138 CHECK(cudaSetDevice(i));
139 CHECK(cudaProfilerStart());
144 for (
auto i = 0; i < numberofDevices; i++){
145 CHECK(cudaSetDevice(i));
146 CHECK(cudaProfilerStop());
149 }
catch (
const std::runtime_error& err) {
150 std::cerr <<
"=========================" << std::endl;
151 std::cerr <<
"A runtime error occurred: " << std::endl;
152 std::cerr << err.what() << std::endl;
153 std::cerr <<
"=========================" << std::endl;
156 for(
auto i = 0; i < numberofDevices; i++){
157 CHECK(cudaSetDevice(i));
158 CHECK(cudaDeviceSynchronize());
159 CHECK(cudaDeviceReset());
auto create(Args &&...args) -> std::shared_ptr< PipelineStage >
int main(int argc, char *argv[])