| 225 | } |
| 226 | |
| 227 | TComputationStream TCudaManager::RequestStream() { |
| 228 | if (FreeStreams.size() == 0) { |
| 229 | TDistributedObject<ui32> stream = CreateDistributedObject<ui32>(); |
| 230 | for (ui64 dev = 0; dev < stream.DeviceCount(); ++dev) { |
| 231 | if (IsActiveDevice[dev]) { |
| 232 | stream.Set(dev, GetState().Devices[dev]->RequestStream()); |
| 233 | } else { |
| 234 | stream.Set(dev, 0); |
| 235 | } |
| 236 | } |
| 237 | FreeStreams.push_back(Streams.size()); |
| 238 | Streams.push_back(stream); |
| 239 | } |
| 240 | |
| 241 | ui32 id = FreeStreams.back(); |
| 242 | FreeStreams.pop_back(); |
| 243 | return TComputationStream(id, this); |
| 244 | } |
| 245 | |
| 246 | bool TCudaManager::HasRemoteDevices() const { |
| 247 | for (auto dev : State->Devices) { |