25 #ifndef SKA_CHEETAH_SPS_ASTROACCELERATE_SPSCUDA_H 26 #define SKA_CHEETAH_SPS_ASTROACCELERATE_SPSCUDA_H 28 #include "cheetah/sps/astroaccelerate/Config.h" 29 #include "cheetah/sps/Config.h" 30 #include "cheetah/utils/Mock.h" 32 #ifdef ENABLE_ASTROACCELERATE //Note: This should probably be ENABLE_ASTROACCELERATE 34 #include "cheetah/ddtr/DedispersionConfig.h" 35 #include "cheetah/utils/Architectures.h" 36 #include "cheetah/utils/AlgorithmBase.h" 37 #include "cheetah/data/Units.h" 38 #include "cheetah/data/DmTime.h" 39 #include "cheetah/data/TimeFrequency.h" 40 #include "cheetah/data/DmTrialsMetadata.h" 41 #include "panda/AggregationBufferFiller.h" 42 #include "panda/arch/nvidia/DeviceCapability.h" 43 #include "astro-accelerate/astro-accelerate/DedispersionStrategy.h" 44 #include "astro-accelerate/astro-accelerate/AstroAccelerate.h" 53 namespace astroaccelerate {
60 class SpsCuda :
private utils::AlgorithmBase<Config, sps::Config>
63 typedef utils::AlgorithmBase<Config, sps::Config> BaseT;
67 typedef cheetah::Cuda Architecture;
68 typedef panda::nvidia::DeviceCapability<3, 5, panda::nvidia::giga> ArchitectureCapability;
71 typedef uint8_t DataType;
74 typedef data::TimeFrequency<Cpu, uint8_t> TimeFrequencyType;
75 typedef boost::units::quantity<data::MegaHertz, double> FrequencyType;
76 typedef boost::units::quantity<boost::units::si::time, double> TimeType;
79 typedef typename ska::panda::AggregationBufferFiller<TimeFrequencyType>::AggregationBufferType BufferType;
82 SpsCuda(sps::Config
const& config);
83 SpsCuda(SpsCuda&&) =
default;
84 SpsCuda(SpsCuda
const&) =
delete;
90 template<
typename DmHandler,
typename SpHandler>
91 void operator()(panda::PoolResource<cheetah::Cuda>&, BufferType&, DmHandler&, SpHandler&);
97 std::size_t set_dedispersion_strategy(std::size_t min_gpu_memory, TimeFrequencyType
const&);
102 ::astroaccelerate::DedispersionStrategy
const& dedispersion_strategy()
const;
108 std::size_t buffer_overlap()
const;
113 std::size_t calculate_internals(TimeType);
114 std::size_t _samples;
115 std::vector<const ddtr::DedispersionConfig*> _dedisp_configs;
117 std::unique_ptr<::astroaccelerate::DedispersionStrategy> _dedispersion_strategy;
118 std::shared_ptr<::astroaccelerate::DmTime<float>> _dm_time;
119 std::shared_ptr<data::DmTrialsMetadata> _dm_trial_metadata;
120 FrequencyType _chan_high;
121 FrequencyType _chan_low;
130 #else // ENABLE_ASTROACCELERATE 135 namespace astroaccelerate {
150 #endif // ENABLE_ASTROACCELERATE 152 #include "cheetah/sps/astroaccelerate/detail/SpsCuda.cpp" 153 #endif // SKA_CHEETAH_SPS_ASTROACCELERATE_SPSCUDA_H
Some limits and constants for FLDO.