\subsection{\code{nowait} Clause on \code{target} Construct} \label{subsec:target_nowait_clause} \index{target construct@\code{target} construct!nowait clause@\code{nowait} clause} \index{clauses!nowait@\code{nowait}} \index{nowait clause@\code{nowait} clause} The following example shows how to execute code asynchronously on a device without an explicit task. The \code{nowait} clause on a \code{target} construct allows the thread of the \plc{target task} to perform other work while waiting for the \code{target} region execution to complete. Hence, the \code{target} region can execute asynchronously on the device (without requiring a host thread to idle while waiting for the \plc{target task} execution to complete). In this example the product of two vectors (arrays), \plc{v1} and \plc{v2}, is formed. One half of the operations is performed on the device, and the last half on the host, concurrently. After a team of threads is formed the primary thread generates the \plc{target task} while the other threads can continue on, without a barrier, to the execution of the host portion of the vector product. The completion of the \plc{target task} (asynchronous target execution) is guaranteed by the synchronization in the implicit barrier at the end of the host vector-product worksharing loop region. See the \code{barrier} glossary entry in the OpenMP specification for details. The host loop scheduling is \code{dynamic}, to balance the host thread executions, since one thread is being used for offload generation. In the situation where little time is spent by the \plc{target task} in setting up and tearing down the target execution, \code{static} scheduling may be desired. \cexample[5.1]{async_target}{3} \ffreeexample[5.1]{async_target}{3}