Project
Loading...
Searching...
No Matches
GPUMemorySizeScalers.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#ifndef O2_GPU_GPUMEMORYSIZESCALERS_H
16#define O2_GPU_GPUMEMORYSIZESCALERS_H
17
18#include "GPUDef.h"
19
20namespace o2::gpu
21{
22
24 // Input sizes
25 size_t nTPCdigits = 0;
26 size_t nTPCHits = 0;
27 size_t nTRDTracklets = 0;
28 size_t nITSTracks = 0;
29
30 // General scaling factor
31 double factor = 1;
32 double temporaryFactor = 1;
33 bool conservative = 0;
34
35 // Offset
36 double offset = 1000.;
37 double hitOffset = 20000;
38
39 // Scaling Factors
40 double tpcPeaksPerDigit = 0.2;
41 double tpcClustersPerPeak = 0.9;
42 double tpcStartHitsPerHit = 0.08;
45 double tpcSectorTracksPerHit = 0.02;
50 size_t tpcCompressedUnattachedHitsBase1024[3] = {900, 900, 500}; // No ratio, but integer fraction of 1024 for exact computation
51
52 // Upper limits
53 size_t tpcMaxPeaks = 20000000;
54 size_t tpcMaxClusters = 320000000;
55 size_t tpcMaxSectorClusters = 30000000;
56 size_t tpcMaxStartHits = 650000;
57 size_t tpcMaxRowStartHits = 100000;
58 size_t tpcMinRowStartHits = 4000;
59 size_t tpcMaxTracklets = 520000;
60 size_t tpcMaxTrackletHits = 35000000;
61 size_t tpcMaxSectorTracks = 130000;
62 size_t tpcMaxSectorTrackHits = 5900000;
63 size_t tpcMaxMergedTracks = 3000000;
64 size_t tpcMaxMergedTrackHits = 200000000;
65 size_t availableMemory = 20500000000;
66 bool returnMaxVal = false;
67
68 void rescaleMaxMem(size_t newAvailableMemory);
69 inline size_t getValue(size_t maxVal, size_t val)
70 {
71 return returnMaxVal ? maxVal : (std::min<size_t>(maxVal, offset + val) * factor * temporaryFactor);
72 }
73
74 inline size_t NTPCPeaks(size_t tpcDigits, bool perSector = false) { return getValue(perSector ? tpcMaxPeaks : (GPUCA_NSECTORS * tpcMaxPeaks), hitOffset + tpcDigits * tpcPeaksPerDigit); }
75 inline size_t NTPCClusters(size_t tpcDigits, bool perSector = false) { return getValue(perSector ? tpcMaxSectorClusters : tpcMaxClusters, (conservative ? 1.0 : tpcClustersPerPeak) * NTPCPeaks(tpcDigits, perSector)); }
76 inline size_t NTPCStartHits(size_t tpcHits) { return getValue(tpcMaxStartHits, tpcHits * tpcStartHitsPerHit); }
77 inline size_t NTPCRowStartHits(size_t tpcHits) { return getValue(tpcMaxRowStartHits, std::max<size_t>(NTPCStartHits(tpcHits) * (tpcHits < 30000000 ? 20 : 12) / GPUCA_ROW_COUNT, tpcMinRowStartHits)); }
78 inline size_t NTPCTracklets(size_t tpcHits) { return getValue(tpcMaxTracklets, NTPCStartHits(tpcHits) * tpcTrackletsPerStartHit); }
79 inline size_t NTPCTrackletHits(size_t tpcHits) { return getValue(tpcMaxTrackletHits, hitOffset + tpcHits * tpcTrackletHitsPerHit); }
80 inline size_t NTPCSectorTracks(size_t tpcHits) { return getValue(tpcMaxSectorTracks, tpcHits * tpcSectorTracksPerHit); }
81 inline size_t NTPCSectorTrackHits(size_t tpcHits, uint8_t withRejection = 0) { return getValue(tpcMaxSectorTrackHits, tpcHits * (withRejection ? tpcSectorTrackHitsPerHitWithRejection : tpcSectorTrackHitsPerHit)); }
82 inline size_t NTPCMergedTracks(size_t tpcSectorTracks) { return getValue(tpcMaxMergedTracks, tpcSectorTracks * (conservative ? 1.0 : tpcMergedTrackPerSectorTrack)); }
83 inline size_t NTPCMergedTrackHits(size_t tpcSectorTrackHitss) { return getValue(tpcMaxMergedTrackHits, tpcSectorTrackHitss * tpcMergedTrackHitPerSectorHit); }
84 inline size_t NTPCUnattachedHitsBase1024(int32_t type) { return (returnMaxVal || conservative) ? 1024 : std::min<size_t>(1024, tpcCompressedUnattachedHitsBase1024[type] * factor * temporaryFactor); }
85};
86
87} // namespace o2::gpu
88
89#endif
#define GPUCA_NSECTORS
#define GPUCA_ROW_COUNT
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLintptr offset
Definition glcorearb.h:660
GLuint GLfloat * val
Definition glcorearb.h:1582
size_t NTPCSectorTrackHits(size_t tpcHits, uint8_t withRejection=0)
size_t NTPCPeaks(size_t tpcDigits, bool perSector=false)
size_t NTPCTracklets(size_t tpcHits)
size_t NTPCClusters(size_t tpcDigits, bool perSector=false)
size_t getValue(size_t maxVal, size_t val)
size_t NTPCTrackletHits(size_t tpcHits)
size_t NTPCMergedTrackHits(size_t tpcSectorTrackHitss)
size_t NTPCSectorTracks(size_t tpcHits)
size_t NTPCMergedTracks(size_t tpcSectorTracks)
void rescaleMaxMem(size_t newAvailableMemory)
size_t NTPCRowStartHits(size_t tpcHits)
size_t NTPCStartHits(size_t tpcHits)
size_t NTPCUnattachedHitsBase1024(int32_t type)