Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:44

0001 #pragma once
0002 /**
0003 sysrap/SPM.hh
0004 ===============
0005 
0006 This CUDA hit merging functionality is used from::
0007 
0008    QEvt::PerLaunchMerge
0009    QEvt::FinalMerge
0010    QEvt::FinalMerge_async
0011 
0012 **/
0013 
0014 #include <string>
0015 #include "sphoton.h"
0016 #include "sphotonlite.h"
0017 #include "SPM_future.h"
0018 
0019 
0020 
0021 struct SPM
0022 {
0023     static constexpr unsigned ALREADY_HITMASK_SELECTED = 0xffffffffu ;
0024     static constexpr float DEFAULT_TIME_WINDOW = 1.0f ;   // ns
0025     static constexpr float NOMERGE_TIME_WINDOW = 0.0f ;   // only selects
0026 
0027     template<typename T>
0028     static SPM_future<T> merge_partial_select_async(
0029            const T*            d_photonlite,
0030            size_t            num_photonlite,
0031            unsigned         select_flagmask,
0032            float                time_window,
0033            cudaStream_t              stream );
0034 
0035     template<typename T>
0036     static void merge_partial_select(
0037             const T*           d_in,
0038             size_t             num_in,
0039             T**                d_out,
0040             size_t*            num_out,
0041             unsigned           select_flagmask = 0xffffffffu,
0042             float              time_window     = DEFAULT_TIME_WINDOW,
0043             cudaStream_t       stream = 0 );
0044 
0045 
0046     template<typename T>
0047     static int copy_device_to_host_async( T* h, T* d,  size_t num_items, cudaStream_t stream = 0 );
0048 
0049     static void free( void* d_ptr );
0050     static void free_async(void* d_ptr, cudaStream_t stream = 0) ;
0051 
0052 
0053 };