/* * PndIsochroneTrackFinderGpuInterfacer.h * * Created on: 12.11.2014 * Author: A. Herten */ #ifndef PNDISOCHRONETRACKFINDERGPUINTERFACER_H_ #define PNDISOCHRONETRACKFINDERGPUINTERFACER_H_ #include "TROOT.h" #include "TVector2.h" #include #ifdef THERE_IS_CUDA //#pragma message ( "extern" ) extern "C" void DeviceInfo(); extern "C" float * GenerateAngles_Gpu(float angleStart, float angleEnd, float angleStepSize, float * time, unsigned int * _nBlocks, unsigned int nThreads = 32); extern "C" std::vector > IsoCalc_allHits_Gpu(float * angles_d, int nAngles, std::vector x, std::vector y, std::vector r); #else //#pragma message ( "intern" ) inline void DeviceInfo() {printf("Unfortunately, you don't have any CUDA device.\n");}; float * GenerateAngles_Gpu(float angleStart, float angleEnd, float angleStepSize, float * time, unsigned int * _nBlocks, unsigned int nThreads = 32); std::vector > IsoCalc_allHits_Gpu(float * angles_d, int nAngles, std::vector x, std::vector y, std::vector r); #endif class PndIsochroneTrackFinderGpuInterfacer { public: PndIsochroneTrackFinderGpuInterfacer(); virtual ~PndIsochroneTrackFinderGpuInterfacer(); void RandomDeviceTask() { DeviceInfo(); } static bool CudaAvailable(); void GenerateAndSetAngles(std::pair, float); std::vector > IsoCalc(std::vector, std::vector, std::vector); // Setters void SetAngles(float * _angles) { fAngles = _angles; }; void SetAnglesLength(int _length) { fAnglesLength = _length; }; void SetNThreads(int _NThreads) {fNThreads = _NThreads; }; // Getters float * GetAngles() { return fAngles; }; int GetAnglesLength() { return fAnglesLength; }; float GetTimeAngles() {return fTimeAngles; }; float GetTimeHough() {return fTimeHough; }; int GetNThreads() {return fNThreads; }; int GetNBlocks() {return fNBlocks; }; private: float * fAngles; // is, hopefully, device-sided int fAnglesLength; unsigned int fNThreads; unsigned int fNBlocks; float fTimeAngles; float fTimeHough; ClassDef(PndIsochroneTrackFinderGpuInterfacer, 2); }; #endif