Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:46

0001 #include "CUDADataFormats/SiStripCluster/interface/SiStripClustersCUDA.h"
0002 #include "HeterogeneousCore/CUDAUtilities/interface/copyAsync.h"
0003 
0004 SiStripClustersCUDADevice::SiStripClustersCUDADevice(uint32_t maxClusters,
0005                                                      uint32_t maxStripsPerCluster,
0006                                                      cudaStream_t stream) {
0007   maxClusterSize_ = maxStripsPerCluster;
0008 
0009   clusterIndex_ = cms::cuda::make_device_unique<uint32_t[]>(maxClusters, stream);
0010   clusterSize_ = cms::cuda::make_device_unique<uint32_t[]>(maxClusters, stream);
0011   clusterADCs_ = cms::cuda::make_device_unique<uint8_t[]>(maxClusters * maxStripsPerCluster, stream);
0012   clusterDetId_ = cms::cuda::make_device_unique<stripgpu::detId_t[]>(maxClusters, stream);
0013   firstStrip_ = cms::cuda::make_device_unique<stripgpu::stripId_t[]>(maxClusters, stream);
0014   trueCluster_ = cms::cuda::make_device_unique<bool[]>(maxClusters, stream);
0015   barycenter_ = cms::cuda::make_device_unique<float[]>(maxClusters, stream);
0016   charge_ = cms::cuda::make_device_unique<float[]>(maxClusters, stream);
0017 
0018   auto view = cms::cuda::make_host_unique<DeviceView>(stream);
0019   view->clusterIndex_ = clusterIndex_.get();
0020   view->clusterSize_ = clusterSize_.get();
0021   view->clusterADCs_ = clusterADCs_.get();
0022   view->clusterDetId_ = clusterDetId_.get();
0023   view->firstStrip_ = firstStrip_.get();
0024   view->trueCluster_ = trueCluster_.get();
0025   view->barycenter_ = barycenter_.get();
0026   view->charge_ = charge_.get();
0027   view->maxClusterSize_ = maxStripsPerCluster;
0028 
0029   view_d = cms::cuda::make_device_unique<DeviceView>(stream);
0030   cms::cuda::copyAsync(view_d, view, stream);
0031 #ifdef GPU_CHECK
0032   cudaCheck(cudaStreamSynchronize(stream));
0033 #endif
0034 }
0035 
0036 SiStripClustersCUDAHost::SiStripClustersCUDAHost(const SiStripClustersCUDADevice& clusters_d, cudaStream_t stream) {
0037   nClusters_ = clusters_d.nClusters();
0038   maxClusterSize_ = clusters_d.maxClusterSize();
0039   clusterIndex_ = cms::cuda::make_host_unique<uint32_t[]>(nClusters_, stream);
0040   clusterSize_ = cms::cuda::make_host_unique<uint32_t[]>(nClusters_, stream);
0041   clusterADCs_ = cms::cuda::make_host_unique<uint8_t[]>(nClusters_ * maxClusterSize_, stream);
0042   clusterDetId_ = cms::cuda::make_host_unique<stripgpu::detId_t[]>(nClusters_, stream);
0043   firstStrip_ = cms::cuda::make_host_unique<stripgpu::stripId_t[]>(nClusters_, stream);
0044   trueCluster_ = cms::cuda::make_host_unique<bool[]>(nClusters_, stream);
0045   barycenter_ = cms::cuda::make_host_unique<float[]>(nClusters_, stream);
0046   charge_ = cms::cuda::make_host_unique<float[]>(nClusters_, stream);
0047 
0048   cms::cuda::copyAsync(clusterIndex_, clusters_d.clusterIndex(), nClusters_, stream);
0049   cms::cuda::copyAsync(clusterSize_, clusters_d.clusterSize(), nClusters_, stream);
0050   cms::cuda::copyAsync(clusterADCs_, clusters_d.clusterADCs(), nClusters_ * maxClusterSize_, stream);
0051   cms::cuda::copyAsync(clusterDetId_, clusters_d.clusterDetId(), nClusters_, stream);
0052   cms::cuda::copyAsync(firstStrip_, clusters_d.firstStrip(), nClusters_, stream);
0053   cms::cuda::copyAsync(trueCluster_, clusters_d.trueCluster(), nClusters_, stream);
0054   cms::cuda::copyAsync(barycenter_, clusters_d.barycenter(), nClusters_, stream);
0055   cms::cuda::copyAsync(charge_, clusters_d.charge(), nClusters_, stream);
0056 #ifdef GPU_CHECK
0057   cudaCheck(cudaStreamSynchronize(stream));
0058 #endif
0059 }