code: public static int cudaMemPrefetchAsync(Pointer devPtr, long count, int dstDevice, cudaStream_t stream)
      {
          return checkResult(cudaMemPrefetchAsyncNative(devPtr, count, dstDevice, stream));
      }
docs: Prefetches memory to the specified destination device
  <br>
  Prefetches memory to the specified destination device.  devPtr is the
  base device pointer of the memory to be prefetched and dstDevice is the
  destination device. count specifies the number of bytes to copy. stream
  is the stream in which the operation is enqueued.<br>
  <br>
  Passing in cudaCpuDeviceId for dstDevice will prefetch the data to CPU memory.<br>
  <br>
  If no physical memory has been allocated for this region, then this memory region
  will be populated and mapped on the destination device. If there's insufficient
  memory to prefetch the desired region, the Unified Memory driver may evict pages
  belonging to other memory regions to make room. If there's no memory that can be
  evicted, then the Unified Memory driver will prefetch less than what was requested.<br>
  <br>
  In the normal case, any mappings to the previous location of the migrated pages are
  removed and mappings for the new location are only setup on the dstDevice.
  The application can exercise finer control on these mappings using ::cudaMemAdvise.<br>
  <br>
  Note that this function is asynchronous with respect to the host and all work
  on other devices.
  
  @param devPtr    Pointer to be prefetched
  @param count     Size in bytes
  @param dstDevice Destination device to prefetch to
  @param stream    Stream to enqueue prefetch operation
  
  @return cudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidDevice
  
  @see JCuda#cudaMemcpy
  @see JCuda#cudaMemcpyPeer
  @see JCuda#cudaMemcpyAsync
  @see JCuda#cudaMemcpy3DPeerAsync
  @see JCuda#cudaMemAdvise