fixes a bug in the GPU memory allocation.
This commit is contained in:
parent
d397bf0064
commit
2d4697c750
@ -106,6 +106,7 @@ Double_t PFitterFcnDKS::operator()(const std::vector<Double_t>& par) const
|
||||
ierr += fDKS.callLaunchChiSquare(FITTYPE_SINGLE_HISTO, fMemDataSingleHisto[i], fMemDataSingleHistoErr[i], dksp.fNoOfFitBins,
|
||||
par.size(), dksp.fFun.size(), dksp.fMap.size(),
|
||||
dksp.fStartTime , dksp.fPackedTimeResolution, chisq);
|
||||
|
||||
value += chisq;
|
||||
|
||||
if (ierr != 0) {
|
||||
@ -250,25 +251,25 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
|
||||
// init chisq buffer on the GPU
|
||||
|
||||
// 1) calculated the minimum size for the data needed.
|
||||
Int_t minSize = 1e9, size = -1;
|
||||
// 1) calculated the maximum size for the data needed.
|
||||
Int_t parSize = -1, mapSize = -1, funSize = -1;
|
||||
Int_t maxSize = 0, size = -1;
|
||||
for (UInt_t i=0; i<fRunListCollection->GetNoOfSingleHisto(); i++) {
|
||||
size = fRunListCollection->GetNoOfBinsFitted(i);
|
||||
if (minSize > size)
|
||||
minSize = size;
|
||||
if (maxSize < size)
|
||||
maxSize = size;
|
||||
}
|
||||
for (UInt_t i=0; i<fRunListCollection->GetNoOfAsymmetry(); i++) {
|
||||
size = fRunListCollection->GetNoOfBinsFitted(i);
|
||||
if (minSize > size)
|
||||
minSize = size;
|
||||
if (maxSize < size)
|
||||
maxSize = size;
|
||||
}
|
||||
for (UInt_t i=0; i<fRunListCollection->GetNoOfMuMinus(); i++) {
|
||||
size = fRunListCollection->GetNoOfBinsFitted(i);
|
||||
if (minSize > size)
|
||||
minSize = size;
|
||||
if (maxSize < size)
|
||||
maxSize = size;
|
||||
}
|
||||
if (minSize == 1e9) {
|
||||
if (maxSize == 0) {
|
||||
cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to get data size to be fitted." << endl;
|
||||
fValid = false;
|
||||
return;
|
||||
@ -295,8 +296,8 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
}
|
||||
|
||||
// now ready to init the chisq buffer on the GPU
|
||||
cout << "debug> minSize=" << minSize << ", parSize=" << parSize << ", funSize=" << funSize << ", mapSize=" << mapSize << endl;
|
||||
ierr = fDKS.initChiSquare(minSize, parSize, funSize, mapSize);
|
||||
cout << "debug> maximal packed histo size=" << maxSize << ", parSize=" << parSize << ", funSize=" << funSize << ", mapSize=" << mapSize << endl;
|
||||
ierr = fDKS.initChiSquare(maxSize, parSize, funSize, mapSize);
|
||||
if (ierr != 0) {
|
||||
cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocate the necessary chisq buffer on the GPU." << endl;
|
||||
fValid = false;
|
||||
@ -316,8 +317,9 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
fValid = false;
|
||||
return;
|
||||
}
|
||||
fMemDataSingleHisto[i] = fDKS.allocateMemory<Double_t>(minSize, ierr);
|
||||
fMemDataSingleHistoErr[i] = fDKS.allocateMemory<Double_t>(minSize, ierr);
|
||||
size = runData->GetValue()->size();
|
||||
fMemDataSingleHisto[i] = fDKS.allocateMemory<Double_t>(size, ierr);
|
||||
fMemDataSingleHistoErr[i] = fDKS.allocateMemory<Double_t>(size, ierr);
|
||||
if (ierr != 0) {
|
||||
cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated single histo data set memory (i=" << i << ") on the GPU" << endl;
|
||||
fValid = false;
|
||||
@ -329,8 +331,8 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
fValid = false;
|
||||
return;
|
||||
}
|
||||
fDKS.writeData<double>(fMemDataSingleHisto[i], &runData->GetValue()->at(startTimeBin), minSize);
|
||||
fDKS.writeData<double>(fMemDataSingleHistoErr[i], &runData->GetError()->at(startTimeBin), minSize);
|
||||
fDKS.writeData<double>(fMemDataSingleHisto[i], &runData->GetValue()->at(startTimeBin), size-startTimeBin);
|
||||
fDKS.writeData<double>(fMemDataSingleHistoErr[i], &runData->GetError()->at(startTimeBin), size-startTimeBin);
|
||||
}
|
||||
if (fRunListCollection->GetNoOfSingleHisto() > 0)
|
||||
fitType = FITTYPE_SINGLE_HISTO;
|
||||
@ -345,9 +347,9 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
fValid = false;
|
||||
return;
|
||||
}
|
||||
|
||||
fMemDataAsymmetry[i] = fDKS.allocateMemory<Double_t>(minSize, ierr);
|
||||
fMemDataAsymmetryErr[i] = fDKS.allocateMemory<Double_t>(minSize, ierr);
|
||||
size = runData->GetValue()->size();
|
||||
fMemDataAsymmetry[i] = fDKS.allocateMemory<Double_t>(size, ierr);
|
||||
fMemDataAsymmetryErr[i] = fDKS.allocateMemory<Double_t>(size, ierr);
|
||||
if (ierr != 0) {
|
||||
cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated asymmetry data set memory (i=" << i << ") on the GPU" << endl;
|
||||
fValid = false;
|
||||
@ -359,8 +361,8 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
fValid = false;
|
||||
return;
|
||||
}
|
||||
fDKS.writeData<double>(fMemDataAsymmetry[i], &runData->GetValue()->at(startTimeBin), minSize);
|
||||
fDKS.writeData<double>(fMemDataAsymmetryErr[i], &runData->GetError()->at(startTimeBin), minSize);
|
||||
fDKS.writeData<double>(fMemDataAsymmetry[i], &runData->GetValue()->at(startTimeBin), size-startTimeBin);
|
||||
fDKS.writeData<double>(fMemDataAsymmetryErr[i], &runData->GetError()->at(startTimeBin), size-startTimeBin);
|
||||
}
|
||||
if (fRunListCollection->GetNoOfAsymmetry() > 0) {
|
||||
if (fitType == FITTYPE_UNDEFINED) {
|
||||
@ -382,9 +384,9 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
fValid = false;
|
||||
return;
|
||||
}
|
||||
|
||||
fMemDataMuMinus[i] = fDKS.allocateMemory<Double_t>(minSize, ierr);
|
||||
fMemDataMuMinusErr[i] = fDKS.allocateMemory<Double_t>(minSize, ierr);
|
||||
size = runData->GetValue()->size();
|
||||
fMemDataMuMinus[i] = fDKS.allocateMemory<Double_t>(size, ierr);
|
||||
fMemDataMuMinusErr[i] = fDKS.allocateMemory<Double_t>(size, ierr);
|
||||
if (ierr != 0) {
|
||||
cerr << ">> PFitterFcnDKS::InitDKS: **ERROR** failed to allocated mu minus data set memory (i=" << i << ") on the GPU" << endl;
|
||||
fValid = false;
|
||||
@ -396,8 +398,8 @@ void PFitterFcnDKS::InitDKS(const UInt_t dksTag)
|
||||
fValid = false;
|
||||
return;
|
||||
}
|
||||
fDKS.writeData<double>(fMemDataMuMinus[i], &runData->GetValue()->at(startTimeBin), minSize);
|
||||
fDKS.writeData<double>(fMemDataMuMinusErr[i], &runData->GetError()->at(startTimeBin), minSize);
|
||||
fDKS.writeData<double>(fMemDataMuMinus[i], &runData->GetValue()->at(startTimeBin), size-startTimeBin);
|
||||
fDKS.writeData<double>(fMemDataMuMinusErr[i], &runData->GetError()->at(startTimeBin), size-startTimeBin);
|
||||
}
|
||||
if (fRunListCollection->GetNoOfMuMinus() > 0) {
|
||||
if (fitType == FITTYPE_UNDEFINED) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user