code: public static int cuStreamWaitValue32(CUstream stream, CUdeviceptr addr, int value, int flags)
      {
          return checkResult(cuStreamWaitValue32Native(stream, addr, value, flags));
      }
docs: Wait on a memory location.<br>
  <br>
  Enqueues a synchronization of the stream on the given memory location.
  Work ordered after the operation will block until the given condition on
  the memory is satisfied. By default, the condition is to wait for
  (int32_t)(*addr - value) >= 0, a cyclic greater-or-equal. Other condition
  types can be specified via flags.<br>
  <br>
  If the memory was registered via cuMemHostRegister(), the device pointer
  should be obtained with cuMemHostGetDevicePointer(). This function cannot
  be used with managed memory (cuMemAllocManaged).<br>
  <br>
  On Windows, the device must be using TCC, or the operation is not
  supported. See cuDeviceGetAttributes().
  
  @param stream The stream to synchronize on the memory location.
  @param addr The memory location to wait on.
  @param value The value to compare with the memory location.
  @param flags See {@link CUstreamWaitValue_flags}
  @return CUDA_SUCCESS, CUDA_ERROR_INVALID_VALUE, CUDA_ERROR_NOT_SUPPORTED
  
  @see JCudaDriver#cuStreamWriteValue32
  @see JCudaDriver#cuStreamBatchMemOp
  @see JCudaDriver#cuMemHostRegister
  @see JCudaDriver#cuStreamWaitEvent