docs: @Override
      public void memcpySpecial(DataBuffer dstBuffer, Pointer srcPointer, long length, long dstOffset) {
          CudaContext context = getCudaContext();
          AllocationPoint point = ((BaseCudaDataBuffer) dstBuffer).getAllocationPoint();
  
          Pointer dP = new CudaPointer((point.getPointers().getHostPointer().address()) + dstOffset);
  
          val profH = PerformanceTracker.getInstance().helperStartTransaction();
  
          if (nativeOps.memcpyAsync(dP, srcPointer, length, CudaConstants.cudaMemcpyHostToHost, context.getOldStream()) == 0)
              throw new ND4JIllegalStateException("memcpyAsync failed");
  
          PerformanceTracker.getInstance().helperRegisterTransaction(point.getDeviceId(), profH, point.getNumberOfBytes(),MemcpyDirection.HOST_TO_HOST);
  
          if (point.getAllocationStatus() == AllocationStatus.DEVICE) {
              Pointer rDP = new CudaPointer(point.getPointers().getDevicePointer().address() + dstOffset);
  
              val profD = PerformanceTracker.getInstance().helperStartTransaction();
  
              if (nativeOps.memcpyAsync(rDP, dP, length, CudaConstants.cudaMemcpyHostToDevice, context.getOldStream()) == 0)
                  throw new ND4JIllegalStateException("memcpyAsync failed");
  
              context.syncOldStream();
  
              PerformanceTracker.getInstance().helperRegisterTransaction(point.getDeviceId(), profD, point.getNumberOfBytes(),MemcpyDirection.HOST_TO_DEVICE);
          }
  
          context.syncOldStream();
  
  
          point.tickDeviceWrite();
      }