diff --git a/reco/KF/CbmKFParticleFinder.cxx b/reco/KF/CbmKFParticleFinder.cxx index bfa255572fc59d88a8b5653ff4221d43b115628b..23e8aef0b9439a5797433e6a0b1773bc44019ff4 100644 --- a/reco/KF/CbmKFParticleFinder.cxx +++ b/reco/KF/CbmKFParticleFinder.cxx @@ -283,8 +283,8 @@ void CbmKFParticleFinder::Exec(Option_t* /*opt*/) fitter.CalculateFieldRegionAtLastPoint(vRTracks, vFieldAtLastPoint); vector<KFFieldVector> vFieldVector(ntracks), vFieldVectorAtLastPoint(ntracks); for (Int_t iTr = 0; iTr < ntracks; iTr++) { - int entrSIMD = iTr % fvecLen; - int entrVec = iTr / fvecLen; + int entrSIMD = iTr % fvec::size(); + int entrVec = iTr / fvec::size(); vFieldVector[iTr].fField[0] = vField[entrVec].cx0[entrSIMD]; vFieldVector[iTr].fField[1] = vField[entrVec].cx1[entrSIMD]; vFieldVector[iTr].fField[2] = vField[entrVec].cx2[entrSIMD]; @@ -297,8 +297,8 @@ void CbmKFParticleFinder::Exec(Option_t* /*opt*/) vFieldVector[iTr].fField[9] = vField[entrVec].z0[entrSIMD]; } for (Int_t iTr = 0; iTr < ntracks; iTr++) { - int entrSIMD = iTr % fvecLen; - int entrVec = iTr / fvecLen; + int entrSIMD = iTr % fvec::size(); + int entrVec = iTr / fvec::size(); vFieldVectorAtLastPoint[iTr].fField[0] = vFieldAtLastPoint[entrVec].cx0[entrSIMD]; vFieldVectorAtLastPoint[iTr].fField[1] = vFieldAtLastPoint[entrVec].cx1[entrSIMD]; vFieldVectorAtLastPoint[iTr].fField[2] = vFieldAtLastPoint[entrVec].cx2[entrSIMD]; diff --git a/reco/KF/CbmKFParticleInterface.cxx b/reco/KF/CbmKFParticleInterface.cxx index b117af3b16231efc95dea2d01e484be92b84f2cf..690f4ca947eb3356f9efb551b188133effcd91bd 100644 --- a/reco/KF/CbmKFParticleInterface.cxx +++ b/reco/KF/CbmKFParticleInterface.cxx @@ -117,8 +117,8 @@ void CbmKFParticleInterface::SetKFParticleFromStsTrack(CbmStsTrack* track, KFPar cov[20] = cpzpz; float field[10]; - int entrSIMD = iTr % fvecLen; - int entrVec = iTr / fvecLen; + int entrSIMD = iTr % fvec::size(); + int entrVec = iTr / fvec::size(); field[0] = vField[entrVec].cx0[entrSIMD]; field[1] = vField[entrVec].cx1[entrSIMD]; field[2] = vField[entrVec].cx2[entrSIMD]; diff --git a/reco/L1/L1Algo/L1CATrackFinder.cxx b/reco/L1/L1Algo/L1CATrackFinder.cxx index ef14eb2e54b9c689cc16a16f0d170fd1909be51a..6fa5e9b0cc6a20346e2d853fabdd48c5105d3d0b 100644 --- a/reco/L1/L1Algo/L1CATrackFinder.cxx +++ b/reco/L1/L1Algo/L1CATrackFinder.cxx @@ -86,7 +86,7 @@ inline void L1Algo::findSingletsStep0( // input /// the data is orginesed in order to be used by SIMD const Tindex end_lh = start_lh + n1_l; - const int lastV = (n1_l - 1) / fvecLen; + const int lastV = (n1_l - 1) / fvec::size(); if (lastV >= 0) { // set some positive errors to unfilled part of vectors in order to avoid nans L1HitPoint& hitl = Hits_l[0]; @@ -100,8 +100,8 @@ inline void L1Algo::findSingletsStep0( // input } for (Tindex ilh = start_lh, i1 = 0; ilh < end_lh; ++ilh, ++i1) { - Tindex i1_V = i1 / fvecLen; - Tindex i1_4 = i1 % fvecLen; + Tindex i1_V = i1 / fvec::size(); + Tindex i1_4 = i1 % fvec::size(); L1HitPoint& hitl = Hits_l[ilh]; @@ -388,8 +388,8 @@ inline void L1Algo::findDoubletsStep0( for (Tindex i1 = 0; i1 < n1; ++i1) // for each singlet { unsigned int Ndoublets = 0; - const Tindex i1_V = i1 / fvecLen; - const Tindex i1_4 = i1 % fvecLen; + const Tindex i1_V = i1 / fvec::size(); + const Tindex i1_4 = i1 % fvec::size(); L1TrackPar& T1 = T_1[i1_V]; // assert(T1.IsEntryConsistent(true, i1_4)); @@ -562,8 +562,8 @@ inline void L1Algo::findTripletsStep0( // input int iStaM = &stam - fParameters.GetStations().begin(); int iStaR = &star - fParameters.GetStations().begin(); - L1HitIndex_t hitsl_2[fvecLen]; - L1HitIndex_t hitsm_2_tmp[fvecLen]; + L1HitIndex_t hitsl_2[fvec::size()]; + L1HitIndex_t hitsm_2_tmp[fvec::size()]; fvec fvec_0 = 0.f; fvec fvec_1 = 1.f; L1TrackPar L1TrackPar_0; @@ -610,15 +610,15 @@ inline void L1Algo::findTripletsStep0( // input fvec timeM = 0.f; fvec timeMEr = 1.f; - Tindex n2_4 = 0; - for (; n2_4 < fvecLen && i2 < n2; i2++) { + size_t n2_4 = 0; + for (; n2_4 < fvec::size() && i2 < n2; i2++) { // if (!mrDuplets[hitsm_2[i2]]) { // n2_4--; // continue; // } const Tindex& i1 = i1_2[i2]; - const Tindex i1_V = i1 / fvecLen; - const Tindex i1_4 = i1 % fvecLen; + const Tindex i1_V = i1 / fvec::size(); + const Tindex i1_4 = i1 % fvec::size(); const L1TrackPar& T1 = T_1[i1_V]; @@ -745,7 +745,7 @@ inline void L1Algo::findTripletsStep0( // input // assert(T2.IsConsistent(true, n2_4)); // ---- Find the triplets(right hit). Reformat data in the portion of triplets. ---- - for (Tindex i2_4 = 0; i2_4 < n2_4; ++i2_4) { + for (size_t i2_4 = 0; i2_4 < n2_4; ++i2_4) { //if (!T2.IsEntryConsistent(false, i2_4)) { continue; } if (kSts == fTrackingMode && (T2.C44[i2_4] < 0)) { continue; } @@ -894,8 +894,8 @@ inline void L1Algo::findTripletsStep0( // input n3++; Ntriplets++; - n3_V = n3 / fvecLen; - n3_4 = n3 % fvecLen; + n3_V = n3 / fvec::size(); + n3_4 = n3 % fvec::size(); if (!n3_4) { T_3.push_back(L1TrackPar_0); @@ -918,14 +918,14 @@ inline void L1Algo::findTripletsStep0( // input n3 = n3 - Ntriplets; - T_3.resize(n3 / fvecLen); - u_front_3.resize(n3 / fvecLen); - u_back_3.resize(n3 / fvecLen); - z_Pos_3.resize(n3 / fvecLen); - du_.resize(n3 / fvecLen); - dv_.resize(n3 / fvecLen); - timeR.resize(n3 / fvecLen); - timeER.resize(n3 / fvecLen); + T_3.resize(n3 / fvec::size()); + u_front_3.resize(n3 / fvec::size()); + u_back_3.resize(n3 / fvec::size()); + z_Pos_3.resize(n3 / fvec::size()); + du_.resize(n3 / fvec::size()); + dv_.resize(n3 / fvec::size()); + timeR.resize(n3 / fvec::size()); + timeER.resize(n3 / fvec::size()); cout << "L1: GetMaxTripletPerDoublets==" << fParameters.GetMaxTripletPerDoublets() << " reached in findTripletsStep0()" << endl; //assert(0); @@ -1019,8 +1019,8 @@ inline void L1Algo::findTripletsStep2( // input // TODO not updated after gaps }; for (int i3 = 0; i3 < n3; ++i3) { - int i3_V = i3 / fvecLen; - int i3_4 = i3 % fvecLen; + int i3_V = i3 / fvec::size(); + int i3_4 = i3 % fvec::size(); L1TrackPar& T3 = T_3[i3_V]; @@ -1208,8 +1208,8 @@ inline void L1Algo::findTripletsStep3( // input L1HitIndex_t ihitl_prev = 0; for (Tindex i3 = 0; i3 < n3; ++i3) { - const Tindex i3_V = i3 / fvecLen; - const Tindex i3_4 = i3 % fvecLen; + const Tindex i3_V = i3 / fvec::size(); + const Tindex i3_4 = i3 % fvec::size(); L1TrackPar& T3 = T_3[i3_V]; @@ -1458,7 +1458,7 @@ inline void L1Algo::DupletsStaPort( L1_ASSERT(hitsl_1[i] < HitsUnusedStopIndex[istal] - HitsUnusedStartIndex[istal], hitsl_1[i] << " < " << HitsUnusedStopIndex[istal] - HitsUnusedStartIndex[istal]); - Tindex n1_V = (n1 + fvecLen - 1) / fvecLen; + Tindex n1_V = (n1 + fvec::size() - 1) / fvec::size(); /// Get the field approximation. Add the target to parameters estimation. Propagaete to middle station. @@ -1603,7 +1603,7 @@ inline void L1Algo::TripletsStaPort( /// creates triplets: du3, dv3, timeR, timeER); - n3_V = (n3 + fvecLen - 1) / fvecLen; + n3_V = (n3 + fvec::size() - 1) / fvec::size(); for (Tindex i = 0; i < static_cast<Tindex>(hitsl_3.size()); ++i) L1_assert(hitsl_3[i] < HitsUnusedStopIndex[istal] - HitsUnusedStartIndex[istal]); diff --git a/reco/L1/L1Algo/L1Constants.h b/reco/L1/L1Algo/L1Constants.h index c2ae4b477c934f9614bb3bd6433af0cf7b4e0ebe..da07c75d8a4d1cac4dcd383130d904f04ba698fe 100644 --- a/reco/L1/L1Algo/L1Constants.h +++ b/reco/L1/L1Algo/L1Constants.h @@ -38,13 +38,13 @@ namespace L1Constants constexpr int kMaxNtriplets = 1u << kTripletBits; ///< Max number of triplets, 2^20 = 1,048,576 // TODO: Clarify the meaning of these coefficients - constexpr int kCoeff = 64 / 4; ///< TODO: - constexpr int kPortionLeftHits = 1024 / kCoeff; ///< portion of left hits - constexpr int kPortionLeftHitsP = 1024 / kCoeff / fvecLen; ///< portion of left hits per one vector word - constexpr int kMaxPortionDoublets = 10000 / 5 * 64 / 2 / kCoeff; ///< Max size of the doublets portion - constexpr int kMaxPortionTriplets = 10000 * 5 * 64 / 2 / kCoeff; ///< Max size of the triplets portion - constexpr int kMaxPortionTripletsP = kMaxPortionTriplets / fvecLen; ///< Max size of the triplets portion - } // namespace size + constexpr int kCoeff = 64 / 4; ///< TODO: + constexpr int kPortionLeftHits = 1024 / kCoeff; ///< portion of left hits + constexpr int kPortionLeftHitsP = 1024 / kCoeff / fvec::size(); ///< portion of left hits per one vector word + constexpr int kMaxPortionDoublets = 10000 / 5 * 64 / 2 / kCoeff; ///< Max size of the doublets portion + constexpr int kMaxPortionTriplets = 10000 * 5 * 64 / 2 / kCoeff; ///< Max size of the triplets portion + constexpr int kMaxPortionTripletsP = kMaxPortionTriplets / fvec::size(); ///< Max size of the triplets portion + } // namespace size /// Control flags namespace control diff --git a/reco/L1/L1Algo/L1MaterialInfo.cxx b/reco/L1/L1Algo/L1MaterialInfo.cxx index 0cfa4d6a64327ebccb2dffb9176beb25892b2edd..c8ffcea7e3ce2fc53ff4e9d2562e0ef37ef91b84 100644 --- a/reco/L1/L1Algo/L1MaterialInfo.cxx +++ b/reco/L1/L1Algo/L1MaterialInfo.cxx @@ -138,7 +138,7 @@ float L1Material::GetRadThick(float x, float y) const fvec L1Material::GetRadThick(fvec x, fvec y) const { fvec r; - for (int i = 0; i < fvecLen; i++) + for (size_t i = 0; i < fvec::size(); i++) r[i] = GetRadThick(x[i], y[i]); return r; } diff --git a/reco/L1/L1Algo/L1TrackFitter.cxx b/reco/L1/L1Algo/L1TrackFitter.cxx index 45334216b431a8e422a3399992a5a1177ea73368..6aeb45a1f267e303abafada212de21dfb83d9f3a 100644 --- a/reco/L1/L1Algo/L1TrackFitter.cxx +++ b/reco/L1/L1Algo/L1TrackFitter.cxx @@ -333,7 +333,7 @@ void L1Algo::L1KFTrackFitter() const int nHits = fParameters.GetNstationsActive(); int iVec = 0, i = 0; - int nTracks_SIMD = fvecLen; + int nTracks_SIMD = fvec::size(); L1TrackPar T; // fitting parametr coresponding to current track L1TrackParFit T1; // fitting parametr coresponding to current track @@ -342,7 +342,7 @@ void L1Algo::L1KFTrackFitter() L1Fit fit; fit.SetParticleMass(GetDefaultParticleMass()); - L1Track* t[fvecLen]; + L1Track* t[fvec::size()]; const L1Station* sta = fParameters.GetStations().begin(); L1Station staFirst, staLast; // FIXME (?): Probably, we should replace these variables with references (S.Zharko) @@ -405,8 +405,8 @@ void L1Algo::L1KFTrackFitter() unsigned short N_vTracks = fTracks.size(); // number of tracks processed per one SSE register - for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvecLen) { - if (N_vTracks - itrack < static_cast<unsigned short>(fvecLen)) nTracks_SIMD = N_vTracks - itrack; + for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvec::size()) { + if (N_vTracks - itrack < static_cast<unsigned short>(fvec::size())) nTracks_SIMD = N_vTracks - itrack; for (i = 0; i < nTracks_SIMD; i++) t[i] = &fTracks[itrack + i]; // current track @@ -798,7 +798,7 @@ void L1Algo::L1KFTrackFitterMuch() const int nHits = fParameters.GetNstationsActive(); int iVec = 0, i = 0; - int nTracks_SIMD = fvecLen; + int nTracks_SIMD = fvec::size(); L1TrackPar T; // fitting parametr coresponding to current track L1TrackParFit T1; // fitting parametr coresponding to current track @@ -807,7 +807,7 @@ void L1Algo::L1KFTrackFitterMuch() L1Fit fit; fit.SetParticleMass(GetDefaultParticleMass()); - L1Track* t[fvecLen]; + L1Track* t[fvec::size()]; const L1Station* sta = fParameters.GetStations().begin(); L1Station staFirst, staLast; @@ -869,8 +869,8 @@ void L1Algo::L1KFTrackFitterMuch() unsigned short N_vTracks = fTracks.size(); - for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvecLen) { - if (N_vTracks - itrack < static_cast<unsigned short>(fvecLen)) nTracks_SIMD = N_vTracks - itrack; + for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvec::size()) { + if (N_vTracks - itrack < static_cast<unsigned short>(fvec::size())) nTracks_SIMD = N_vTracks - itrack; for (i = 0; i < nTracks_SIMD; i++) t[i] = &fTracks[itrack + i]; // current track @@ -1216,7 +1216,7 @@ void L1Algo::L1KFTrackFitterMuch() int max_steps = 0; - for (int j = 0; j < fvecLen; j++) { + for (size_t j = 0; j < fvec::size(); j++) { nofSteps[j] = int(fabs(d_z[j]) / 10); //*w1[i]; if (max_steps < nofSteps[j]) max_steps = nofSteps[j]; } diff --git a/reco/L1/L1Algo/L1TrackPar.h b/reco/L1/L1Algo/L1TrackPar.h index ed0666115dfd8ca93ba0c23c7ff45edb157218a6..bd1a011d019e0d3780ac8248ea60830ff245d5c7 100644 --- a/reco/L1/L1Algo/L1TrackPar.h +++ b/reco/L1/L1Algo/L1TrackPar.h @@ -328,16 +328,16 @@ inline bool L1TrackPar::IsEntryConsistent(bool printWhenWrong, int k) const inline bool L1TrackPar::IsConsistent(bool printWhenWrong, int nFilled) const { - assert(nFilled <= fvecLen); + assert(nFilled <= (int) fvec::size()); bool ok = true; - if (nFilled < 0) { nFilled = fvecLen; } + if (nFilled < 0) { nFilled = fvec::size(); } for (int i = 0; i < nFilled; ++i) { ok = ok && IsEntryConsistent(printWhenWrong, i); } if (!ok && printWhenWrong) { std::cout << "L1TrackPar parameters are not consistent: " << std::endl; - if (nFilled == fvecLen) { std::cout << " All vector elements are filled " << std::endl; } + if (nFilled == (int) fvec::size()) { std::cout << " All vector elements are filled " << std::endl; } else { std::cout << " Only first " << nFilled << " vector elements are filled " << std::endl; } diff --git a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx index 71e128a516edd9db9e826e7689d60169bbfd759b..cfa04e1d884904fc7f526f27e56d7c528d7d19cb 100644 --- a/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx +++ b/reco/L1/OffLineInterface/CbmL1RichENNRingFinderParallel.cxx @@ -145,15 +145,15 @@ Int_t CbmL1RichENNRingFinderParallel::DoFind(CbmEvent* event, TClonesArray* HitA // save local-out indices correspondece nsL1vector<ENNHitV>::TSimd UpV; nsL1vector<ENNHitV>::TSimd DownV; - UpV.resize((Up.size() + fvecLen - 1) / fvecLen); - DownV.resize((Down.size() + fvecLen - 1) / fvecLen); + UpV.resize((Up.size() + fvec::size() - 1) / fvec::size()); + DownV.resize((Down.size() + fvec::size() - 1) / fvec::size()); for (THitIndex k = 0; k < Up.size(); k++) { - int k_4 = k % fvecLen, k_V = k / fvecLen; + int k_4 = k % fvec::size(), k_V = k / fvec::size(); ENNHitV& hits = UpV[k_V]; // TODO change on ENNHitV hits.CopyHit(Up[k], k_4); } for (THitIndex k = 0; k < Down.size(); k++) { - int k_4 = k % fvecLen, k_V = k / fvecLen; + int k_4 = k % fvec::size(), k_V = k / fvec::size(); ENNHitV& hits = DownV[k_V]; hits.CopyHit(Down[k], k_4); } @@ -284,10 +284,10 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E // ENNRingHit* ileft = &(Hits[0]), *iright = ileft;//, i_main = ileft; int ileft = 0, iright = ileft; - // int ileft[fvecLen] = {0, 0, 0, 0}; - // int iright[fvecLen] = {0, 0, 0, 0}; + // int ileft[fvec::size()] = {0, 0, 0, 0}; + // int iright[fvec::size()] = {0, 0, 0, 0}; - THitIndex i_mains[fvecLen] = {0}; + THitIndex i_mains[fvec::size()] = {0}; THitIndex i_main_array[NHits]; // need for proceed in paralled almost independent areas for (THitIndex i = 0; i < NHits; i++) { @@ -310,9 +310,9 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E fvec SearchAreaSize = 0; // number of hits to fit and search ring fvec PickUpAreaSize = 0; - for (int i_4 = 0; (i_4 < fvecLen) && (ii_main < NHits); ii_main++) { + for (size_t i_4 = 0; (i_4 < fvec::size()) && (ii_main < NHits); ii_main++) { const THitIndex i_main = i_main_array[ii_main]; - const int i_main_4 = i_main % fvecLen, i_main_V = i_main / fvecLen; + const int i_main_4 = i_main % fvec::size(), i_main_V = i_main / fvec::size(); ENNHitV* i = &HitsV[i_main_V]; if (i->quality[i_main_4] >= StartHitMaxQuality) continue; // already found hit @@ -321,16 +321,16 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E float left = i->x[i_main_4] - AreaSize; float right = i->x[i_main_4] + AreaSize; - // while( (HitsV[ileft[i_4]/fvecLen] .x[ileft[i_4]%fvecLen] < left ) ) ++ileft[i_4]; - // while( (iright[i_4] < NHits) && (HitsV[iright[i_4]/fvecLen].x[ileft[i_4]%fvecLen] < right) ) ++iright[i_4]; + // while( (HitsV[ileft[i_4]/fvec::size()] .x[ileft[i_4]%fvec::size()] < left ) ) ++ileft[i_4]; + // while( (iright[i_4] < NHits) && (HitsV[iright[i_4]/fvec::size()].x[ileft[i_4]%fvec::size()] < right) ) ++iright[i_4]; // for( int j = ileft[i_4]; j < iright[i_4]; ++j ){ - while ((HitsV[ileft / fvecLen].x[ileft % fvecLen] < left)) + while ((HitsV[ileft / fvec::size()].x[ileft % fvec::size()] < left)) ++ileft; // TODO SIMDize - while ((iright < NHits) && (HitsV[iright / fvecLen].x[ileft % fvecLen] < right)) + while ((iright < NHits) && (HitsV[iright / fvec::size()].x[ileft % fvec::size()] < right)) ++iright; for (int j = ileft; j < iright; ++j) { - const int j_4 = j % fvecLen, j_V = j / fvecLen; + const int j_4 = j % fvec::size(), j_V = j / fvec::size(); ENNSearchHitV& sHit = SearchArea[int(SearchAreaSize[i_4])]; sHit.CopyHit(HitsV[j_V], j_4, i_4); @@ -360,8 +360,8 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E ENNHitV iHit; int MaxSearchAreaSize = 0; int MaxPickUpAreaSize = 0; - for (int i_4 = 0; i_4 < fvecLen; i_4++) { - iHit.CopyHit(HitsV[i_mains[i_4] / fvecLen], i_mains[i_4] % fvecLen, i_4); + for (size_t i_4 = 0; i_4 < fvec::size(); i_4++) { + iHit.CopyHit(HitsV[i_mains[i_4] / fvec::size()], i_mains[i_4] % fvec::size(), i_4); MaxSearchAreaSize = (MaxSearchAreaSize < SearchAreaSize[i_4]) ? int(SearchAreaSize[i_4]) : MaxSearchAreaSize; MaxPickUpAreaSize = (MaxPickUpAreaSize < PickUpAreaSize[i_4]) ? int(PickUpAreaSize[i_4]) : MaxPickUpAreaSize; } @@ -563,7 +563,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E // } //quality *= ShadowOpacity; - for( int i_4 = 0; (i_4 < fvecLen); i_4++) { + for( int i_4 = 0; (i_4 < fvec::size()); i_4++) { const int NShadow = Shadow.size(); for( int is = 0; is < NShadow; is++ ) { // CHECKME change loops to speed up? cout << i_4 << Shadow[is] << endl; @@ -571,10 +571,10 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E if (ih_f == -1) continue; int ih = static_cast<int>(ih_f); // TODO ! problem in conversion... float ih_f2 = static_cast<float>(ih); - cout << ih_f << " " << ih << " " << ih_f2 << " " << ih%fvecLen << " " << ih/fvecLen << endl; + cout << ih_f << " " << ih << " " << ih_f2 << " " << ih%fvec::size() << " " << ih/fvec::size() << endl; - const THitIndex ih_4 = ih%fvecLen; - ENNHitV & hitV = HitsV[ih/fvecLen]; + const THitIndex ih_4 = ih%fvec::size(); + ENNHitV & hitV = HitsV[ih/fvec::size()]; // hitV.quality[ih_4] = ( hitV.quality[ih_4] < quality[i_4] ) ? quality[i_4] : hitV.quality[ih_4]; // shHit->quality = iif( shHit->quality < quality, quality, shHit->quality ); @@ -584,7 +584,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E #endif // 0 //////////////// - for (int i_4 = 0; (i_4 < fvecLen); i_4++) { + for (size_t i_4 = 0; (i_4 < fvec::size()); i_4++) { // if( NRingHits < MinRingHits || R2 > R2Max || R2 < R2Min ) continue; if (/*ISUNLIKELY*/ (!validRing[i_4])) continue; @@ -641,8 +641,8 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const int NShadow = Shadow.size(); for (int is = 0; is < NShadow; is++) { const THitIndex ih = Shadow[is]; - const THitIndex ih_4 = ih % fvecLen; - ENNHitV& hitV = HitsV[ih / fvecLen]; + const THitIndex ih_4 = ih % fvec::size(); + ENNHitV& hitV = HitsV[ih / fvec::size()]; hitV.quality[ih_4] = (hitV.quality[ih_4] < quality) ? quality : hitV.quality[ih_4]; // shHit->quality = iif( shHit->quality < quality, quality, shHit->quality ); @@ -729,16 +729,16 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const THitIndex firstIh = i->localIHits[0]; - const ENNHitV& firstHit = HitsV[firstIh / fvecLen]; - const int firstIh_4 = firstIh % fvecLen; + const ENNHitV& firstHit = HitsV[firstIh / fvec::size()]; + const int firstIh_4 = firstIh % fvec::size(); const THitIndex maxI = i->localIHits.size(); vector<ENNSearchHitV> shits; shits.resize(maxI); for (THitIndex iih = 0; iih < maxI; iih++) { const THitIndex ih = i->localIHits[iih]; - const ENNHitV& hit = HitsV[ih / fvecLen]; - const int ih_4 = ih % fvecLen; + const ENNHitV& hit = HitsV[ih / fvec::size()]; + const int ih_4 = ih % fvec::size(); ENNSearchHitV& shit = shits[iih]; shit.ly[0] = hit.y[ih_4] - firstHit.y[firstIh_4]; @@ -831,9 +831,9 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E for (THitIndex iih = 0; iih < maxI; iih++) { const THitIndex ih = i->localIHits[iih]; - const ENNHitV& hit = HitsV[ih / fvecLen]; + const ENNHitV& hit = HitsV[ih / fvec::size()]; ENNSearchHitV& shit = shits[iih]; - const int ih_4 = ih % fvecLen; + const int ih_4 = ih % fvec::size(); float dx = hit.x[ih_4] - i->x; float dy = hit.y[ih_4] - i->y; @@ -869,8 +869,8 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const THitIndex maxI = i->localIHits.size(); for (THitIndex n = 0; n < maxI; n++) { const THitIndex ih = i->localIHits[n]; - ENNHitV& hit = HitsV[ih / fvecLen]; - const int ih_4 = ih % fvecLen; + ENNHitV& hit = HitsV[ih / fvec::size()]; + const int ih_4 = ih % fvec::size(); hit.quality[ih_4] = 1; } for (iR j = i + 1; j != Rend; ++j) { @@ -881,8 +881,8 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const THitIndex maxJ = j->localIHits.size(); for (THitIndex m = 0; m < maxJ; m++) { const THitIndex ihm = j->localIHits[m]; - const ENNHitV& hitm = HitsV[ihm / fvecLen]; - if (hitm.quality[ihm % fvecLen] == 0) j->NOwn++; + const ENNHitV& hitm = HitsV[ihm / fvec::size()]; + if (hitm.quality[ihm % fvec::size()] == 0) j->NOwn++; } } i->on = 1; @@ -924,8 +924,8 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E best->on = 1; const THitIndex NHitsBest = best->localIHits.size(); for (THitIndex iih = 0; iih < NHitsBest; iih++) { - const THitIndex ih = best->localIHits[iih]; - HitsV[ih / fvecLen].quality[ih % fvecLen] = 1; + const THitIndex ih = best->localIHits[iih]; + HitsV[ih / fvec::size()].quality[ih % fvec::size()] = 1; } for (iR ir = Rbeg; ir != Rend; ++ir) { if (ir->skip) continue; @@ -935,7 +935,7 @@ void CbmL1RichENNRingFinderParallel::ENNRingFinder(const int NHits, nsL1vector<E const THitIndex NHitsCur = ir->localIHits.size(); for (THitIndex iih = 0; iih < NHitsCur; iih++) { const THitIndex ih = ir->localIHits[iih]; - ir->NOwn += (HitsV[ih / fvecLen].quality[ih % fvecLen] == 0); + ir->NOwn += (HitsV[ih / fvec::size()].quality[ih % fvec::size()] == 0); } } } while (1); diff --git a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx index a1f47d7b8e657216f1a583cbc90126bdf76d5b03..3d3c88e799d0f4c5e16e9424649f25cb35039ae0 100644 --- a/reco/L1/ParticleFinder/CbmL1PFFitter.cxx +++ b/reco/L1/ParticleFinder/CbmL1PFFitter.cxx @@ -98,13 +98,13 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, vector<int>& pidHypo) static int nHits = CbmL1::Instance()->fpAlgo->GetParameters()->GetNstationsActive(); int iVec = 0, i = 0; - int nTracks_SIMD = fvecLen; + int nTracks_SIMD = fvec::size(); L1TrackPar T; // fitting parametr coresponding to current track L1Fit fit; fit.SetParticleMass(0.000511f); // muon - CbmStsTrack* t[fvecLen]; + CbmStsTrack* t[fvec::size()]; int ista; const L1Station* sta = CbmL1::Instance()->fpAlgo->GetParameters()->GetStations().begin(); @@ -130,9 +130,9 @@ void CbmL1PFFitter::Fit(vector<CbmStsTrack>& Tracks, vector<int>& pidHypo) fvec mass = 0.000511f; - for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvecLen) { + for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvec::size()) { - if (N_vTracks - itrack < static_cast<unsigned short>(fvecLen)) nTracks_SIMD = N_vTracks - itrack; + if (N_vTracks - itrack < static_cast<unsigned short>(fvec::size())) nTracks_SIMD = N_vTracks - itrack; for (i = 0; i < nTracks_SIMD; i++) { t[i] = &Tracks[itrack + i]; // current track T.x[i] = t[i]->GetParamFirst()->GetX(); @@ -400,11 +400,11 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<L1FieldRe { chiToVtx.reserve(Tracks.size()); - int nTracks_SIMD = fvecLen; + int nTracks_SIMD = fvec::size(); L1TrackPar T; // fitting parametr coresponding to current track L1Fit fit; - CbmStsTrack* t[fvecLen]; + CbmStsTrack* t[fvec::size()]; int nStations = CbmL1::Instance()->fpAlgo->GetParameters()->GetNstationsActive(); int NMvdStations = CbmL1::Instance()->fpAlgo->GetNstationsBeforePipe(); @@ -426,8 +426,8 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<L1FieldRe unsigned short N_vTracks = Tracks.size(); int ista; - for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvecLen) { - if (N_vTracks - itrack < static_cast<unsigned short>(fvecLen)) { nTracks_SIMD = N_vTracks - itrack; } + for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvec::size()) { + if (N_vTracks - itrack < static_cast<unsigned short>(fvec::size())) { nTracks_SIMD = N_vTracks - itrack; } fvec mass2; for (int iVec = 0; iVec < nTracks_SIMD; iVec++) { @@ -578,10 +578,10 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<L1F int NMvdStations = CbmL1::Instance()->fpAlgo->GetNstationsBeforePipe(); if (NMvdStations > 0.) listMvdHits = (TClonesArray*) fManger->GetObject("MvdHit"); - int nTracks_SIMD = fvecLen; + int nTracks_SIMD = fvec::size(); L1TrackPar T; // fitting parametr coresponding to current track - CbmStsTrack* t[fvecLen]; + CbmStsTrack* t[fvec::size()]; int ista; const L1Station* sta = CbmL1::Instance()->fpAlgo->GetParameters()->GetStations().begin(); @@ -590,8 +590,8 @@ void CbmL1PFFitter::CalculateFieldRegion(vector<CbmStsTrack>& Tracks, vector<L1F unsigned short N_vTracks = Tracks.size(); - for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvecLen) { - if (N_vTracks - itrack < static_cast<unsigned short>(fvecLen)) nTracks_SIMD = N_vTracks - itrack; + for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvec::size()) { + if (N_vTracks - itrack < static_cast<unsigned short>(fvec::size())) nTracks_SIMD = N_vTracks - itrack; for (int i = 0; i < nTracks_SIMD; i++) t[i] = &Tracks[itrack + i]; // current track @@ -650,10 +650,10 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks, int NMvdStations = CbmL1::Instance()->fpAlgo->GetNstationsBeforePipe(); if (NMvdStations > 0.) listMvdHits = (TClonesArray*) fManger->GetObject("MvdHit"); - int nTracks_SIMD = fvecLen; + int nTracks_SIMD = fvec::size(); L1TrackPar T; // fitting parametr coresponding to current track - CbmStsTrack* t[fvecLen]; + CbmStsTrack* t[fvec::size()]; int ista; const L1Station* sta = CbmL1::Instance()->fpAlgo->GetParameters()->GetStations().begin(); @@ -662,8 +662,8 @@ void CbmL1PFFitter::CalculateFieldRegionAtLastPoint(vector<CbmStsTrack>& Tracks, unsigned short N_vTracks = Tracks.size(); - for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvecLen) { - if (N_vTracks - itrack < static_cast<unsigned short>(fvecLen)) nTracks_SIMD = N_vTracks - itrack; + for (unsigned short itrack = 0; itrack < N_vTracks; itrack += fvec::size()) { + if (N_vTracks - itrack < static_cast<unsigned short>(fvec::size())) nTracks_SIMD = N_vTracks - itrack; for (int i = 0; i < nTracks_SIMD; i++) t[i] = &Tracks[itrack + i]; // current track diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h index b2dd05849ab0e34ae0166a5ce76238c45fe9ad86..28abbbe388bbd3097f0766f639365e829b290129 100644 --- a/reco/L1/vectors/L1vecPseudo.h +++ b/reco/L1/vectors/L1vecPseudo.h @@ -11,7 +11,6 @@ #include <cmath> typedef float fscal; -const int fvecLen = 4; /********************************** * @@ -28,9 +27,9 @@ fscal sgn(fscal x); class fmask { public: - static constexpr int Size {4}; + static constexpr size_t size() { return 4; } - bool v[Size]; + bool v[size()]; bool& operator[](int i) { return v[i]; } bool operator[](int i) const { return v[i]; } @@ -39,14 +38,14 @@ public: fmask(const fmask& a) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { v[i] = a.v[i]; } } fmask(bool a) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { v[i] = a; } } @@ -57,7 +56,7 @@ public: #define _op(A, B, F) \ fmask z; \ - for (int i = 0; i < Size; i++) { \ + for (int i = 0; i < size(); i++) { \ z[i] = (A[i] F B[i]); \ } \ return z; @@ -74,7 +73,7 @@ public: friend fmask operator!(const fmask& a) { fmask z; - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { z[i] = !a[i]; } return z; @@ -95,7 +94,7 @@ public: friend std::ostream& operator<<(std::ostream& strm, const fmask& a) { strm << '['; - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { strm << std::setw(12) << std::setfill(' ') << a[i] << ' '; } return strm; @@ -103,7 +102,7 @@ public: friend std::istream& operator>>(std::istream& strm, fmask& a) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { strm >> a[i]; } return strm; @@ -114,22 +113,21 @@ public: class fvec { public: - static constexpr int Size {fmask::Size}; - - fscal v[Size]; + static constexpr size_t size() { return fmask::size(); } + fscal v[size()]; fvec() : fvec(0.f) {} fvec(const fvec& a) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { v[i] = a.v[i]; } } fvec(fscal a) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { v[i] = a; } } @@ -144,35 +142,35 @@ public: void setZero(fmask m) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { if (m[i]) { v[i] = 0.; } } } #define _f1(A, F) \ fvec z; \ - for (int i = 0; i < Size; i++) { \ + for (int i = 0; i < size(); i++) { \ z[i] = F(A[i]); \ } \ return z; #define _f2(A, B, F) \ fvec z; \ - for (int i = 0; i < Size; i++) { \ + for (int i = 0; i < size(); i++) { \ z[i] = F(A[i], B[i]); \ } \ return z; #define _op(A, B, F) \ fvec z; \ - for (int i = 0; i < Size; i++) { \ + for (int i = 0; i < size(); i++) { \ z[i] = (A[i] F B[i]); \ } \ return z; #define _opComp(A, B, F) \ fmask z; \ - for (int i = 0; i < Size; i++) { \ + for (int i = 0; i < size(); i++) { \ z[i] = (A[i] F B[i]); \ } \ return z; @@ -194,7 +192,7 @@ public: friend fvec iif(fmask a, fvec b, fvec c) { fvec z; - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { z[i] = a[i] ? b[i] : c[i]; } return z; @@ -246,7 +244,7 @@ public: { //strm << "[" << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << "]"; strm << '['; - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { strm << std::setw(12) << std::setfill(' ') << a[i] << ' '; } return strm; @@ -254,7 +252,7 @@ public: friend std::istream& operator>>(std::istream& strm, fvec& a) { - for (int i = 0; i < Size; i++) { + for (int i = 0; i < size(); i++) { strm >> a[i]; } return strm; @@ -263,7 +261,7 @@ public: } __attribute__((aligned(16))); -#define _fvecalignment __attribute__((aligned(fvec::Size * sizeof(fscal)))) +#define _fvecalignment __attribute__((aligned(fvec::size() * sizeof(fscal)))) /// Checks, if all bands are equal @@ -273,7 +271,7 @@ inline bool IsHorizontallyEqual(const fvec& v) { fscal s = v[0]; bool ret = true; - for (int i = 1; i < fvecLen; i++) { + for (int i = 1; i < fvec::size(); i++) { ret = ret && (v[i] == s); } return ret; @@ -283,7 +281,7 @@ inline bool IsHorizontallyEqual(const fvec& v) inline bool IsNanAny(const fvec& v) { bool ret = false; - for (int i = 0; i < fvecLen; i++) { + for (int i = 0; i < fvec::size(); i++) { ret = ret || std::isnan(v[i]); } return ret; diff --git a/reco/L1/vectors/L1vecVc.h b/reco/L1/vectors/L1vecVc.h index 996307e1757870c267a261624ce9568ca419ab88..08253a0c73a1877ca3f51e7dec31fb352c13063b 100644 --- a/reco/L1/vectors/L1vecVc.h +++ b/reco/L1/vectors/L1vecVc.h @@ -10,7 +10,6 @@ typedef Vc::float_v fvec; typedef fvec::EntryType fscal; typedef Vc::float_m fmask; -const int fvecLen = fvec::Size; #define _fvecalignment __attribute__((aligned(Vc::VectorAlignment))) @@ -34,7 +33,7 @@ inline bool IsHorizontallyEqual(const fvec& v) { fscal s = v[0]; bool ret = true; - for (int i = 1; i < fvecLen; i++) { + for (size_t i = 1; i < fvec::size(); i++) { ret = ret && (v[i] == s); } return ret; @@ -44,7 +43,7 @@ inline bool IsHorizontallyEqual(const fvec& v) inline bool IsNanAny(const fvec& v) { bool ret = false; - for (int i = 0; i < fvecLen; i++) { + for (size_t i = 0; i < fvec::size(); i++) { ret = ret || std::isnan(v[i]); } return ret; diff --git a/reco/littrack/parallel/LitFieldGrid.h b/reco/littrack/parallel/LitFieldGrid.h index 5e3edc9c809a6f226db167c265ba88001970d83c..5acad2148c92c91c38cfec727e229b0f03932460 100644 --- a/reco/littrack/parallel/LitFieldGrid.h +++ b/reco/littrack/parallel/LitFieldGrid.h @@ -184,7 +184,7 @@ namespace lit { LitFieldValue<fscal> v; // Get field value for each packed value - for (unsigned int i = 0; i < fvecLen; i++) { + for (size_t i = 0; i < fvec::size(); i++) { // Get field value in scalar format GetFieldValue(x[i], y[i], v); // Store field value in vector format diff --git a/reco/littrack/parallel/LitMaterialGrid.h b/reco/littrack/parallel/LitMaterialGrid.h index ad8b2fced8949ec7b7dacdb88236aa17ab1dda22..1bed4d602f7c7258a303a051bfadf47deea9368a 100644 --- a/reco/littrack/parallel/LitMaterialGrid.h +++ b/reco/littrack/parallel/LitMaterialGrid.h @@ -154,7 +154,7 @@ namespace lit { fvec v; // Get material thickness for each packed value - for (unsigned int i = 0; i < fvecLen; i++) { + for (size_t i = 0; i < fvec::size(); i++) { v[i] = GetMaterial(x[i], y[i]); } return v;