#endif
#if defined(R__WIN32)
-#ifdef INTEL_RUNTIME\r
-#pragma warning(disable : 1786)\r
-#pragma warning(disable : 1478)\r
-#pragma warning(disable : 161)\r
-#endif\r
-\r
-#ifdef VSNET_RUNTIME\r
-#pragma warning(disable : 4616)\r
-#pragma warning(disable : 4996)\r
-#pragma warning(disable : 1684)\r
+#ifdef INTEL_RUNTIME
+#pragma warning(disable : 1786)
+#pragma warning(disable : 1478)
+#pragma warning(disable : 161)
+#endif
+
+#ifdef VSNET_RUNTIME
+#pragma warning(disable : 4616)
+#pragma warning(disable : 4996)
+#pragma warning(disable : 1684)
#endif
#endif
const int useDebugLevel = fDebugLevel;
fDebugLevel = 0;
AliHLTTPCCAClusterData tmpCluster;
- AliHLTTPCCASliceOutput tmpOutput;
+ AliHLTTPCCASliceOutput *tmpOutput = NULL;
AliHLTTPCCAParam tmpParam;
tmpParam.SetNRows(HLTCA_ROW_COUNT);
fSlaveTrackers[0].SetParam(tmpParam);
Reconstruct(&tmpOutput, &tmpCluster, 0, 1);
+ free(tmpOutput);
fDebugLevel = useDebugLevel;
}
#endif
sliceDataHitWeights4[i] = i0;
}
-int AliHLTTPCCAGPUTracker::Reconstruct(AliHLTTPCCASliceOutput* pOutput, AliHLTTPCCAClusterData* pClusterData, int firstSlice, int sliceCountLocal)
+int AliHLTTPCCAGPUTracker::Reconstruct(AliHLTTPCCASliceOutput** pOutput, AliHLTTPCCAClusterData* pClusterData, int firstSlice, int sliceCountLocal)
{
//Primary reconstruction function
cudaStream_t* const cudaStreams = (cudaStream_t*) fpCudaStreams;
HLTInfo("CUDA Compiler was not available during build process, omitting CUDA initialization");
return(1);
}
-void StandalonePerfTime(int /*iSlice*/, int /*i*/) {}
+void AliHLTTPCCAGPUTracker::StandalonePerfTime(int /*iSlice*/, int /*i*/) {}
//template <class T> inline T* AliHLTTPCCAGPUTracker::alignPointer(T* ptr, int alignment) {return(NULL);}
//bool AliHLTTPCCAGPUTracker::CudaFailedMsg(cudaError_t error) {return(true);}
//int AliHLTTPCCAGPUTracker::CUDASync() {return(1);}
void AliHLTTPCCAGPUTracker::SetDebugLevel(int /*dwLevel*/, std::ostream* /*NewOutFile*/) {}
int AliHLTTPCCAGPUTracker::SetGPUTrackerOption(char* /*OptionName*/, int /*OptionValue*/) {return(1);}
-int Reconstruct(AliHLTTPCCASliceOutput* /*pTracker*/, AliHLTTPCCAClusterData* /*pClusterData*/, int /*fFirstSlice*/, int /*fSliceCount*/) {return(1);}
+int AliHLTTPCCAGPUTracker::Reconstruct(AliHLTTPCCASliceOutput** /*pTracker*/, AliHLTTPCCAClusterData* /*pClusterData*/, int /*fFirstSlice*/, int /*fSliceCount*/) {return(1);}
int AliHLTTPCCAGPUTracker::ExitGPU() {return(0);}
int AliHLTTPCCAGPUTracker::InitializeSliceParam(int /*iSlice*/, AliHLTTPCCAParam& /*param*/) {}
+
~AliHLTTPCCAGPUTracker() {};
int InitGPU(int sliceCount = 1, int forceDeviceID = -1);
- int Reconstruct(AliHLTTPCCASliceOutput* pOutput, AliHLTTPCCAClusterData* pClusterData, int fFirstSlice, int fSliceCount = -1);
+ int Reconstruct(AliHLTTPCCASliceOutput** pOutput, AliHLTTPCCAClusterData* pClusterData, int fFirstSlice, int fSliceCount = -1);
int ExitGPU();
void SetDebugLevel(const int dwLevel, std::ostream* const NewOutFile = NULL);
#ifndef HLTCA_GPUCODE
-void AliHLTTPCCASliceOutput::Clear()
-{
- //Clear Slice Output and free Memory
- if (fMemory) delete[] fMemory;
- fMemory = NULL;
- fNOutTracks = 0;
- fNOutTrackHits = 0;
- fNTracks = 0;
- fNTrackClusters = 0;
-}
-
template<typename T> inline void AssignNoAlignment( T *&dst, char *&mem, int count )
{
// assign memory to the pointer dst
mem = ( char * )( dst + count );
}
-void AliHLTTPCCASliceOutput::SetPointers()
+void AliHLTTPCCASliceOutput::SetPointers(int nTracks, int nTrackClusters)
{
// set all pointers
+ if (nTracks == -1) nTracks = fNTracks;
+ if (nTrackClusters == -1) nTrackClusters == fNTrackClusters;
char *mem = fMemory;
- AssignNoAlignment( fTracks, mem, fNTracks );
- AssignNoAlignment( fClusterUnpackedYZ, mem, fNTrackClusters );
- AssignNoAlignment( fClusterUnpackedX, mem, fNTrackClusters );
- AssignNoAlignment( fClusterId, mem, fNTrackClusters );
- AssignNoAlignment( fClusterPackedYZ, mem, fNTrackClusters );
- AssignNoAlignment( fClusterRow, mem, fNTrackClusters );
- AssignNoAlignment( fClusterPackedAmp, mem, fNTrackClusters );
+ AssignNoAlignment( fTracks, mem, nTracks );
+ AssignNoAlignment( fClusterUnpackedYZ, mem, nTrackClusters );
+ AssignNoAlignment( fClusterUnpackedX, mem, nTrackClusters );
+ AssignNoAlignment( fClusterId, mem, nTrackClusters );
+ AssignNoAlignment( fClusterPackedYZ, mem, nTrackClusters );
+ AssignNoAlignment( fClusterRow, mem, nTrackClusters );
+ AssignNoAlignment( fClusterPackedAmp, mem, nTrackClusters );
// memory for output tracks
- AssignMemory( fOutTracks, mem, fNTracks );
+ AssignMemory( fOutTracks, mem, nTracks );
// arrays for track hits
- AssignMemory( fOutTrackHits, mem, fNTrackClusters );
+ AssignMemory( fOutTrackHits, mem, nTrackClusters );
fMemorySize = (mem - fMemory);
}
-void AliHLTTPCCASliceOutput::Allocate()
+void AliHLTTPCCASliceOutput::Allocate(AliHLTTPCCASliceOutput* &ptrOutput, int nTracks, int nTrackHits)
{
//Allocate All memory needed for slice output
- if (fMemory) delete[] fMemory;
- SetPointers(); // to calculate the size
- fMemory = reinterpret_cast<char*> ( new uint4 [ fMemorySize/sizeof( uint4 ) + 100] );
- SetPointers(); // set pointers
+ if (ptrOutput) free(ptrOutput);
+ ptrOutput = (AliHLTTPCCASliceOutput*) malloc(EstimateSize(nTracks, nTrackHits) + nTracks * sizeof(AliHLTTPCCAOutTrack) + nTrackHits * sizeof(int) + 1024);
+ ptrOutput->SetPointers(nTracks, nTrackHits); // set pointers
}
#endif
class AliHLTTPCCASliceOutput
{
public:
-
- AliHLTTPCCASliceOutput()
- : fNTracks( 0 ), fNTrackClusters( 0 ), fTracks( 0 ), fClusterId( 0 ), fClusterRow( 0 ), fClusterPackedYZ( 0 ), fClusterUnpackedYZ( 0 ), fClusterUnpackedX( 0 ), fClusterPackedAmp( 0 ),
- fMemorySize( 0 ), fNOutTracks(0), fNOutTrackHits(0), fOutTracks(0), fOutTrackHits(0), fMemory(NULL) {}
-
- ~AliHLTTPCCASliceOutput()
- {
- if (fMemory) delete[] fMemory;
- }
-
GPUhd() int NTracks() const { return fNTracks; }
GPUhd() int NTrackClusters() const { return fNTrackClusters; }
GPUhd() float ClusterUnpackedX ( int i ) const { return fClusterUnpackedX[i]; }
GPUhd() static int EstimateSize( int nOfTracks, int nOfTrackClusters );
- void SetPointers();
- void Allocate();
+ void SetPointers(int nTracks = -1, int nTrackClusters = -1);
+ static void Allocate(AliHLTTPCCASliceOutput* &ptrOutput, int nTracks, int nTrackHits);
GPUhd() void SetNTracks ( int v ) { fNTracks = v; }
GPUhd() void SetNTrackClusters( int v ) { fNTrackClusters = v; }
GPUhd() void SetClusterUnpackedYZ( int i, float2 v ) { fClusterUnpackedYZ[i] = v; }
GPUhd() void SetClusterUnpackedX( int i, float v ) { fClusterUnpackedX[i] = v; }
- char* Memory() const { return(fMemory); }
- size_t MemorySize() const { return(fMemorySize); }
-
- void Clear();
-
//Obsolete Output
GPUhd() int NOutTracks() const { return(fNOutTracks); }
GPUhd() int OutTrackHit( int i ) const { return fOutTrackHits[i]; }
private:
+ AliHLTTPCCASliceOutput()
+ : fNTracks( 0 ), fNTrackClusters( 0 ), fTracks( 0 ), fClusterId( 0 ), fClusterRow( 0 ), fClusterPackedYZ( 0 ), fClusterUnpackedYZ( 0 ), fClusterUnpackedX( 0 ), fClusterPackedAmp( 0 ),
+ fMemorySize( 0 ), fNOutTracks(0), fNOutTrackHits(0), fOutTracks(0), fOutTrackHits(0) {}
+ ~AliHLTTPCCASliceOutput() {}
const AliHLTTPCCASliceOutput& operator=( const AliHLTTPCCASliceOutput& ) const { return *this; }
AliHLTTPCCASliceOutput( const AliHLTTPCCASliceOutput& );
int *fOutTrackHits; // output array of ID's of the reconstructed hits
//Must be last element of this class, user has to make sure to allocate anough memory consecutive to class memory!
- char* fMemory; // the memory where the pointers above point into
+ //This way the whole Slice Output is one consecutive Memory Segment
+ char fMemory[1]; // the memory where the pointers above point into
};
fLastTime[i] = 0;
fStatTime[i] = 0;
}
+ for ( int i = 0;i < fgkNSlices;i++) fSliceOutput[i] = NULL;
}
AliHLTTPCCAStandaloneFramework::AliHLTTPCCAStandaloneFramework( const AliHLTTPCCAStandaloneFramework& )
AliHLTTPCCAStandaloneFramework::~AliHLTTPCCAStandaloneFramework()
{
+ for (int i = 0;i < fgkNSlices;i++) if (fSliceOutput[i]) free(fSliceOutput[i]);
//* destructor
}
fMerger.SetSliceParam( fTracker.Param(0) );
for ( int i = 0; i < fgkNSlices; i++ ) {
- fMerger.SetSliceData( i, &fSliceOutput[i] );
+ fMerger.SetSliceData( i, fSliceOutput[i] );
}
fMerger.Reconstruct();
const AliHLTTPCCAParam &Param ( int iSlice ) const { return(fTracker.Param(iSlice)); }
const AliHLTTPCCARow &Row ( int iSlice, int iRow ) const { return(fTracker.Row(iSlice, iRow)); }
- const AliHLTTPCCASliceOutput &Output( int iSlice ) const { return fSliceOutput[iSlice]; }
+ const AliHLTTPCCASliceOutput &Output( int iSlice ) const { return *fSliceOutput[iSlice]; }
AliHLTTPCCAMerger &Merger() { return fMerger; }
AliHLTTPCCAClusterData &ClusterData( int iSlice ) { return fClusterData[iSlice]; }
AliHLTTPCCAMerger fMerger; //* global merger
AliHLTTPCCAClusterData fClusterData[fgkNSlices];
- AliHLTTPCCASliceOutput fSliceOutput[fgkNSlices];
+ AliHLTTPCCASliceOutput* fSliceOutput[fgkNSlices];
AliHLTTPCCATrackerFramework fTracker;
{
if ( NHitsTotal() < 1 ) {
{
- SetPointersTracks( 1, 1 ); // to calculate the size
- fTrackMemory = reinterpret_cast<char*> ( new uint4 [ fTrackMemorySize/sizeof( uint4 ) + 100] );
- SetPointersTracks( 1, 1 ); // set pointers for tracks
- fOutput->SetNTracks( 0 );
- fOutput->SetNTrackClusters( 0 );
+ AliHLTTPCCASliceOutput::Allocate(*fOutput, 0, 0);
+ AliHLTTPCCASliceOutput* useOutput = *fOutput;
+ useOutput->SetNTracks( 0 );
+ useOutput->SetNTrackClusters( 0 );
+ useOutput->SetNOutTracks(0);
+ useOutput->SetNOutTrackHits(0);
}
return 1;
StandalonePerfTime(0);
- fOutput->Clear();
-
if (CheckEmptySlice()) return;
#ifdef DRAW1
//cout<<"output: nTracks = "<<*fNTracks<<", nHitsTotal="<<NHitsTotal()<<std::endl;
- fOutput->SetNTracks( fCommonMem->fNTracks );
- fOutput->SetNTrackClusters( fCommonMem->fNTrackHits );
- fOutput->Allocate();
+ AliHLTTPCCASliceOutput::Allocate(*fOutput, fCommonMem->fNTracks, fCommonMem->fNTrackHits);
+ AliHLTTPCCASliceOutput* useOutput = *fOutput;
+
+ useOutput->SetNTracks( fCommonMem->fNTracks );
+ useOutput->SetNTrackClusters( fCommonMem->fNTrackHits );
int nStoredHits = 0;
out.SetNClusters( iTrack.NHits() );
out.SetParam( iTrack.Param() );
- fOutput->SetTrack( iTr, out );
+ useOutput->SetTrack( iTr, out );
int iID = iTrack.FirstHitID();
for ( int ith = 0; ith < iTrack.NHits(); ith++ ) {
hUnpackedYZ.y = origZ;
float hUnpackedX = origX;
- fOutput->SetClusterId( nStoredHits, id );
- fOutput->SetClusterRow( nStoredHits, ( unsigned char ) iRow );
- fOutput->SetClusterPackedYZ( nStoredHits, hPackedYZ );
- fOutput->SetClusterPackedAmp( nStoredHits, hPackedAmp );
- fOutput->SetClusterUnpackedYZ( nStoredHits, hUnpackedYZ );
- fOutput->SetClusterUnpackedX( nStoredHits, hUnpackedX );
+ useOutput->SetClusterId( nStoredHits, id );
+ useOutput->SetClusterRow( nStoredHits, ( unsigned char ) iRow );
+ useOutput->SetClusterPackedYZ( nStoredHits, hPackedYZ );
+ useOutput->SetClusterPackedAmp( nStoredHits, hPackedAmp );
+ useOutput->SetClusterUnpackedYZ( nStoredHits, hUnpackedYZ );
+ useOutput->SetClusterUnpackedX( nStoredHits, hUnpackedX );
nStoredHits++;
}
}
// old stuff
#ifndef HLTCA_STANDALONE
- fOutput->SetNOutTrackHits(0);
- fOutput->SetNOutTracks(0);
+ useOutput->SetNOutTrackHits(0);
+ useOutput->SetNOutTracks(0);
for ( int iTr = 0; iTr < fCommonMem->fNTracks; iTr++ ) {
//if( !iTrack.Alive() ) continue;
if ( iTrack.NHits() < 3 ) continue;
- AliHLTTPCCAOutTrack &out = fOutput->OutTracks()[fOutput->NOutTracks()];
- out.SetFirstHitRef( fOutput->NOutTrackHits() );
+ AliHLTTPCCAOutTrack &out = useOutput->OutTracks()[useOutput->NOutTracks()];
+ out.SetFirstHitRef( useOutput->NOutTrackHits() );
out.SetNHits( 0 );
out.SetOrigTrackID( iTr );
out.SetStartPoint( iTrack.Param() );
out.SetEndPoint( iTrack.Param() );
int iID = iTrack.FirstHitID();
- int nOutTrackHitsOld = fOutput->NOutTrackHits();
+ int nOutTrackHitsOld = useOutput->NOutTrackHits();
for ( int ith = 0; ith < iTrack.NHits(); ith++ ) {
const AliHLTTPCCAHitId &ic = fTrackHits[iID + ith];
const AliHLTTPCCARow &row = Row( ic );
int ih = ic.HitIndex();
- fOutput->SetOutTrackHit(fOutput->NOutTrackHits(), HitInputID( row, ih ));
- fOutput->SetNOutTrackHits(fOutput->NOutTrackHits() + 1 );
+ useOutput->SetOutTrackHit(useOutput->NOutTrackHits(), HitInputID( row, ih ));
+ useOutput->SetNOutTrackHits(useOutput->NOutTrackHits() + 1 );
//std::cout<<"write i,row,hit,id="<<ith<<", "<<ID2IRow(ic)<<", "<<ih<<", "<<HitInputID( row, ih )<<std::endl;
- if ( fOutput->NOutTrackHits() >= 10*NHitsTotal() ) {
+ if ( useOutput->NOutTrackHits() >= 10*NHitsTotal() ) {
std::cout << "fNOutTrackHits>NHitsTotal()" << std::endl;
//exit(0);
return;//SG!!!
out.SetNHits( out.NHits() + 1 );
}
if ( out.NHits() >= 2 ) {
- fOutput->SetNOutTracks(fOutput->NOutTracks() + 1);
+ useOutput->SetNOutTracks(useOutput->NOutTracks() + 1);
} else {
- fOutput->SetNOutTrackHits(nOutTrackHitsOld);
+ useOutput->SetNOutTrackHits(nOutTrackHitsOld);
}
}
#endif
GPUh() void AliHLTTPCCATracker::WriteTracks( std::ostream &out )
{
//* Write tracks to file
+ AliHLTTPCCASliceOutput* useOutput = *fOutput;
out << fTimers[0] << std::endl;
- out << fOutput->NOutTrackHits() << std::endl;
- for ( int ih = 0; ih < fOutput->NOutTrackHits(); ih++ ) {
- out << fOutput->OutTrackHit(ih) << " ";
+ out << useOutput->NOutTrackHits() << std::endl;
+ for ( int ih = 0; ih < useOutput->NOutTrackHits(); ih++ ) {
+ out << useOutput->OutTrackHit(ih) << " ";
}
out << std::endl;
- out << fOutput->NOutTracks() << std::endl;
+ out << useOutput->NOutTracks() << std::endl;
- for ( int itr = 0; itr < fOutput->NOutTracks(); itr++ ) {
- const AliHLTTPCCAOutTrack &t = fOutput->OutTrack(itr);
+ for ( int itr = 0; itr < useOutput->NOutTracks(); itr++ ) {
+ const AliHLTTPCCAOutTrack &t = useOutput->OutTrack(itr);
AliHLTTPCCATrackParam p1 = t.StartPoint();
AliHLTTPCCATrackParam p2 = t.EndPoint();
out << t.NHits() << " ";
GPUh() void AliHLTTPCCATracker::ReadTracks( std::istream &in )
{
//* Read tracks from file
- int tmpval;
+ AliHLTTPCCASliceOutput::Allocate(*fOutput, 4096, 16384);//Just some max values
+ AliHLTTPCCASliceOutput* useOutput = *fOutput;
+
+ int tmpval;
in >> fTimers[0];
in >> tmpval;
- fOutput->SetNOutTrackHits(tmpval);
+ useOutput->SetNOutTrackHits(tmpval);
- for ( int ih = 0; ih < fOutput->NOutTrackHits(); ih++ ) {
+ for ( int ih = 0; ih < useOutput->NOutTrackHits(); ih++ ) {
in >> tmpval;
- fOutput->SetOutTrackHit(ih, tmpval);
+ useOutput->SetOutTrackHit(ih, tmpval);
}
in >> tmpval;
- fOutput->SetNOutTracks(tmpval);
+ useOutput->SetNOutTracks(tmpval);
- for ( int itr = 0; itr < fOutput->NOutTracks(); itr++ ) {
- AliHLTTPCCAOutTrack &t = fOutput->OutTracks()[itr];
+ for ( int itr = 0; itr < useOutput->NOutTracks(); itr++ ) {
+ AliHLTTPCCAOutTrack &t = useOutput->OutTracks()[itr];
AliHLTTPCCATrackParam p1, p2;
int i;
float f;
void SetPointersTracklets ( int MaxNTracklets );
void SetPointersTracks( int MaxNTracks, int MaxNHits );
- void SetOutput( AliHLTTPCCASliceOutput* out ) { fOutput = out; }
+ void SetOutput( AliHLTTPCCASliceOutput** out ) { fOutput = out; }
void ReadEvent( AliHLTTPCCAClusterData *clusterData );
GPUhd() int *NTrackHits() const { return &fCommonMem->fNTrackHits; }
GPUhd() AliHLTTPCCAHitId *TrackHits() const { return fTrackHits; }
- GPUhd() AliHLTTPCCASliceOutput * Output() const { return fOutput; }
+ GPUhd() AliHLTTPCCASliceOutput** Output() const { return fOutput; }
GPUh() commonMemoryStruct *CommonMemory() {return(fCommonMem); }
static GPUh() size_t CommonMemorySize() { return(sizeof(AliHLTTPCCATracker::commonMemoryStruct)); }
GPUh() size_t TrackletMemorySize() const {return(fTrackletMemorySize); }
GPUh() char* &TrackMemory() {return(fTrackMemory); }
GPUh() size_t TrackMemorySize() const {return(fTrackMemorySize); }
- GPUh() char* OutputMemory() const {return(fOutput->Memory()); }
- GPUh() size_t OutputMemorySize() const {return(fOutput->MemorySize()); }
GPUhd() AliHLTTPCCARow* SliceDataRows() {return(fData.Rows()); }
GPUhd() uint3* RowStartHitCountOffset() const {return(fRowStartHitCountOffset);}
// output
- AliHLTTPCCASliceOutput *fOutput;
+ AliHLTTPCCASliceOutput **fOutput;
// disable copy
AliHLTTPCCATracker( const AliHLTTPCCATracker& );
{
// see header file for class documentation
delete fTracker;
- delete fOutput;
+ if (fOutput) free(fOutput);
}
//
fTracker = new AliHLTTPCCATrackerFramework();
- fOutput = new AliHLTTPCCASliceOutput();
TString arguments = "";
for ( int i = 0; i < argc; i++ ) {
// see header file for class documentation
delete fTracker;
fTracker = NULL;
- delete fOutput;
+ free(fOutput);
fOutput = NULL;
return 0;
}
{
if ( !fTracker ) fTracker = new AliHLTTPCCATrackerFramework;
- if ( !fOutput ) fOutput = new AliHLTTPCCASliceOutput;
int iSec = slice;
float inRmin = 83.65;
// float inRmax = 133.3;
TStopwatch timerReco;
- fTracker->ProcessSlices(slice, 1, &clusterData, fOutput);
+ fTracker->ProcessSlices(slice, 1, &clusterData, &fOutput);
timerReco.Stop();
return(0);
}
-int AliHLTTPCCATrackerFramework::ProcessSlices(int firstSlice, int sliceCount, AliHLTTPCCAClusterData* pClusterData, AliHLTTPCCASliceOutput* pOutput)
+int AliHLTTPCCATrackerFramework::ProcessSlices(int firstSlice, int sliceCount, AliHLTTPCCAClusterData* pClusterData, AliHLTTPCCASliceOutput** pOutput)
{
//Process sliceCount slices starting from firstslice, in is pClusterData array, out pOutput array
if (fUseGPUTracker)
AliHLTTPCCATrackerFramework() :
fGPUTrackerAvailable(false), fUseGPUTracker(false), fGPUDebugLevel(0), fGPUSliceCount(0), fGPUTracker(), fCPUSliceCount(fgkNSlices)
{
- fGPUTrackerAvailable = fUseGPUTracker = fGPUSliceCount = (fGPUTracker.InitGPU(1, -1) == 0);
+ fGPUTrackerAvailable= (fGPUTracker.InitGPU(1, -1) == 0);
+ fGPUSliceCount = fGPUTrackerAvailable;
+ fUseGPUTracker = fGPUTrackerAvailable;
}
~AliHLTTPCCATrackerFramework()
{}
int InitializeSliceParam(int iSlice, AliHLTTPCCAParam ¶m);
- int ProcessSlices(int firstSlice, int sliceCount, AliHLTTPCCAClusterData* pClusterData, AliHLTTPCCASliceOutput* pOutput);
+ int ProcessSlices(int firstSlice, int sliceCount, AliHLTTPCCAClusterData* pClusterData, AliHLTTPCCASliceOutput** pOutput);
unsigned long long int* PerfTimer(int GPU, int iSlice, int iTimer);
int MaxSliceCount() const { return(fUseGPUTracker ? fGPUSliceCount : fCPUSliceCount); }
};
-#endif
+#endif
\ No newline at end of file