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 }