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