From e65db74325513558a5ad04ffd552d6fe61063aae Mon Sep 17 00:00:00 2001 From: sgorbuno Date: Sat, 21 Nov 2009 14:50:36 +0000 Subject: [PATCH] Keep the input block untouched. It seems that the component memory increases when the input block is modified. --- .../AliHLTTPCCAGlobalMergerComponent.cxx | 2 + HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.cxx | 14 ++++++- HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.h | 1 + .../tracking-ca/AliHLTTPCCASliceOutput.cxx | 20 +++++----- .../tracking-ca/AliHLTTPCCASliceOutput.h | 38 +++++++++++-------- 5 files changed, 48 insertions(+), 27 deletions(-) diff --git a/HLT/TPCLib/tracking-ca/AliHLTTPCCAGlobalMergerComponent.cxx b/HLT/TPCLib/tracking-ca/AliHLTTPCCAGlobalMergerComponent.cxx index 8261208f13d..63052ca74bb 100644 --- a/HLT/TPCLib/tracking-ca/AliHLTTPCCAGlobalMergerComponent.cxx +++ b/HLT/TPCLib/tracking-ca/AliHLTTPCCAGlobalMergerComponent.cxx @@ -445,8 +445,10 @@ int AliHLTTPCCAGlobalMergerComponent::DoEvent( const AliHLTComponentEventData &e size = resultData.fSize; } + HLTInfo( "CAGlobalMerger:: output %d tracks", mergerOutput->NTracks() ); + fGlobalMerger->Clear(); /* old format { diff --git a/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.cxx b/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.cxx index 94c56f4e9bd..5353a3454dc 100644 --- a/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.cxx +++ b/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.cxx @@ -146,14 +146,24 @@ AliHLTTPCCAMerger::~AliHLTTPCCAMerger() //* destructor if ( fTrackInfos ) delete[] fTrackInfos; if ( fClusterInfos ) delete[] fClusterInfos; - if ( fOutput ) delete[] ( ( char* )( fOutput ) ); + if ( fOutput ) delete[] ( ( float2* )( fOutput ) ); } void AliHLTTPCCAMerger::Clear() { for ( int i = 0; i < fgkNSlices; ++i ) { fkSlices[i] = 0; + fSliceNTrackInfos[ i ] = 0; + fSliceTrackInfoStart[ i ] = 0; } + if ( fOutput ) delete[] ( ( float2* )( fOutput ) ); + if ( fTrackInfos ) delete[] fTrackInfos; + if ( fClusterInfos ) delete[] fClusterInfos; + fOutput = 0; + fTrackInfos = 0; + fClusterInfos = 0; + fMaxTrackInfos = 0; + fMaxClusterInfos = 0; } @@ -198,7 +208,7 @@ void AliHLTTPCCAMerger::UnpackSlices() fClusterInfos = new AliHLTTPCCAClusterInfo [fMaxClusterInfos]; } - if ( fOutput ) delete[] ( ( char* )( fOutput ) ); + if ( fOutput ) delete[] ( ( float2* )( fOutput ) ); int size = fOutput->EstimateSize( nTracksTotal, nTrackClustersTotal ); fOutput = ( AliHLTTPCCAMergerOutput* )( new float2[size/sizeof( float2 )+1] ); } diff --git a/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.h b/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.h index 39b683a3efe..95c2a453659 100644 --- a/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.h +++ b/HLT/TPCLib/tracking-ca/AliHLTTPCCAMerger.h @@ -90,6 +90,7 @@ class AliHLTTPCCAMerger static float GetChi2( float x1, float y1, float a00, float a10, float a11, float x2, float y2, float b00, float b10, float b11 ); + private: AliHLTTPCCAMerger( const AliHLTTPCCAMerger& ); diff --git a/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.cxx b/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.cxx index 05d461992aa..d2623fa8f41 100644 --- a/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.cxx +++ b/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.cxx @@ -32,11 +32,11 @@ GPUhd() int AliHLTTPCCASliceOutput::EstimateSize( int nOfTracks, int nOfTrackClu #ifndef HLTCA_GPUCODE -template inline void AssignNoAlignment( T *&dst, char *&mem, int count ) +inline void AssignNoAlignment( int &dst, int &size, int count ) { // assign memory to the pointer dst - dst = ( T* ) mem; - mem = ( char * )( dst + count ); + dst = size; + size = dst + count ; } void AliHLTTPCCASliceOutput::SetPointers(int nTracks, int nTrackClusters, const outputControlStruct* outputControl) @@ -45,17 +45,19 @@ void AliHLTTPCCASliceOutput::SetPointers(int nTracks, int nTrackClusters, const if (nTracks == -1) nTracks = fNTracks; if (nTrackClusters == -1) nTrackClusters = fNTrackClusters; - char *mem = fMemory; + int size = 0; if (outputControl == NULL || outputControl->fDefaultOutput) { - AssignNoAlignment( fTracks, mem, nTracks ); - AssignNoAlignment( fClusterUnpackedYZ, mem, nTrackClusters ); - AssignNoAlignment( fClusterUnpackedX, mem, nTrackClusters ); - AssignNoAlignment( fClusterId, mem, nTrackClusters ); - AssignNoAlignment( fClusterRow, mem, nTrackClusters ); + AssignNoAlignment( fTracksOffset, size, nTracks*sizeof(AliHLTTPCCASliceTrack) ); + AssignNoAlignment( fClusterUnpackedYZOffset, size, nTrackClusters*sizeof(int) ); + AssignNoAlignment( fClusterUnpackedXOffset, size, nTrackClusters*sizeof(UChar_t) ); + AssignNoAlignment( fClusterIdOffset, size, nTrackClusters*sizeof(float2) ); + AssignNoAlignment( fClusterRowOffset, size, nTrackClusters*sizeof(float) ); } + char *mem = fMemory + size; + if (outputControl == NULL || outputControl->fObsoleteOutput) { // memory for output tracks diff --git a/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.h b/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.h index 3f740d822df..f9dbe7d67bb 100644 --- a/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.h +++ b/HLT/TPCLib/tracking-ca/AliHLTTPCCASliceOutput.h @@ -44,11 +44,11 @@ class AliHLTTPCCASliceOutput GPUhd() int NTracks() const { return fNTracks; } GPUhd() int NTrackClusters() const { return fNTrackClusters; } - GPUhd() const AliHLTTPCCASliceTrack &Track( int i ) const { return fTracks[i]; } - GPUhd() unsigned char ClusterRow ( int i ) const { return fClusterRow[i]; } - GPUhd() int ClusterId ( int i ) const { return fClusterId[i]; } - GPUhd() float2 ClusterUnpackedYZ ( int i ) const { return fClusterUnpackedYZ[i]; } - GPUhd() float ClusterUnpackedX ( int i ) const { return fClusterUnpackedX[i]; } + GPUhd() const AliHLTTPCCASliceTrack &Track( int i ) const { return TracksP()[i]; } + GPUhd() unsigned char ClusterRow ( int i ) const { return ClusterRowP()[i]; } + GPUhd() int ClusterId ( int i ) const { return ClusterIdP()[i]; } + GPUhd() float2 ClusterUnpackedYZ ( int i ) const { return ClusterUnpackedYZP()[i]; } + GPUhd() float ClusterUnpackedX ( int i ) const { return ClusterUnpackedXP()[i]; } GPUhd() static int EstimateSize( int nOfTracks, int nOfTrackClusters ); void SetPointers(int nTracks = -1, int nTrackClusters = -1, const outputControlStruct* outputControl = NULL); @@ -57,11 +57,11 @@ class AliHLTTPCCASliceOutput GPUhd() void SetNTracks ( int v ) { fNTracks = v; } GPUhd() void SetNTrackClusters( int v ) { fNTrackClusters = v; } - GPUhd() void SetTrack( int i, const AliHLTTPCCASliceTrack &v ) { fTracks[i] = v; } - GPUhd() void SetClusterRow( int i, unsigned char v ) { fClusterRow[i] = v; } - GPUhd() void SetClusterId( int i, int v ) { fClusterId[i] = v; } - GPUhd() void SetClusterUnpackedYZ( int i, float2 v ) { fClusterUnpackedYZ[i] = v; } - GPUhd() void SetClusterUnpackedX( int i, float v ) { fClusterUnpackedX[i] = v; } + GPUhd() void SetTrack( int i, const AliHLTTPCCASliceTrack &v ) { TracksP()[i] = v; } + GPUhd() void SetClusterRow( int i, unsigned char v ) { ClusterRowP()[i] = v; } + GPUhd() void SetClusterId( int i, int v ) { ClusterIdP()[i] = v; } + GPUhd() void SetClusterUnpackedYZ( int i, float2 v ) { ClusterUnpackedYZP()[i] = v; } + GPUhd() void SetClusterUnpackedX( int i, float v ) { ClusterUnpackedXP()[i] = v; } GPUhd() size_t OutputMemorySize() const { return(fMemorySize); } @@ -78,7 +78,7 @@ class AliHLTTPCCASliceOutput private: AliHLTTPCCASliceOutput() - : fNTracks( 0 ), fNTrackClusters( 0 ), fTracks( 0 ), fClusterId( 0 ), fClusterRow( 0 ), fClusterUnpackedYZ( 0 ), fClusterUnpackedX( 0 ), + : fNTracks( 0 ), fNTrackClusters( 0 ), fTracksOffset( 0 ), fClusterIdOffset( 0 ), fClusterRowOffset( 0 ), fClusterUnpackedYZOffset( 0 ), fClusterUnpackedXOffset( 0 ), fMemorySize( 0 ), fNOutTracks(0), fNOutTrackHits(0), fOutTracks(0), fOutTrackHits(0) {} ~AliHLTTPCCASliceOutput() {} @@ -87,13 +87,19 @@ class AliHLTTPCCASliceOutput GPUh() void SetMemorySize(size_t val) { fMemorySize = val; } + GPUh() AliHLTTPCCASliceTrack *TracksP() const { return (AliHLTTPCCASliceTrack*)(fMemory+fTracksOffset); } + GPUh() int *ClusterIdP() const { return (int*)(fMemory+fClusterIdOffset); } + GPUh() UChar_t *ClusterRowP() const { return (UChar_t *)(fMemory+fClusterRowOffset); } + GPUh() float2 *ClusterUnpackedYZP() const { return (float2 *)(fMemory+fClusterUnpackedYZOffset); } + GPUh() float *ClusterUnpackedXP() const { return (float *)(fMemory+fClusterUnpackedXOffset); } + int fNTracks; // number of reconstructed tracks int fNTrackClusters; // total number of track clusters - AliHLTTPCCASliceTrack *fTracks; // pointer to reconstructed tracks - int *fClusterId; // pointer to cluster Id's ( packed slice, patch, cluster ) - UChar_t *fClusterRow; // pointer to cluster row numbers - float2 *fClusterUnpackedYZ; // pointer to cluster coordinates (temporary data, for debug proposes) - float *fClusterUnpackedX; // pointer to cluster coordinates (temporary data, for debug proposes) + int fTracksOffset; // pointer to reconstructed tracks + int fClusterIdOffset; // pointer to cluster Id's ( packed slice, patch, cluster ) + int fClusterRowOffset; // pointer to cluster row numbers + int fClusterUnpackedYZOffset; // pointer to cluster coordinates (temporary data, for debug proposes) + int fClusterUnpackedXOffset; // pointer to cluster coordinates (temporary data, for debug proposes) size_t fMemorySize; // Amount of memory really used // obsolete output -- 2.39.3