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