| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- \subsection{Linking}
- \index{OpenCL linker}%
- \index{oclh_lr@\texttt{oclh\_lr}}%
- Isolated linking is performed by \verb|oclh_lr|.
- \subsubsection{Synopsis}
- \begin{CodeParWithCC}{\\\{\}}
- oclh_lr [--dev-idxs=\underline{\smash{\textit{#}}},\underline{\smash{\textit{#}}},... | --dev-name=\underline{\smash{\textit{mask}}}]
- [--verbatim-output-name] [-o \underline{\smash{\textit{outfile}}}]
- [LINKER_OPTIONS] \underline{\smash{\textit{infile}}}...
- \end{CodeParWithCC}
- \subsubsection{Description}
- When \verb|oclh_lr| is called, OpenCL objects are linked from files
- \verbIU{infile}\verb|...| for all GPGPU devices available on the system. It
- should be understood that only objects compiled for one GPGPU architecture can
- be linked, and GPGPU architectures can differ even from one vendor's devices. An
- attempt to link object compiled for an architecture different from the device
- architecture will result in error \verb|-42|
- OpenCL API:\\*
- \centerline{\Verb|oclerr: clCreateProgramWithBinary returned error -42 - CL\_INVALID\_BINARY|}\\*
- According to mentioned above, it is recommended to run the linker for only one device or device model using option
- \verb|--dev-idxs=|\verbIU{\#}\verb|,|\verbIU{\#}\verb|,...| or
- \verb|--dev-name=|\verbIU{mask}. If the
- \verb|--dev-idxs=|\verbIU{\#}\verb|,|\verbIU{\#}\verb|,...| option was
- specified, then linking would be performed only for the GPGPU devices with
- the \verbIU{\#}\Verb|,|\verbIU{\#}\Verb|,...| indices (for details, see
- s.\ref{subsubsec:lr_args}). If the \verb|--dev-name=|\verbIU{mask} was
- specified, then linking would be performed only for the GPGPU devices whose
- model matches the \verbIU{mask} (for details, see s.\ref{subsubsec:lr_args}).
- During the execution of the \verb|oclh_lr| tool, a detailed diagnostic log is
- being maintained in the \verb|oclh_lr.log| file, where excessive information is
- stored on all available GPGPU devices, used platforms, and contexts created for
- linking. The log file format is described~in~s.\ref{subsec:logformat}.
- The linking log is maintained in log files
- \verbIU{outfile}\verb|-|\verbI{GPGPU\_device\_model}\verb|-link.log|.
- The result of the linker's work is an executable binary object or a shared
- binary object (library) saved in the
- \verbIU{outfile}\verb|-|\verbI{GPGPU\_device\_model}\verb|.clexe| or
- \verbIU{outfile}\verb|-|\verbI{GPGPU\_device\_model}\verb|.clso| file,
- respectively. If the option \verb|--verbatim-output-name| was specified, then
- the result would be saved in the \verbIU{outfile} file. Sometimes a situation
- arises when the vendor's OpenCL library generates several binary objects as a
- result, in which case all binary objects will be saved, but the postfix
- \verb|.|\verbI{N} will be added to the file names, where \verbI{N} is a decimal
- number denoting the sequence number (starting from zero) of the binary object
- generated by the linker of the vendor of the GPGPU device.
- If the option \verb|-o| is not specified, then the \verbIU{outfile} in the file
- name will be replaced by a substring of the form \verb|program_0x|\verbI{HHHH}.
- In case if the GPGPU device model is not identified by the OpenCL means, then
- the \verbI{GPGPU\_device\_model} will be replaced by a substring of the form
- \verb|dev_0x|\verbI{HHHH}. In the replacements mentioned above, \verbI{HHHH} is
- hexadecimal representation of the last two bytes of the program and the GPGPU
- device addresses, respectively. Given that addresses of the program and GPGPU
- device are unique for one application run, it is highly likely that the
- combination of the name of the instance and the last two bytes of its address is
- also unique, so can be used as a substring to search related entries in the main
- log file \verb|oclh_lr.log|.
- The main log file name \verb|oclh_lr.log| and the file saving path can be
- changed when building the OpenCL\_helpers library in the header file\\*
- \indent\indent\verb|src/inc/oclh_settings.h|\\*
- That name and the path to save logs and linking results are defined in
- macrodefinitions\\*
- \indent\indent\verb|#define _GHM_LOG_PATH "."|\\*
- \indent\indent\verb|#define _GHM_OCLH_LINKER_LOG_FILENAME "oclh_lr.log"|
- \subsubsection{Arguments}
- \label{subsubsec:lr_args}
- {\NmCnvDescript\verb|--dev-idxs=|\verbIU{\#}\Verb|,|\verbIU{\#}\verb|,...|\\*
- the \verbIU{\#}\verb|,|\verbIU{\#}\verb|,...| numbers specified without spaces
- separated by commas after the \verb|--dev-idxs=| option are sequence numbers
- (indices) of GPGPU devices in the system for which the linking will be
- performed. Indices start with zero. You can find out the indice of a specific
- device from the log file, in the first section of which in the device
- description the first line has the form\par
- {\hspace{2\leftskip}\verbI{YYYY}\verb|-|\verbI{MM}\verb|-|\verbI{DD}%
- \verb| |\verbI{hh}\verb|:|\verbI{mm}\verb|:|\verbI{ss}%
- \verb| ws_0x|\verbI{HHHH}\verb| dev_0x|\verbI{HHHH}%
- \verb+ | Device index: +\verbI{N}},\par
- \noindent where \verbI{N} is the indice of this device.\par}
- {\NmCnvDescript\verb|--dev-name=|\verbIU{mask}\\* the \verbIU{mask} string
- specified after the \verb|--dev-name=| option is a wildcard that defines which
- device models present in the system the linking will be performed for.
- Wildcard characters are:\par
- \hspace{2\leftskip}\verb|?| -- matches any single character;\par
- \hspace{2\leftskip}\verb|*| -- matches any number of any characters including
- none.\par
- \noindent In the absence of wildcard characters the \verbIU{mask} is considered
- to be the exact name of the device model. You can find out the model of a
- specific device from the log file, in the first section of which in the device
- description there is the line of the form\par
- {\hspace{2\leftskip}\verbI{YYYY}\verb|-|\verbI{MM}\verb|-|\verbI{DD}%
- \verb| |\verbI{hh}\verb|:|\verbI{mm}\verb|:|\verbI{ss}%
- \verb| ws_0x|\verbI{HHHH}\verb| dev_0x|\verbI{HHHH}%
- \verb+ | Device name: +\verbI{model}}\par
- \noindent where \verbI{model} is the string that is checked for matching with
- the \verbIU{mask}.\par}
- {\NmCnvDescript\verb|--verbatim-output-name|\\* the given option instructs the
- linker not to add the GPGPU device model and an extension to the output file
- name, but to use it exactly as described. But, if the result of the linker's
- work was more than one binary object, then the \verb|.|\verbI{N} postfix would
- be added to the file name, where \verbI{N} is decimal number denoting the
- sequence number (starting from zero) of the binary object formed by the linker
- of the GPGPU device vendor.\par}
- {\NmCnvDescript\verb|-o |\verbIU{outfile}\\* the \verbIU{outfile} string is the
- name of the output file. If the \verb|--verbatim-output-name| option was not
- specified, then the \verbIU{outfile} string would be used as the prefix of the
- \verbIU{outfile}\verb|-|\verbI{GPGPU\_device\_model}\verb|.clexe| or
- \verbIU{outfile}\verb|-|\verbI{GPGPU\_device\_model}\verb|.clso| file name,
- which contains the binary object generated as the result of linking. If the
- \verb|--verbatim-output-name| option was specified, then the \verbIU{outfile}
- string would be used <<as is>>, unless several binary objects was generated as
- result of linking~--~in this case, all binary objects would be saved with
- the \verbIU{outfile}\verb|.|\verbI{N} file names, where \verbI{N} is the
- sequence number of the binary object starting from zero. Additionally, the
- \verbIU{outfile} string is used as the prefix in the name of the linking log
- file.\par
- \begin{ImpNote}
- Space characters at the beginning and the end of the \verbIU{outfile} string are
- deleted. Space characters inside of the \verbIU{outfile} string are replaced
- with underscores.
- \end{ImpNote}
- }
- {\NmCnvDescript\verb|LINKER_OPTIONS|\\* linker arguments. In unchanged form
- and with the preservation of the sequence passed to the linker of the vendor.
- The linker arguments themselves are described in the OpenCL specifications, in
- addition, the vendor's linker can support additional arguments not fixed in
- the OpenCL specifications.\par}
- {\NmCnvDescript\verbIU{infile}\verb|...|\\* the list separated by spaces with
- the names of the files containing the OpenCL compiled objects. The file name
- cannot begin with a~<<\verb|-|>>~character.\par}
|