MCPcopy Create free account
hub / github.com/catboost/catboost / CreateGpuGrouping

Method CreateGpuGrouping

catboost/cuda/gpu_data/samples_grouping_gpu.cpp:3–47  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1#include "samples_grouping_gpu.h"
2namespace NCatboostCuda {
3 TGpuSamplesGrouping<NCudaLib::TMirrorMapping> TGpuSamplesGroupingHelper<NCudaLib::TMirrorMapping>::CreateGpuGrouping(const TFeatureParallelDataSet& dataSet,
4 const TSlice& slice) {
5 const IQueriesGrouping& grouping = dataSet.GetSamplesGrouping();
6
7 const ui32 rightGroupId = grouping.GetQueryId(slice.Right);
8 const ui32 leftGroupId = grouping.GetQueryId(slice.Left);
9 const ui32 groupCount = rightGroupId - leftGroupId;
10 TVector<ui32> offsets(groupCount);
11 TVector<ui32> sizes(groupCount);
12 const ui32 offset = grouping.GetQueryOffset(leftGroupId);
13
14 for (ui32 i = leftGroupId; i < rightGroupId; ++i) {
15 offsets[i - leftGroupId] = grouping.GetQueryOffset(i) - offset;
16 sizes[i - leftGroupId] = grouping.GetQuerySize(i);
17 }
18 TMirrorBuffer<ui32> offsetsGpu = TMirrorBuffer<ui32>::Create(NCudaLib::TMirrorMapping(offsets.size()));
19 TMirrorBuffer<ui32> sizesGpu = TMirrorBuffer<ui32>::CopyMapping(offsetsGpu);
20 offsetsGpu.Write(offsets);
21 sizesGpu.Write(sizes);
22 TGpuSamplesGrouping<NCudaLib::TMirrorMapping> samplesGrouping;
23
24 samplesGrouping.Grouping = &grouping;
25 samplesGrouping.CurrentDocsSlice = slice;
26 samplesGrouping.Offsets = offsetsGpu.ConstCopyView();
27 samplesGrouping.Sizes = sizesGpu.ConstCopyView();
28 samplesGrouping.OffsetBiases = NCudaLib::GetCudaManager().CreateDistributedObject<ui32>(0);
29
30 {
31 const TQueriesGrouping* pointwiseSamplesGrouping = dynamic_cast<const TQueriesGrouping*>(&grouping);
32 if (pointwiseSamplesGrouping && pointwiseSamplesGrouping->GetFlatQueryPairs().size()) {
33 const auto& pairs = pointwiseSamplesGrouping->GetFlatQueryPairs();
34 const auto& pairsWeights = pointwiseSamplesGrouping->GetQueryPairWeights();
35
36 auto pairsGpu = TMirrorBuffer<uint2>::Create(NCudaLib::TMirrorMapping(pairs.size()));
37 auto pairsWeightsGpu = TMirrorBuffer<float>::Create(NCudaLib::TMirrorMapping(pairs.size()));
38
39 pairsGpu.Write(pairs);
40 pairsWeightsGpu.Write(pairsWeights);
41
42 samplesGrouping.Pairs = pairsGpu.ConstCopyView();
43 samplesGrouping.PairsWeights = pairsWeightsGpu.ConstCopyView();
44 }
45 }
46 return samplesGrouping;
47 }
48
49 TGpuSamplesGrouping<NCudaLib::TMirrorMapping>
50 TGpuSamplesGroupingHelper<NCudaLib::TMirrorMapping>::SliceGrouping(const TGpuSamplesGrouping<NCudaLib::TMirrorMapping>& grouping,

Callers

nothing calls this directly

Calls 15

ConstCopyViewMethod · 0.80
CreateFunction · 0.50
TMirrorMappingClass · 0.50
TSliceClass · 0.50
TStripeMappingClass · 0.50
moveFunction · 0.50
GetQueryIdMethod · 0.45
GetQueryOffsetMethod · 0.45
GetQuerySizeMethod · 0.45
sizeMethod · 0.45
WriteMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected