Я понимаю, потратив более 16 часов на то, чтобы OpenCL работал на Windows и Linux, что OpenCL On ubuntu 16.04, процессор Intel Sandy Bridge наиболее близок к работе.
Что не работает для я был от установки драйверов и конфигурации, после чего я пробовал из нескольких мест. Да, версии были разные. Я принимал это во внимание, когда это возможно. Но тогда я впервые установил библиотеки и установил связь. Поэтому я надеюсь, что это поможет любому новичку, как я. Я рассмотрел только часть графических процессоров Intel
sudo apt install clinfo ocl-icd-opencl-dev opencl-headers
Проверьте вывод функции clinfo
clinfo | grep "GPU"
, чтобы проверить, является ли GPU включен. Если на выходе нет строки типа
Device Type GPU
, тогда GPU еще не поддерживает OpenCL. В этом случае попробуйте установить beignet-opencl-icd, mesa-opencl-icd и т. Д. - возможно, по одному за раз. Продолжайте проверять вывод clinfo после каждого. Если он содержит указанную выше строку, все готово.
Если это не сработает, установите драйверы opencl для Intel из OpenCL On ubuntu 16.04, Intel Sandy Bridge CPU . Для автоматической установки требуется тонна времени и пространства. Однако есть альтернативный метод. Разархивируйте архив. Установите чужой, если у вас еще нет: sudo apt install alien
cd в распакованную папку и запустите
sudo alien -i *.rpm
Еще раз проверьте вывод «clinfo» , Он должен иметь графический процессор. клинфо | grep «GPU»
На этом этапе у вас будет рабочая реализация OpenCL.
Однако, примеряя примеры (отсюда), я обнаружил, что большинство примеров работают с Библиотеки Intel (см. Ниже), некоторые из них не работают с библиотеками, установленными с дистрибутивом (установлено выше). (Я полагаю, это связано с различными версиями openCL.)
Установите Intel OpenCL SDK для Linux (после регистрации бесплатно) с ними, начиная с здесь здесь . Просто запустите скрипт установщика - не нужно работать над тем, чтобы заставить его работать с Eclipse и всеми. Возможно, вам понадобится
sudo apt install dkms
. На этом этапе у вас должно быть все готово.
Знай процесс компиляции программ C: во-первых, генерируются объектные файлы, затем они связаны. См. Https://stackoverflow.com/questions/31179452/what-exactly-is-in-aoa-so-file.
В IDE (я не знаю о терминале) есть две части для работы с библиотеками. Сначала включается путь к файлам заголовков. Второй включает файлы библиотеки в проекте.
Я использую CodeBlocks. Итак, причина, по которой Linux нравится, заключается в том, что самая первая команда этого ответа отправила файлы в их предполагаемые места. Файлы заголовков находятся в каталоге / usr / include в папке «CL». Библиотека (в моем случае) находится под / usr / lib / x86_64-linux-gnu, с именем «libOpenCL.so». Вам не нужно ничего делать, чтобы использовать их. Вы можете просто начать кодирование -
#include
В случае Intel OpenCL SDK файлы заголовков находятся под / opt / intel / opencl-sdk / include; в то время как файлы библиотеки находятся в разделе После установки, проверьте содержимое / opt / intel / opencl для содержимого. У них тоже есть библиотеки. Однако один из файлов библиотеки дал мне синтаксическую ошибку (libclang.so). Intel OpenCL SDK загружается в основном для файлов заголовков в: / opt / intel / opencl-sdk / lib64 - только .so. (Я обнаружил, что файл libclang.so дал синтаксическую ошибку. Проверьте во время запуска программы.)
В случае CodeBlocks использовать эти файлы Intel - нестандартные - создать новый проект , Щелкните правой кнопкой мыши проект в диспетчере - подзаголовок. Перейдите к «Параметры сборки». Выберите имя проекта в левой панели - таким образом, настройки будут применены для версий Release и Debug. В настройках компоновщика -> библиотеки ссылок нажмите «Добавить». Здесь добавьте библиотеки (а не файлы заголовков, все .so): at / opt / intel / opencl-sdk / lib64. На вкладке «Каталоги поиска» в разделе «компилятор» добавьте / opt / intel / opencl / include (или где бы ни были ваши файлы заголовков).
В случае CodeBlocks , сначала установите CDT. Затем, после создания проекта, в разделе Project -> Properties -> C / C ++ Build -> Settings -> Tool Settings, (1) в GCC C ++ Compiler, добавьте каталог файлов заголовков. (2) в GCC C ++ Linker, в разделе «Библиотеки», добавьте OpenCL, а в нижней части в разделе «Путь к библиотеке» добавьте путь. В моем случае, чтобы заставить его работать, мне потребовалось: / opt / intel / opencl / include в первой части и / opt / intel / opencl / SDK / lib64 во второй части. Значение по умолчанию, как в случае с Codeblocks, не работает. Возможно, это связано с версиями или я не пробовал правильно - Eclipse для меня новичок.
Следующее должно выполняться и компилироваться: https: //stackoverflow.com/questions/31179452/what-exactly-is-in-aoa-so-file
Кредиты: Интернет
Невозможно передать несколько параметров в шаблон systemd (см. соответствующее обсуждение списка рассылки). Однако, поскольку у нас есть только два параметра, а один - имя пользователя, имеет смысл сделать его пользовательской службой вместо системной службы.
Пользовательские службы могут запускаться при загрузке, если вы связаны с рассылкой list для этих пользователей:
sudo loginctl enable-linger username
Из man loginctl:
enable-linger [USER...], disable-linger [USER...]
Enable/disable user lingering for one or more users. If enabled for
a specific user, a user manager is spawned for the user at boot and
kept around after logouts. This allows users who are not logged in
to run long-running services. Takes one or more user names or
numeric UIDs as argument. If no argument is specified,
enables/disables lingering for the user of the session of the
caller.
Вы можете создать службу пользователя в /etc/systemd/user, которая будет выглядеть (адаптация вашей предыдущей службы):
[Unit]
Description=Start TigerVNC Server at startup
After=syslog.target network.target
[Service]
Type=forking
PAMName=login
PIDFile=%h/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -depth 24 -geometry 1920x1080 -nolisten tcp -localhost
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=default.target
Используйте спецификатор %h для домашнего каталога пользователя. Я опустил поле User=, что не имеет смысла в пользовательских сеансах. Также обратите внимание на изменение WantedBy в [Install] из multi-user.target (которое не существует в пользовательских сеансах) на default.target.
Пользователи могут затем управлять этой услугой с помощью команд systemctl --user. (Обратите внимание, что вам может потребоваться перезапустить после включения linger, если этот пользователь еще не вошел в систему, так что для них запускается пользовательский сеанс.)
Невозможно передать несколько параметров в шаблон systemd (см. соответствующее обсуждение списка рассылки). Однако, поскольку у нас есть только два параметра, а один - имя пользователя, имеет смысл сделать его пользовательской службой вместо системной службы.
Пользовательские службы могут запускаться при загрузке, если вы связаны с рассылкой list для этих пользователей:
sudo loginctl enable-linger username
Из man loginctl:
enable-linger [USER...], disable-linger [USER...]
Enable/disable user lingering for one or more users. If enabled for
a specific user, a user manager is spawned for the user at boot and
kept around after logouts. This allows users who are not logged in
to run long-running services. Takes one or more user names or
numeric UIDs as argument. If no argument is specified,
enables/disables lingering for the user of the session of the
caller.
Вы можете создать службу пользователя в /etc/systemd/user, которая будет выглядеть (адаптация вашей предыдущей службы):
[Unit]
Description=Start TigerVNC Server at startup
After=syslog.target network.target
[Service]
Type=forking
PAMName=login
PIDFile=%h/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -depth 24 -geometry 1920x1080 -nolisten tcp -localhost
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=default.target
Используйте спецификатор %h для домашнего каталога пользователя. Я опустил поле User=, что не имеет смысла в пользовательских сеансах. Также обратите внимание на изменение WantedBy в [Install] из multi-user.target (которое не существует в пользовательских сеансах) на default.target.
Пользователи могут затем управлять этой услугой с помощью команд systemctl --user. (Обратите внимание, что вам может потребоваться перезапустить после включения linger, если этот пользователь еще не вошел в систему, так что для них запускается пользовательский сеанс.)
Невозможно передать несколько параметров в шаблон systemd (см. соответствующее обсуждение списка рассылки). Однако, поскольку у нас есть только два параметра, а один - имя пользователя, имеет смысл сделать его пользовательской службой вместо системной службы.
Пользовательские службы могут запускаться при загрузке, если вы связаны с рассылкой list для этих пользователей:
sudo loginctl enable-linger username
Из man loginctl:
enable-linger [USER...], disable-linger [USER...]
Enable/disable user lingering for one or more users. If enabled for
a specific user, a user manager is spawned for the user at boot and
kept around after logouts. This allows users who are not logged in
to run long-running services. Takes one or more user names or
numeric UIDs as argument. If no argument is specified,
enables/disables lingering for the user of the session of the
caller.
Вы можете создать службу пользователя в /etc/systemd/user, которая будет выглядеть (адаптация вашей предыдущей службы):
[Unit]
Description=Start TigerVNC Server at startup
After=syslog.target network.target
[Service]
Type=forking
PAMName=login
PIDFile=%h/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -depth 24 -geometry 1920x1080 -nolisten tcp -localhost
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=default.target
Используйте спецификатор %h для домашнего каталога пользователя. Я опустил поле User=, что не имеет смысла в пользовательских сеансах. Также обратите внимание на изменение WantedBy в [Install] из multi-user.target (которое не существует в пользовательских сеансах) на default.target.
Пользователи могут затем управлять этой услугой с помощью команд systemctl --user. (Обратите внимание, что вам может потребоваться перезапустить после включения linger, если этот пользователь еще не вошел в систему, так что для них запускается пользовательский сеанс.)