LAMA
/home/brandes/workspace/LAMA/src/lama/cuda/CUDATracerHelper.hpp
Go to the documentation of this file.
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_