tools_linker-russian.tex 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. \subsection{Компоновка}
  2. \index{OpenCL компоновщик}%
  3. \index{oclh_lr@\texttt{oclh\_lr}}%
  4. Изолированная компоновка (линковка) осуществляется утилитой \verb|oclh_lr|.
  5. \subsubsection{Синопсис}
  6. \begin{CodeParWithCC}{\\\{\}}
  7. oclh_lr [--dev-idxs=\underline{\smash{\textit{#}}},\underline{\smash{\textit{#}}},... | --dev-name=\underline{\smash{\textit{mask}}}]
  8. [--verbatim-output-name] [-o \underline{\smash{\textit{outfile}}}]
  9. [LINKER_OPTIONS] \underline{\smash{\textit{infile}}}...
  10. \end{CodeParWithCC}
  11. \subsubsection{Описание}
  12. При вызове \verb|oclh_lr| осуществляется компоновка (линковка) объектных файлов
  13. \verbIU{infile}\verb|...| для всех доступных в системе устройств GPGPU. При этом
  14. необходимо понимать, что могут быть скомпонованы только объекты скомпилированные
  15. для одной архитектуры GPGPU, а архитектуры ускорителей могут отличаться даже у
  16. одного производителя. При попытке скомпоновать объект скомпилированный для
  17. архитектуры отличной от архитектуры устройства будет выдана ошибка \verb|-42|
  18. OpenCL API:\\*
  19. \centerline{\Verb|oclerr: clCreateProgramWithBinary returned error -42 - CL\_INVALID\_BINARY|}\\*
  20. В связи с изложенным рекомендуется запускать компоновщик только для одного
  21. устройства или модели устройств используя ключ
  22. \verb|--dev-idxs=|\verbIU{\#}\verb|,|\verbIU{\#}\verb|,...| или
  23. \verb|--dev-name=|\verbIU{mask}. Если указан ключ \verb|--dev-idxs=|%
  24. \verbIU{\#}\verb|,|\verbIU{\#}\verb|,...|, то будет осуществлена компоновка
  25. только для устройств с индексами \verbIU{\#}\Verb|,|\verbIU{\#}\Verb|,...|
  26. (подробнее~см.~п.\ref{subsubsec:lr_args}). Если указан ключ \verb|--dev-name=|%
  27. \verbIU{mask}, то будет осуществлена компоновка только для устройств, модель
  28. которых соответствует маске \verbIU{mask}
  29. (подробнее~см.~п.\ref{subsubsec:lr_args}).
  30. Во время работы \verb|oclh_lr| ведётся подробный диагностический журнал в файле
  31. \verb|oclh_lr.log|, куда сохраняется избыточная информация обо всех доступных
  32. устройствах GPGPU, используемых платформах и созданных для компоновки
  33. контекстах. Формат файла-журнала описан в п.\ref{subsec:logformat}.
  34. Журнал компоновки программы ведётся в отдельных файлах
  35. \verbIU{outfile}\verb|-|\verbI{модель\_устройства\_GPGPU}\verb|-link.log|.
  36. Результат работы компоновщика -- исполняемый файл-объект или библиотека
  37. сохраняется в файле
  38. \verbIU{outfile}\verb|-|\verbI{модель\_устройства\_GPGPU}\verb|.clexe| или
  39. \verbIU{outfile}\verb|-|\verbI{модель\_устройства\_GPGPU}\verb|.clso|,
  40. соответственно. Если указан ключ \verb|--verbatim-output-name|, то результат
  41. будет сохранен в файле \verbIU{outfile}. Иногда возникает ситуация, когда
  42. библиотека OpenCL производителя устройства выдала в качестве результата
  43. несколько двоичных файлов, в таком случае все двоичные файлы будут сохранены, но
  44. к именам файлов будет добавлен постфикс \verb|.|\verbI{N}, где
  45. \verbI{N}~--~десятичное число обозначающее порядковый номер (начиная с ноля)
  46. двоичного блока сформированного компилятором производителя устройства GPGPU.
  47. Если ключ \verb|-o| не указан, то \verbIU{outfile} в названии файла будет
  48. заменён на подстроку вида \verb|program_0x|\verbI{HHHH}. В случае если модель
  49. устройства GPGPU средствами OpenCL определить не удалось, тогда
  50. \verbI{модель\_устройства\_GPGPU} будет заменена на подстроку вида
  51. \verb|dev_0x|\verbI{HHHH}. В приведённых подстановках \verbI{HHHH} это
  52. шестнадцатеричное представление последних двух байт адресов программы и
  53. устройства GPGPU, соответственно. Так как для одного запуска адрес программы и
  54. устройства GPGPU уникален, с большой вероятностью два последних байта также
  55. уникальны, поэтому могут быть использованы как подстрока для поиска связанных
  56. записей в файле основного журнала \verb|oclh_lr.log|.
  57. Имя файла основного журнала \verb|oclh_lr.log| и пути сохранения файлов могут
  58. быть изменены при сборке библиотеки OpenCL helpers в заголовочном файле\\*
  59. \indent\indent\verb|src/inc/oclh_settings.h|\\*
  60. Данное имя и пути сохранения журналов и результатов компоновки определены в
  61. макросах\\*
  62. \indent\indent\verb|#define _GHM_LOG_PATH "."|\\*
  63. \indent\indent\verb|#define _GHM_OCLH_LINKER_LOG_FILENAME "oclh_lr.log"|
  64. \subsubsection{Аргументы}
  65. \label{subsubsec:lr_args}
  66. {\NmCnvDescript\verb|--dev-idxs=|\verbIU{\#}\Verb|,|\verbIU{\#}\verb|,...|\\*
  67. числа \verbIU{\#}\verb|,|\verbIU{\#}\verb|,...|, указанные без пробелов через
  68. запятую после ключа \verb|--dev-idxs=| это порядковые номера (индексы) устройств
  69. GPGPU в системе, для которых будет осуществлена компоновка. Индексы начинаются с
  70. ноля. Узнать индекс конкретного устройства можно из файла-журнала, в начальной
  71. секции которого в описании устройства самая первая строка имеет вид\par
  72. {\hspace{2\leftskip}\verbI{YYYY}\verb|-|\verbI{MM}\verb|-|\verbI{DD}%
  73. \verb| |\verbI{hh}\verb|:|\verbI{mm}\verb|:|\verbI{ss}%
  74. \verb| ws_0x|\verbI{HHHH}\verb| dev_0x|\verbI{HHHH}%
  75. \verb+ | Device index: +\verbI{N}},\par
  76. \noindent где \verbI{N}~--~индекс данного устройства.\par}
  77. {\NmCnvDescript\verb|--dev-name=|\verbIU{mask}\\* строка \verbIU{mask},
  78. указанная после ключа \verb|--dev-name=| это маска, которая указывает для каких
  79. моделей устройств, присутствующих в системе будет осуществлена компоновка.
  80. Символами подстановки являются:\par
  81. \hspace{2\leftskip}\verb|?| -- замещает один любой символ;\par
  82. \hspace{2\leftskip}\verb|*| -- замещает любое количество любых символов.\par
  83. \noindent При отсутствии символов подстановки \verbIU{mask} рассматривается как
  84. точное наименование модели устройства. Узнать модель конкретного устройства
  85. можно из файла-журнала, в начальной секции которого в описании устройств
  86. присутствует строка вида\par
  87. {\hspace{2\leftskip}\verbI{YYYY}\verb|-|\verbI{MM}\verb|-|\verbI{DD}%
  88. \verb| |\verbI{hh}\verb|:|\verbI{mm}\verb|:|\verbI{ss}%
  89. \verb| ws_0x|\verbI{HHHH}\verb| dev_0x|\verbI{HHHH}%
  90. \verb+ | Device name: +\verbI{модель}}\par
  91. \noindent где \verbI{модель}~--~и есть строка, которая проверяется на
  92. соответствие маске \verbIU{mask}.\par}
  93. {\NmCnvDescript\verb|--verbatim-output-name|\\* данный ключ предписывает
  94. компоновщику не добавлять к имени выходного файла модель устройства и
  95. расширение, а использовать его именно так как указано. Однако, в случае если
  96. результатом работы компоновщика является не один двоичный блок, то к имени будет
  97. добавлен постфикс \verb|.|\verbI{N}, где \verbI{N}~--~десятичное число
  98. обозначающее порядковый номер (начиная с ноля) двоичного блока сформированного
  99. компоновщиком производителя устройства GPGPU.\par}
  100. {\NmCnvDescript\verb|-o |\verbIU{outfile}\\* строка \verbIU{outfile}~--~имя
  101. выходного файла. Если не задан ключ \verb|--verbatim-output-name|, то
  102. \verbIU{outfile} используется как префикс имени файла \verbIU{outfile}\verb|-|%
  103. \verbI{модель\_устройства\_GPGPU}\verb|.clexe| или \verbIU{outfile}\verb|-|%
  104. \verbI{модель\_устройства\_GPGPU}\verb|.clso|, содержащего двоичный блок кода
  105. сформированный в результате компоновки. В случае, если ключ
  106. \verb|--verbatim-output-name| указан, то \verbIU{outfile} используется <<как
  107. есть>>, за исключением случаев, когда в результате компоновки сформированы
  108. несколько двоичных блоков~--~в таком случае все двоичные блоки будут сохранены с
  109. именами файлов \verbIU{outfile}\verb|.|\verbI{N}, где \verbI{N}~--~порядковый
  110. номер двоичного блока начиная с ноля. Кроме того строка \verbIU{outfile} будет
  111. использована как префикс в имени файла-журнала компоновки.\par
  112. \begin{ImpNote}
  113. Пробельные символы в начале и в конце строки \verbIU{outfile} будут удалены.
  114. Пробельные символы внутри строки \verbIU{outfile} будут заменены на знак
  115. подчёркивания~<<\verb|_|>>~(underscore).
  116. \end{ImpNote}
  117. }
  118. {\NmCnvDescript\verb|LINKER_OPTIONS|\\* аргументы компоновщика. В неизменённом
  119. виде и с сохранением последовательности передаются компоновщику производителя.
  120. Сами аргументы компоновщика описаны в спецификациях OpenCL, кроме того,
  121. компоновщик производителя может поддерживать дополнительные аргументы не
  122. отражённые в спецификациях OpenCL.\par}
  123. {\NmCnvDescript\verbIU{infile}\verb|...|\\* список разделённый пробелами с
  124. именами файлов содержащих скомпилированные объекты OpenCL. Имя файла не может
  125. начинаться с символа~<<\verb|-|>>.\par}