| 361 | } |
| 362 | |
| 363 | UnifiedVectorWrapper :: UnifiedVectorWrapper(const BaseVector & vec_, optional<IntRange> opt_range) |
| 364 | : vec(vec_) |
| 365 | { |
| 366 | IntRange range = {0, vec.Size()}; |
| 367 | if(opt_range) |
| 368 | range = *opt_range; |
| 369 | this->size = range.Size(); |
| 370 | |
| 371 | auto uptr = dynamic_cast<const UnifiedVector*>(&vec_); |
| 372 | if(uptr) |
| 373 | { |
| 374 | host_data = uptr->HostData() + range.First(); |
| 375 | dev_data = uptr->DevData() + range.First(); |
| 376 | uptr->UpdateDevice(); |
| 377 | uptr->InvalidateHost(); |
| 378 | initial_host_uptodate = uptr->IsHostUptodate(); |
| 379 | initial_dev_uptodate = uptr->IsDevUptodate(); |
| 380 | } |
| 381 | else |
| 382 | { |
| 383 | auto err = cudaMalloc((void**)&dev_data, size*sizeof(double)); |
| 384 | if (err != 0) |
| 385 | throw Exception("UnifiedVector allocation error, ec="+ToString(err)); |
| 386 | initial_host_uptodate = true; |
| 387 | initial_dev_uptodate = false; |
| 388 | host_data = vec.FVDouble().Data() + range.First(); |
| 389 | } |
| 390 | host_uptodate = initial_host_uptodate; |
| 391 | dev_uptodate = initial_dev_uptodate; |
| 392 | } |
| 393 | |
| 394 | UnifiedVectorWrapper :: ~UnifiedVectorWrapper() |
| 395 | { |
nothing calls this directly
no test coverage detected