|
20 | 20 | SiPixelFedCablingMapGPUWrapper::SiPixelFedCablingMapGPUWrapper(SiPixelFedCablingMap const& cablingMap,
|
21 | 21 | TrackerGeometry const& trackerGeom,
|
22 | 22 | SiPixelQuality const *badPixelInfo):
|
23 |
| - fedMap(pixelgpudetails::MAX_SIZE), linkMap(pixelgpudetails::MAX_SIZE), rocMap(pixelgpudetails::MAX_SIZE), |
24 |
| - RawId(pixelgpudetails::MAX_SIZE), rocInDet(pixelgpudetails::MAX_SIZE), moduleId(pixelgpudetails::MAX_SIZE), |
25 |
| - badRocs(pixelgpudetails::MAX_SIZE), |
26 | 23 | hasQuality_(badPixelInfo != nullptr)
|
27 | 24 | {
|
| 25 | + helper_.allocate(&fedMap, pixelgpudetails::MAX_SIZE); |
| 26 | + helper_.allocate(&linkMap, pixelgpudetails::MAX_SIZE); |
| 27 | + helper_.allocate(&rocMap, pixelgpudetails::MAX_SIZE); |
| 28 | + helper_.allocate(&RawId, pixelgpudetails::MAX_SIZE); |
| 29 | + helper_.allocate(&rocInDet, pixelgpudetails::MAX_SIZE); |
| 30 | + helper_.allocate(&moduleId, pixelgpudetails::MAX_SIZE); |
| 31 | + helper_.allocate(&badRocs, pixelgpudetails::MAX_SIZE); |
| 32 | + |
28 | 33 | std::vector<unsigned int> const& fedIds = cablingMap.fedIds();
|
29 | 34 | std::unique_ptr<SiPixelFedCablingTree> const& cabling = cablingMap.cablingTree();
|
30 | 35 |
|
@@ -90,37 +95,19 @@ SiPixelFedCablingMapGPUWrapper::SiPixelFedCablingMapGPUWrapper(SiPixelFedCabling
|
90 | 95 | }
|
91 | 96 |
|
92 | 97 | size = index-1;
|
| 98 | + helper_.advise(); |
93 | 99 | }
|
94 | 100 |
|
95 | 101 |
|
96 | 102 | SiPixelFedCablingMapGPUWrapper::~SiPixelFedCablingMapGPUWrapper() {}
|
97 | 103 |
|
98 | 104 |
|
99 |
| -const SiPixelFedCablingMapGPU *SiPixelFedCablingMapGPUWrapper::getGPUProductAsync(cuda::stream_t<>& cudaStream) const { |
100 |
| - const auto& data = gpuData_.dataForCurrentDeviceAsync(cudaStream, [this](GPUData& data, cuda::stream_t<>& stream) { |
101 |
| - // allocate |
102 |
| - cudaCheck(cudaMallocHost((void**) & data.cablingMapHost, sizeof(SiPixelFedCablingMapGPU))); |
103 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapDevice, sizeof(SiPixelFedCablingMapGPU))); |
104 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->fed, pixelgpudetails::MAX_SIZE_BYTE_INT)); |
105 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->link, pixelgpudetails::MAX_SIZE_BYTE_INT)); |
106 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->roc, pixelgpudetails::MAX_SIZE_BYTE_INT)); |
107 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->RawId, pixelgpudetails::MAX_SIZE_BYTE_INT)); |
108 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->rocInDet, pixelgpudetails::MAX_SIZE_BYTE_INT)); |
109 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->moduleId, pixelgpudetails::MAX_SIZE_BYTE_INT)); |
110 |
| - cudaCheck(cudaMalloc((void**) & data.cablingMapHost->badRocs, pixelgpudetails::MAX_SIZE_BYTE_BOOL)); |
111 |
| - |
112 |
| - // transfer |
113 |
| - data.cablingMapHost->size = this->size; |
114 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->fed, this->fedMap.data(), this->fedMap.size() * sizeof(unsigned int), cudaMemcpyDefault, stream.id())); |
115 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->link, this->linkMap.data(), this->linkMap.size() * sizeof(unsigned int), cudaMemcpyDefault, stream.id())); |
116 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->roc, this->rocMap.data(), this->rocMap.size() * sizeof(unsigned int), cudaMemcpyDefault, stream.id())); |
117 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->RawId, this->RawId.data(), this->RawId.size() * sizeof(unsigned int), cudaMemcpyDefault, stream.id())); |
118 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->rocInDet, this->rocInDet.data(), this->rocInDet.size() * sizeof(unsigned int), cudaMemcpyDefault, stream.id())); |
119 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->moduleId, this->moduleId.data(), this->moduleId.size() * sizeof(unsigned int), cudaMemcpyDefault, stream.id())); |
120 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapHost->badRocs, this->badRocs.data(), this->badRocs.size() * sizeof(unsigned char), cudaMemcpyDefault, stream.id())); |
121 |
| - cudaCheck(cudaMemcpyAsync(data.cablingMapDevice, data.cablingMapHost, sizeof(SiPixelFedCablingMapGPU), cudaMemcpyDefault, stream.id())); |
122 |
| - }); |
123 |
| - return data.cablingMapDevice; |
| 105 | +SiPixelFedCablingMapGPU SiPixelFedCablingMapGPUWrapper::getGPUProductAsync(cuda::stream_t<>& cudaStream) const { |
| 106 | + helper_.prefetchAsync(cudaStream); |
| 107 | + return SiPixelFedCablingMapGPU{size, |
| 108 | + fedMap, linkMap, rocMap, |
| 109 | + RawId, rocInDet, moduleId, |
| 110 | + badRocs}; |
124 | 111 | }
|
125 | 112 |
|
126 | 113 | SiPixelFedCablingMapGPUWrapper::ModulesToUnpack::ModulesToUnpack():
|
@@ -156,18 +143,3 @@ void SiPixelFedCablingMapGPUWrapper::ModulesToUnpack::fillAsync(SiPixelFedCablin
|
156 | 143 |
|
157 | 144 | cuda::memory::async::copy(modToUnpDevice.get(), modToUnpHost.data(), modToUnpHost.size() * sizeof(unsigned char), cudaStream.id());
|
158 | 145 | }
|
159 |
| - |
160 |
| - |
161 |
| -SiPixelFedCablingMapGPUWrapper::GPUData::~GPUData() { |
162 |
| - if(cablingMapHost != nullptr) { |
163 |
| - cudaCheck(cudaFree(cablingMapHost->fed)); |
164 |
| - cudaCheck(cudaFree(cablingMapHost->link)); |
165 |
| - cudaCheck(cudaFree(cablingMapHost->roc)); |
166 |
| - cudaCheck(cudaFree(cablingMapHost->RawId)); |
167 |
| - cudaCheck(cudaFree(cablingMapHost->rocInDet)); |
168 |
| - cudaCheck(cudaFree(cablingMapHost->moduleId)); |
169 |
| - cudaCheck(cudaFree(cablingMapHost->badRocs)); |
170 |
| - cudaCheck(cudaFreeHost(cablingMapHost)); |
171 |
| - } |
172 |
| - cudaCheck(cudaFree(cablingMapDevice)); |
173 |
| -} |
0 commit comments