mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-04 05:41:33 +01:00
58 lines
2.1 KiB
TeX
58 lines
2.1 KiB
TeX
\pagebreak
|
|
\section{Device Routines}
|
|
\label{sec:device}
|
|
|
|
\subsection{\code{omp\_is\_initial\_device} Routine}
|
|
\label{subsec:device_is_initial}
|
|
|
|
The following example shows how the \code{omp\_is\_initial\_device} runtime library routine
|
|
can be used to query if a code is executing on the initial host device or on a
|
|
target device. The example then sets the number of threads in the \code{parallel}
|
|
region based on where the code is executing.
|
|
|
|
\cexample[4.0]{device}{1}
|
|
|
|
\ffreeexample[4.0]{device}{1}
|
|
|
|
\subsection{\code{omp\_get\_num\_devices} Routine}
|
|
\label{subsec:device_num_devices}
|
|
|
|
The following example shows how the \code{omp\_get\_num\_devices} runtime library routine
|
|
can be used to determine the number of devices.
|
|
|
|
\cexample[4.0]{device}{2}
|
|
|
|
\ffreeexample[4.0]{device}{2}
|
|
|
|
\subsection{\code{omp\_set\_default\_device} and \\
|
|
\code{omp\_get\_default\_device} Routines}
|
|
\label{subsec:device_is_set_get_default}
|
|
|
|
The following example shows how the \code{omp\_set\_default\_device} and \code{omp\_get\_default\_device}
|
|
runtime library routines can be used to set the default device and determine the
|
|
default device respectively.
|
|
|
|
\cexample[4.0]{device}{3}
|
|
|
|
\ffreeexample[4.0]{device}{3}
|
|
|
|
|
|
\subsection{Target Memory and Device Pointers Routines}
|
|
\label{subsec:target_mem_and_device_ptrs}
|
|
|
|
The following example shows how to create space on a device, transfer data
|
|
to and from that space, and free the space, using API calls. The API calls
|
|
directly execute allocation, copy and free operations on the device, without invoking
|
|
any mapping through a \code{target} directive. The \code{omp\_target\_alloc} routine allocates space
|
|
and returns a device pointer for referencing the space in the \code{omp\_target\_memcpy}
|
|
API routine on the host. The \code{omp\_target\_free} routine frees the space on the device.
|
|
|
|
The example also illustrates how to access that space
|
|
in a \code{target} region by exposing the device pointer in an \code{is\_device\_ptr} clause.
|
|
|
|
The example creates an array of cosine values on the default device, to be used
|
|
on the host device. The function fails if a default device is not available.
|
|
|
|
\cexample[4.5]{device}{4}
|
|
|