docs: @Override
      public org.bytedeco.javacpp.Pointer getHostPointer(DataBuffer buffer) {
          AllocationPoint dstPoint = ((BaseCudaDataBuffer) buffer).getAllocationPoint();
  
          // return pointer with offset if needed. length is specified for constructor compatibility purposes
          if (dstPoint.getPointers().getHostPointer() == null) {
              log.info("DevicePointer: " + dstPoint.getPointers().getDevicePointer());
              log.info("HostPointer: " + dstPoint.getPointers().getHostPointer());
              log.info("AllocStatus: " + dstPoint.getAllocationStatus());
              throw new RuntimeException("pointer is null");
          }
          //dstPoint.tickHostWrite();
          //dstPoint.tickHostRead();
          //log.info("Requesting host pointer for {}", buffer);
          //getCudaContext().syncOldStream();
          synchronizeThreadDevice(Thread.currentThread().getId(), dstPoint.getDeviceId(), dstPoint);
  
          CudaPointer p = new CudaPointer(dstPoint.getPointers().getHostPointer(), buffer.length(),
                          (buffer.offset() * buffer.getElementSize()));
          switch (buffer.dataType()) {
              case DOUBLE:
                  return p.asDoublePointer();
              case FLOAT:
                  return p.asFloatPointer();
              case INT:
                  return p.asIntPointer();
              case HALF:
                  return p.asShortPointer();
              case LONG:
                  return p.asLongPointer();
              default:
                  return p;
          }
      }