| 466 | } |
| 467 | |
| 468 | void NCatboostCuda::TTreeCtrDataSetsHelper::ProceedDataSet(ui32 dataSetPermutationKey, |
| 469 | NCatboostCuda::TTreeCtrDataSet& dataSet, |
| 470 | NCatboostCuda::TTreeCtrDataSetsHelper::TDataSetVisitor& visitor) { |
| 471 | const ui32 deviceId = dataSet.GetDeviceId(); |
| 472 | auto ctrTargets = DeviceView(DataSet.GetCtrTargets(), deviceId); |
| 473 | |
| 474 | if (!dataSet.HasCompressedIndex()) { |
| 475 | NCudaLib::GetCudaManager().WaitComplete(); |
| 476 | |
| 477 | auto guard = NCudaLib::GetCudaManager().GetProfiler().Profile( |
| 478 | TStringBuilder() << "Build #" << dataSet.GetCtrs().size() << " ctrs dataset"); |
| 479 | |
| 480 | using TTensorBuilder = TBatchFeatureTensorBuilder; |
| 481 | const ui32 tensorBuilderStreams = PackSizeEstimators[deviceId]->GetStreamCountForCtrCalculation(); |
| 482 | |
| 483 | TTreeCtrDataSetBuilder builder(DepthPermutations[dataSetPermutationKey].DeviceView(deviceId), |
| 484 | dataSet, |
| 485 | tensorBuilderStreams > 1, |
| 486 | !LevelBasedCompressedIndex); |
| 487 | |
| 488 | NCudaLib::GetCudaManager().WaitComplete(); |
| 489 | |
| 490 | TTensorBuilder batchFeatureTensorBuilder(FeaturesManager, |
| 491 | DataSet.GetCatFeatures(), |
| 492 | tensorBuilderStreams); |
| 493 | |
| 494 | TVector<ui32> catFeatureIds(dataSet.GetCatFeatures().begin(), |
| 495 | dataSet.GetCatFeatures().end()); |
| 496 | TCtrFromTensorCalcer ctrFromTensorCalcer(builder, |
| 497 | dataSet.GetCtrConfigs(), |
| 498 | ctrTargets); |
| 499 | |
| 500 | TBatchFeatureTensorBuilder::TFeatureTensorVisitor ctrFromTensorCalcerFunc = [&](const TFeatureTensor& tensor, TCtrBinBuilder<NCudaLib::TSingleMapping>& builder) { |
| 501 | ctrFromTensorCalcer(tensor, builder); |
| 502 | }; |
| 503 | batchFeatureTensorBuilder.VisitCtrBinBuilders(dataSet.GetBaseTensorIndices(), |
| 504 | dataSet.GetBaseTensor(), |
| 505 | catFeatureIds, |
| 506 | ctrFromTensorCalcerFunc); |
| 507 | NCudaLib::GetCudaManager().WaitComplete(); |
| 508 | } |
| 509 | |
| 510 | visitor(dataSet); |
| 511 | |
| 512 | if (NeedToDropDataSetAfterVisit(deviceId)) { |
| 513 | TTreeCtrDataSetBuilder::DropCache(dataSet); |
| 514 | } |
| 515 | } |
| 516 | |
| 517 | bool NCatboostCuda::TTreeCtrDataSetsHelper::NeedToDropDataSetAfterVisit(ui32 deviceId) const { |
| 518 | if (IsLastLevel()) { |
nothing calls this directly
no test coverage detected