code: public static int cudaMemcpyPeer(Pointer dst, int dstDevice, Pointer src, int srcDevice, long count)
      {
          return checkResult(cudaMemcpyPeerNative(dst, dstDevice, src, srcDevice, count));
      }
docs: Copies memory between two devices.
  
  <pre>
  cudaError_t cudaMemcpyPeer (
  void* dst,
  int  dstDevice,
  const void* src,
  int  srcDevice,
  size_t count )
  </pre>
  <div>
  <p>Copies memory between two devices.
  Copies memory from one device to memory on another device. <tt>dst</tt>
  is the base device pointer of the destination memory and <tt>dstDevice</tt> is the destination device. <tt>src</tt> is the base
  device pointer of the source memory and <tt>srcDevice</tt> is the
  source device. <tt>count</tt> specifies the number of bytes to copy.
  </p>
  <p>Note that this function is asynchronous
  with respect to the host, but serialized with respect all pending and
  future asynchronous
  work in to the current device, <tt>srcDevice</tt>, and <tt>dstDevice</tt> (use cudaMemcpyPeerAsync to
  avoid this synchronization).
  </p>
  <div>
  <span>Note:</span>
  <ul>
  <li>
  <p>Note that this function may
  also return error codes from previous, asynchronous launches.
  </p>
  </li>
  <li>
  <p>This function exhibits
  synchronous behavior for most use cases.
  </p>
  </li>
  </ul>
  </div>
  </p>
  </div>
  
  @param dst Destination device pointer
  @param dstDevice Destination device
  @param src Source device pointer
  @param srcDevice Source device
  @param count Size of memory copy in bytes
  
  @return cudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidDevice
  
  @see JCuda#cudaMemcpy
  @see JCuda#cudaMemcpyAsync
  @see JCuda#cudaMemcpyPeerAsync
  @see JCuda#cudaMemcpy3DPeerAsync