LAMA
|
00001 00033 #ifndef LAMA_CUDATRACERHELPER_HPP_ 00034 #define LAMA_CUDATRACERHELPER_HPP_ 00035 00036 // for dll_import 00037 #include <lama/config.hpp> 00038 00039 // others 00040 #include <lama/tracing/LAMABaseTracer.hpp> 00041 #include <lama/tracing/CUDATracerSyncToken.hpp> 00042 00043 #include <lama/cuda/CUDAStreamSyncToken.hpp> 00044 00048 template<typename Tracer> 00049 class LAMA_DLL_IMPORTEXPORT CUDATracerHelper 00050 { 00051 public: 00052 CUDATracerHelper(const char* name, const char* file, int lno, lama::CUDAStreamSyncToken& cudaStreamSyncToken); 00053 virtual ~CUDATracerHelper(); 00054 00055 private: 00056 CUDATracerSyncToken* mTracerSyncToken; 00057 }; 00058 00059 template<typename Tracer> 00060 CUDATracerHelper<Tracer>::CUDATracerHelper( 00061 const char* name, const char* file, int lno, 00062 lama::CUDAStreamSyncToken& cudaStreamSyncToken) 00063 : mTracerSyncToken(0) 00064 { 00065 std::auto_ptr<LAMABaseTracer> tracer( new Tracer( name, file, lno ) ); 00066 00067 std::auto_ptr<CUDATracerSyncToken> cudaTracerSyncToken( new CUDATracerSyncToken( tracer, cudaStreamSyncToken ) ); 00068 mTracerSyncToken = cudaTracerSyncToken.get(); 00069 std::auto_ptr<lama::SyncToken> tracerSyncToken( cudaTracerSyncToken ); 00070 cudaStreamSyncToken.pushSyncToken( tracerSyncToken ); 00071 } 00072 00073 template<typename Tracer> 00074 CUDATracerHelper<Tracer>::~CUDATracerHelper() 00075 { 00076 mTracerSyncToken->recordStopEvent( ); 00077 } 00078 00079 #endif // LAMA_CUDATRACERHELPER_HPP_