Как я могу заставить nVidia CUDA или OpenCL работать на ноутбуке с дискретной картой nVidia / интегрированной графикой Intel?

28

Предыстория: я 3D-художник (в качестве хобби) и недавно начал использовать Ubuntu 12.04 LTS в качестве двойной загрузки с Windows 7. Он работает на моем довольно новом 64-разрядном ноутбуке Toshiba с графическим процессором nVidia GeForce GT 540M ( видеокарта). Однако он также имеет интегрированную графику Intel (которую, я подозреваю, использует Ubuntu).

Поэтому, когда я рендерил свои 3D-сцены в изображения в Windows, я могу выбирать между использованием моего ЦП или моего графического процессора nVidia (быстрее). Из 3D-приложения я могу настроить графический процессор на использование CUDA или OpenCL. В Ubuntu нет опции графического процессора.

Проведя (слишком много?) Исследование проблем с Linux и технологией nVidia Optimus, я стал немного более образованным, но гораздо более запутанным.

Меня не волнует технология Optimus, так как срок службы батареи для меня не проблема.

Вот мой вопрос: что я могу сделать, чтобы иметь возможность использовать программы, использующие CUDA (например, Blender), на моем GPU nVidia в Ubuntu? Будут ли мне нужны драйверы nVidia? (Я слышал, что они плохо работают с настройками Optimus в Linux.) Есть ли хотя бы способ использовать OpenCL на моем GPU в Ubuntu?

Питер Кассетта
источник

Ответы:

27

Я только что провел некоторые эксперименты и могу подтвердить заявления Эрика Эпплмана о том, что Шмель не нужен для CUDA. (подробнее о Шмеле : поддерживается ли Ubuntu NVIDIA GeForce с технологией Optimus? )

Тем не менее, когда вам нужно , чтобы показать графические примеры с использованием OpenGL, вы делаете что - то нужно , как Шмель для систем Optimus, в противном случае вы либо не видите что - либо на экране или получить сообщение об ошибке:

ERROR: Support for necessary OpenGL extensions missing.

При запуске программы CUDA вам необходимо установить инструментарий CUDA и драйвер nvidia. Если вы собираетесь собирать программы, вам также понадобится SDK. Установщики могут быть найдены на http://developer.nvidia.com/cuda-downloads , пожалуйста, прочитайте приведенные ниже инструкции, прежде чем ставить свой ноутбук Optimus.

Установка CUDA

Водитель

Я рекомендую установить драйвер nvidia из диспетчера пакетов Ubuntu. Если вы устанавливаете Bumblebee, вам не нужно беспокоиться о драйвере. В противном случае после установки отключите библиотеки nvidia, как описано на /ubuntu//a/107746/6969 . Если вы этого не сделаете, вы потеряете 3D-ускорение и, возможно, застрянете в низком разрешении.

Инструментарий

В основном вам нужно скачать установщик, сделать его исполняемым и запустить его. - Скачать установщик. На момент написания статьи 4.2.9 является самым последним драйвером. Поскольку у меня 64-битная ОС, я использую 64-битный пакет 11.04 Ubuntu (хотя я работаю 12.04) - сделайте его исполняемым и разрешите установку для /usr/local/cuda:

chmod +x cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
sudo ./cudatoolkit_4.2.9_linux_64_ubuntu11.04.run

Когда появляется сообщение об установке, которое спрашивает вас, где установить CUDA, просто нажмите Enter, чтобы принять значение по умолчанию /usr/local/cuda:

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

После установки будет напечатано несколько сообщений, предлагающих поместить каталог библиотеки cuda в путь поиска вашей библиотеки:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete

Вы можете пропустить этот шаг, если хотите, но тогда вам нужно будет установить LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHпозже при запуске программы.

SDK

Если вы хотите иметь возможность компилировать приложения CUDA, вы можете установить SDK аналогично тому, как описано выше. Скачайте, сделайте его исполняемым и запустите его (не как root, например, без sudo!). При компиляции его частей мне пришлось внести некоторые изменения в NVIDIA_GPU_Computing_SDK/C/common/common.mk:

  • после строки 189 OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmuдобавить:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • после того, как о линии 271, своп ${RENDERCHECKGLLIB}с ${OPENGLLIB}таким образом, что она выглядит следующим образом :

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • еще несколько (5) строк, сделайте то же самое, но -lcudaтоже удалите .
  • еще несколько (7) строк, сделайте то же самое, что и в строке 271.

Использование CUDA

Для работы CUDA не требуется X-сервер, управляемый NVIDIA. В этом случае вы можете запустить программу случайного тестирования, например:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

Если вы не добавили CUDA в путь к своей библиотеке, вам потребуется:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

