| 670 | |
| 671 | template <class T> |
| 672 | inline TVector<TDistributedObject<std::remove_const_t<T>>> ReadToDistributedObjectVec(const TStripeBuffer<T>& src) { |
| 673 | using T_ = std::remove_const_t<T>; |
| 674 | TVector<T_> tmp; |
| 675 | src.Read(tmp); |
| 676 | ui32 devCount = NCudaLib::GetCudaManager().GetDeviceCount(); |
| 677 | TVector<TDistributedObject<T_>> result; |
| 678 | |
| 679 | for (ui32 dev = 0; dev < devCount; ++dev) { |
| 680 | CB_ENSURE(src.GetMapping().DeviceSlice(dev).Size() == src.GetMapping().DeviceSlice(0).Size()); |
| 681 | } |
| 682 | ui32 size = static_cast<ui32>(tmp.size() / devCount); |
| 683 | |
| 684 | for (ui32 i = 0; i < size; ++i) { |
| 685 | TDistributedObject<T_> obj = NCudaLib::GetCudaManager().CreateDistributedObject<T_>(); |
| 686 | for (ui32 dev = 0; dev < devCount; ++dev) { |
| 687 | obj.Set(dev, tmp[i + dev * size]); |
| 688 | } |
| 689 | result.push_back(obj); |
| 690 | } |
| 691 | return result; |
| 692 | } |
| 693 | } |
no test coverage detected