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

Function RunReshardTest

catboost/cuda/cuda_lib/ut/test_cuda_buffer.cpp:433–497  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

431 }
432
433 inline void RunReshardTest(NCudaLib::TCudaManager & manager, bool useCompress = false) {
434 TRandom rng(0);
435 if (manager.GetDeviceCount() > 1) {
436 const ui64 count = 1 << 25;
437 const ui64 objectSize = 3;
438
439 auto singleMapping = TSingleMapping(1, count, objectSize);
440 auto singleMappingOtherDev = TSingleMapping(0, count, objectSize);
441 auto mirrorMapping = TMirrorMapping(count, objectSize);
442 auto stripeMapping = TStripeMapping::SplitBetweenDevices(count, objectSize);
443 auto anotherStripeMapping = SplitBetweenDevicesRandom(rng, count, objectSize);
444
445 TVector<float> reference;
446 for (ui64 i = 0; i < count * objectSize; ++i) {
447 reference.push_back(((i * count + objectSize) % 10050) * 1.0f);
448 }
449
450 auto bufferSingle = TSingleBuffer<float>::Create(singleMapping);
451 auto bufferSingleOtherDev = TSingleBuffer<float>::Create(singleMappingOtherDev);
452 auto bufferStripe = TStripeBuffer<float>::Create(stripeMapping);
453 auto bufferMirror = TMirrorBuffer<float>::Create(mirrorMapping);
454 auto bufferStripeRandom = TStripeBuffer<float>::Create(anotherStripeMapping);
455
456 bufferSingle.CreateWriter(reference).Write();
457
458 //single -> mirror -> stripe -> stripe -> single
459 {
460 FillBuffer(bufferMirror, 1.0f);
461 Reshard(bufferSingle, bufferMirror);
462 Validate(reference, bufferMirror);
463 for (ui32 i = 0; i < NCudaLib::GetCudaManager().GetDeviceCount(); ++i) {
464 Validate(reference, bufferMirror.DeviceView(i));
465 }
466 FillBuffer(bufferStripe, 10.0f);
467 Reshard(bufferMirror, bufferStripe, 0u, useCompress);
468 Validate(reference, bufferStripe);
469 //
470 FillBuffer(bufferStripeRandom, 100.0f);
471 Reshard(bufferStripe, bufferStripeRandom, 0u, useCompress);
472 Validate(reference, bufferStripeRandom);
473 //
474 FillBuffer(bufferSingleOtherDev, 1000.0f);
475 Reshard(bufferStripeRandom, bufferSingleOtherDev, 0u, useCompress);
476 Validate(reference, bufferSingleOtherDev);
477 }
478
479 //single -> single -> stripe -> mirror
480 {
481 FillBuffer(bufferSingleOtherDev, 1.0f);
482 Reshard(bufferSingle, bufferSingleOtherDev, 0u, useCompress);
483 Validate(reference, bufferSingleOtherDev);
484
485 FillBuffer(bufferStripe, 1.0f);
486 Reshard(bufferSingleOtherDev, bufferStripe, 0u, useCompress);
487 Validate(reference, bufferStripe);
488
489 FillBuffer(bufferMirror, 1.0f);
490 Reshard(bufferStripe, bufferMirror, 0u, useCompress);

Callers 1

Y_UNIT_TESTFunction · 0.85

Calls 11

ReshardFunction · 0.85
CreateWriterMethod · 0.80
ValidateFunction · 0.70
TSingleMappingClass · 0.50
TMirrorMappingClass · 0.50
CreateFunction · 0.50
GetDeviceCountMethod · 0.45
push_backMethod · 0.45
WriteMethod · 0.45
DeviceViewMethod · 0.45

Tested by

no test coverage detected