(вы можете убрать из него 32-битные пути, если ваша программа 64-битная).

Если программе CUDA действительно есть, что отобразить с помощью OpenGL, вы должны использовать optirun:

 optirun blender

Или, если вы не добавили CUDA в путь по умолчанию:

LD_LIBRARY_PATH = / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH optirun блендер

Lekensteyn
источник
Спасибо, я награжу вас за вознаграждение (но я приму ответ от моего сообщества в вики).
Питер Кассетта
Кроме того, 100 повторений и высказывание не совсем точно выражают, насколько я ценю вашу работу над проектом «Шмель». Вы и ваши коллеги сделали это отличным программным обеспечением. Так что спасибо тебе. :)
Питер Кассетта
2
Не за что, теперь я надеюсь, что время наградит нас окончательным решением в виде PRIME с обновленным стеком xorg + mesa (или Wayland?) :)
Lekensteyn
1
PRIME , Xorg - это сервер отображения, отвечающий за отображение графики, Mesa - для OpenGL, Wayland - возможный преемник Xorg.
Лекенштейн
1
Следует отметить, что для CUDA требуется минимальный драйвер NVIDIA. Например, CUDA 6.5 требуется как минимум NVIDIA 340.21.
Яманеко
15

Вот полный ответ (на основе ответов Алекса Фалаппа и Лекенштейна ):

Действительно возможно получить графические процессоры nVidia Optimus для запуска CUDA в Ubuntu.

Шмель не нужен для CUDA. (подробнее о Шмеле : поддерживается ли Ubuntu NVIDIA GeForce с технологией Optimus? )

Тем не менее, когда вам нужно , чтобы показать графические примеры с использованием OpenGL, вы делаете что - то нужно , как Шмель для систем Optimus, в противном случае вы либо не видите что - либо на экране или получить сообщение об ошибке:

ERROR: Support for necessary OpenGL extensions missing. 

Если вам нужно использовать графически насыщенную программу, такую ​​как Blender, Bumblebee в настоящее время является хорошим способом.

Перейдите к Установке CUDA, если вы не хотите устанавливать Bumblebee (т.е. если вам не нужен OpenGL).
В противном случае читайте дальше.

Установка шмеля

Следуйте инструкциям в разделе Насколько хорошо работают ноутбуки с Nvidia Optimus?

В настоящее время они обновляются разработчиком Bumblebee.

После установки Bumblebee и перезагрузки вы сможете выбрать графическую карту, которая будет использоваться при запуске программ с помощью optirunпрограммы.
Например:

optirun blender

Чтобы быстро проверить, все ли работает правильно, используйте:

optirun glxspheres

Вы увидите программу с красочными вращающимися сферами, если все работает правильно.

Убедитесь, что строка поставщика GL в терминале содержит слово nvidia .
Если вы запускаете только glxspheres, вы увидите, что строка поставщика содержит вместо карты Intel.

При запуске программы CUDA вам необходимо установить инструментарий CUDA и драйвер nvidia. Если вы собираетесь собирать программы, вам также понадобится SDK. Установщики могут быть найдены на http://developer.nvidia.com/cuda-downloads , пожалуйста, прочитайте приведенные ниже инструкции, прежде чем ставить свой ноутбук Optimus.

Установка CUDA

Водитель

Я рекомендую установить драйвер nvidia из диспетчера пакетов Ubuntu. Если вы устанавливаете Bumblebee, вам не нужно беспокоиться о драйвере. В противном случае после установки отключите библиотеки nvidia, как описано на /ubuntu//a/107746/6969 . Если вы этого не сделаете, вы потеряете 3D-ускорение и, возможно, застрянете в низком разрешении.

Инструментарий

В основном вам нужно скачать установщик, сделать его исполняемым и запустить его. - Скачать установщик. По состоянию на 9 января 2013 года 5.0.35 является самым последним драйвером. Поскольку у меня 64-битная ОС, я использую 64-битный 11.10 пакет Ubuntu (хотя я работаю 12.10) - сделайте его исполняемым и разрешите установку для /usr/local/cuda:

chmod +x cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run
sudo ./cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run

Когда появляется сообщение об установке, которое спрашивает вас, где установить CUDA, просто нажмите Enter, чтобы принять значение по умолчанию /usr/local/cuda:

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

После установки будет напечатано несколько сообщений, предлагающих поместить каталог библиотеки cuda в путь поиска вашей библиотеки:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete

Вы можете пропустить этот шаг, если хотите, но тогда вам придется установить LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHпозже при запуске программы.

SDK

Если вы хотите иметь возможность компилировать приложения CUDA, вы можете установить SDK аналогично тому, как описано выше. Скачайте, сделайте его исполняемым и запустите его (не как root, например, без sudo!).

