| 166 | } |
| 167 | |
| 168 | TCudaBuffer<const T, TMapping, Type> ColumnsView(const TSlice& columns) const { |
| 169 | CB_ENSURE(columns.Right <= ColumnCount); |
| 170 | TCudaBuffer<const T, TMapping, Type> buffer; |
| 171 | auto slice = GetObjectsSlice(); |
| 172 | buffer.Mapping = Mapping.ToLocalSlice(slice); |
| 173 | buffer.ColumnCount = columns.Size(); |
| 174 | |
| 175 | for (ui64 i = 0; i < Buffers.size(); ++i) { |
| 176 | if (Buffers[i].NotEmpty()) { |
| 177 | const ui64 columnsShift = NAligment::ColumnShift(Mapping.MemoryUsageAt(i), columns.Left); |
| 178 | const auto devSlice = TSlice::Intersection(slice, Mapping.DeviceSlice(i)); |
| 179 | buffer.Buffers[i] = Buffers[i].ShiftedConstBuffer( |
| 180 | columnsShift + Mapping.DeviceMemoryOffset(i, devSlice)); |
| 181 | } |
| 182 | } |
| 183 | buffer.IsSliceView = true; |
| 184 | return buffer; |
| 185 | } |
| 186 | |
| 187 | TCudaBuffer<T, TMapping, Type> ColumnsView(const TSlice& columns) { |
| 188 | CB_ENSURE(columns.Right <= ColumnCount); |
no test coverage detected