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 scalingFactor = 1;
32 uint64_t fuzzSeed = 0;
33 uint64_t fuzzLimit = 0;
34 double temporaryFactor = 1;
35 bool conservative = 0;
36
37 // Offset
38 double offset = 1000.;
39 double hitOffset = 20000;
40
41 // Scaling Factors
42 double tpcPeaksPerDigit = 0.2;
43 double tpcClustersPerPeak = 0.9;
44 double tpcStartHitsPerHit = 0.08;
47 double tpcSectorTracksPerHit = 0.02;
52 size_t tpcCompressedUnattachedHitsBase1024[3] = {900, 900, 500}; // No ratio, but integer fraction of 1024 for exact computation
53
54 // Upper limits
55 size_t tpcMaxPeaks = 20000000;
56 size_t tpcMaxClusters = 320000000;
57 size_t tpcMaxSectorClusters = 30000000;
58 size_t tpcMaxStartHits = 650000;
59 size_t tpcMaxRowStartHits = 100000;
60 size_t tpcMinRowStartHits = 4000;
61 size_t tpcMaxTracklets = 520000;
62 size_t tpcMaxTrackletHits = 35000000;
63 size_t tpcMaxSectorTracks = 130000;
64 size_t tpcMaxSectorTrackHits = 5900000;
65 size_t tpcMaxMergedTracks = 3000000;
66 size_t tpcMaxMergedTrackHits = 200000000;
67 size_t availableMemory = 20500000000;
68 bool returnMaxVal = false;
69 bool doFuzzing = false;
70
71 void rescaleMaxMem(size_t newAvailableMemory);
72 double getScalingFactor();
73 void fuzzScalingFactor(uint64_t seed);
74 inline size_t getValue(size_t maxVal, size_t val)
75 {
76 return returnMaxVal ? maxVal : (std::min<size_t>(maxVal, offset + val) * (doFuzzing == 0 ? scalingFactor : getScalingFactor()) * temporaryFactor);
77 }
78
79 inline size_t NTPCPeaks(size_t tpcDigits, bool perSector = false) { return getValue(perSector ? tpcMaxPeaks : (GPUCA_NSECTORS * tpcMaxPeaks), hitOffset + tpcDigits * tpcPeaksPerDigit); }
80 inline size_t NTPCClusters(size_t tpcDigits, bool perSector = false) { return getValue(perSector ? tpcMaxSectorClusters : tpcMaxClusters, (conservative ? 1.0 : tpcClustersPerPeak) * NTPCPeaks(tpcDigits, perSector)); }
81 inline size_t NTPCStartHits(size_t tpcHits) { return getValue(tpcMaxStartHits, tpcHits * tpcStartHitsPerHit); }
82 inline size_t NTPCRowStartHits(size_t tpcHits) { return getValue(tpcMaxRowStartHits, std::max<size_t>(NTPCStartHits(tpcHits) * (tpcHits < 30000000 ? 20 : 12) / GPUCA_ROW_COUNT, tpcMinRowStartHits)); }
83 inline size_t NTPCTracklets(size_t tpcHits) { return getValue(tpcMaxTracklets, NTPCStartHits(tpcHits) * tpcTrackletsPerStartHit); }
84 inline size_t NTPCTrackletHits(size_t tpcHits) { return getValue(tpcMaxTrackletHits, hitOffset + tpcHits * tpcTrackletHitsPerHit); }
85 inline size_t NTPCSectorTracks(size_t tpcHits) { return getValue(tpcMaxSectorTracks, tpcHits * tpcSectorTracksPerHit); }
86 inline size_t NTPCSectorTrackHits(size_t tpcHits, uint8_t withRejection = 0) { return getValue(tpcMaxSectorTrackHits, tpcHits * (withRejection ? tpcSectorTrackHitsPerHitWithRejection : tpcSectorTrackHitsPerHit)); }
87 inline size_t NTPCMergedTracks(size_t tpcSectorTracks) { return getValue(tpcMaxMergedTracks, tpcSectorTracks * (conservative ? 1.0 : tpcMergedTrackPerSectorTrack)); }
88 inline size_t NTPCMergedTrackHits(size_t tpcSectorTrackHitss) { return getValue(tpcMaxMergedTrackHits, tpcSectorTrackHitss * tpcMergedTrackHitPerSectorHit); }
89 inline size_t NTPCUnattachedHitsBase1024(int32_t type) { return (returnMaxVal || conservative) ? 1024 : std::min<size_t>(1024, tpcCompressedUnattachedHitsBase1024[type] * (doFuzzing == 0 ? scalingFactor : getScalingFactor()) * temporaryFactor); }
90};
91
92} // namespace o2::gpu
93
94#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)