Использование CUDA

Для работы CUDA не требуется X-сервер, управляемый NVIDIA. В этом случае вы можете запустить программу случайного тестирования, например:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

Если вы не добавили CUDA в путь к своей библиотеке, вам потребуется:

LD_LIBRARY_PATH = / usr / lib / nvidia-current: / usr / lib32 / nvidia-current: / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

(вы можете убрать из него 32-битные пути, если ваша программа 64-битная).

Если программе CUDA действительно есть, что отобразить с помощью OpenGL, вы должны использовать optirun:

 optirun blender

Или, если вы не добавили CUDA в путь по умолчанию:

LD_LIBRARY_PATH = / usr / local / cuda / lib64: / usr / local / cuda / lib: $ LD_LIBRARY_PATH optirun блендер

Установка сборки Blender

(С предварительно скомпилированными ядрами CUDA)

При запуске optirun blenderвы можете получить сообщение от Blender о том, что сборка ядра CUDA завершилась неудачно, и сообщение в терминале, подобное следующему:

Compiling CUDA kernel ...
nvcc warning : Option '--opencc-options (-Xopencc)' is obsolete and ignored, when
targeting compute_20, sm_20, or higher
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
CUDA kernel compilation failed, see console for details.

Если вы хотите использовать функцию визуализации в Blender, вам может понадобиться сборка Blender с предварительно скомпилированными ядрами CUDA. Сборки с Blender.org имеют предварительно скомпилированные ядра CUDA; Сборки ppa: cheleb / blender-svn ( больше информации по этому вопросу ) - нет.

Чтобы установить официальную сборку Blender, просто следуйте инструкциям, изложенным в этом ответе .

Если вы установили Blender на /usr/lib/blender, вы сможете запустить Blender из терминала и использовать рендеринг с помощью графического процессора с:

 optirun '/usr/lib/blender/blender'
Питер Кассетта
источник
Последние версии Bumblebee (устанавливаемые из шмеля / стабильного PPA) не нуждаются в этой usermodкоманде. Я буду держать инструкции по установке на сайте askubuntu.com/a/36936/6969 обновленными, поэтому, пожалуйста, вместо копирования этих инструкций установите ссылку на этот пост.
Лекенштейн
@Lekensteyn Хорошо, готово!
Питер Кассетта
2

Поддержка гибридной графики (обычно интегрированной графики Intel и дискретной графики Nvidia) в Linux в настоящее время немного проблематична. Что-то медленно движется в поле X-сервера, но не задерживайте дыхание.

Как вы уже догадались, Шмель в настоящее время - хороший путь.

Недавно я купил ноутбук Asus N55 с графикой Intel / Nvidia, и мне удалось заставить рендер Blender Cycles использовать CUDA.

Когда я установил Ubuntu 12.04, он использовал встроенную графику по умолчанию через графический драйвер Intel. Графический драйвер noveau не должен быть установлен.

Затем я открыл терминал и сделал:

sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
sudo apt-get install bumblebee bumblebee-nvidia

После этого я сделал (как рекомендовано инструкцией по установке):

sudo usermod -a -G bumblebee $USER

Затем я перезагрузился.

Чтобы выбрать драйвер, который будет использоваться при запуске программ, используйте программу optirun, например:

optirun blender

Чтобы проверить, все ли работает правильно, используйте:

optirun glxspheres

И убедитесь, что строка поставщика GL содержит слово Nvidia. Если вы запустите вместо:

glxspheres

Строка поставщика должна содержать слово Intel

Алекс Фалаппа
источник
Нужно ли устанавливать драйверы nVidia перед установкой Bumblebee? Наверное, нет, исходя из того, как вы сформулировали свой ответ. Также приятно видеть, что кто-то может использовать CUDA в Ubuntu с картой Optimus! Я проголосую, как только получу 15 повторений. :)
Питер Кассетта
Хорошо, я установил Шмель. Я использовал, optirunи я могу убедиться, что Blender использовал мой графический процессор nVidia для визуализации трехмерного видового экрана. Однако в раскрывающемся списке «Настройки пользователя Blender» отсутствует опция «GPU». Это только списки «CPU». Смотрите этот скриншот . Нужно ли устанавливать дополнительные драйверы для использования CUDA?
Питер Кассетта
1

Я считаю , что для выполнения всех примеров CUDA, с помощью Bumblebee, вы должны установить драйвера 295.40 из здесь и во время установки выбрать , чтобы не переопределитьconfig x11 .

Затем вы должны использовать один и тот же драйвер для компиляции примеров и запуска программы.

ольмер
источник