helper function for copy dimension vector. Returns the total size of dimension vector.
(toDimVector, fromDimVector unsafe.Pointer, length, offset int, numDimsPerDimWidth queryCom.DimCountsPerDimWidth, toVectorCapacity, fromVectorCapacity int, copyFunc cgoutils.AsyncMemCopyFunc, stream unsafe.Pointer, device int)
| 631 | |
| 632 | // helper function for copy dimension vector. Returns the total size of dimension vector. |
| 633 | func asyncCopyDimensionVector(toDimVector, fromDimVector unsafe.Pointer, length, offset int, numDimsPerDimWidth queryCom.DimCountsPerDimWidth, |
| 634 | toVectorCapacity, fromVectorCapacity int, copyFunc cgoutils.AsyncMemCopyFunc, |
| 635 | stream unsafe.Pointer, device int) { |
| 636 | |
| 637 | ptrFrom, ptrTo := fromDimVector, toDimVector |
| 638 | numNullVectors := 0 |
| 639 | for _, numDims := range numDimsPerDimWidth { |
| 640 | numNullVectors += int(numDims) |
| 641 | } |
| 642 | |
| 643 | dimBytes := 1 << uint(len(numDimsPerDimWidth)-1) |
| 644 | bytesToCopy := length * dimBytes |
| 645 | for _, numDim := range numDimsPerDimWidth { |
| 646 | for i := 0; i < int(numDim); i++ { |
| 647 | ptrTemp := utils.MemAccess(ptrTo, dimBytes*offset) |
| 648 | copyFunc(ptrTemp, ptrFrom, bytesToCopy, stream, device) |
| 649 | ptrTo = utils.MemAccess(ptrTo, dimBytes*toVectorCapacity) |
| 650 | ptrFrom = utils.MemAccess(ptrFrom, dimBytes*fromVectorCapacity) |
| 651 | } |
| 652 | dimBytes >>= 1 |
| 653 | bytesToCopy = length * dimBytes |
| 654 | } |
| 655 | |
| 656 | // copy null bytes |
| 657 | for i := 0; i < numNullVectors; i++ { |
| 658 | ptrTemp := utils.MemAccess(ptrTo, offset) |
| 659 | copyFunc(ptrTemp, ptrFrom, length, stream, device) |
| 660 | ptrTo = utils.MemAccess(ptrTo, toVectorCapacity) |
| 661 | ptrFrom = utils.MemAccess(ptrFrom, fromVectorCapacity) |
| 662 | } |
| 663 | } |
| 664 | |
| 665 | // cleanupDeviceResultBuffers cleans up result buffers and resets result fields. |
| 666 | func (bc *oopkBatchContext) cleanupDeviceResultBuffers() { |
no test coverage detected