Если бы не сегодняшнее горе, то я бы не написал этот блог пост. Проблема возникла в том, что после установки очередной порции обновлений, и, кажется, пакета linux-image-3.5.0.18 что-то там, я сломал свой линукс до неузнаваемости. Оказалось, что пропали драйвера от пакета nvidia-current, и в общем всё нахрен сломалось. Побаловавшись с тем, что вроде бы работало, я сломал свои иксы напрочь и даже чудом лишился файла xorg.conf.
Потерев все ppa, удалив все где упоминались слова типа nvidia и bumblebee, я вернул систему в божеский вид и запустил драйвера nouveau. Отлично, полёт нормальный, но мне захотелось вернуть свою CUDA назад. Что я для этого сделал? С ходу не отвечу, потому что подбирал много параметров, но я решился на установку сырых пакетов из ppa:xorg-edgers/ppa. Кстати, советую поставить заголовки нового ядра: обычные и generic. Думаю, пригодятся :)
Когда bumblebee установился, я понял, что моя Intel карта перестала работать, выдавая вот такую ошибку:
Единственная внятная статья по этому поводу мне не помогла. Но я решил на неё забить, потому что я хотел вернуть Optimus назад.
Проект bumblebee не заработал, потому что при запуске любого приложения выдавалась ошибка с "якобы" вот таким решением. Оказалось, что вроде бы драйвер nvidia не может быть найден. Если помните, то nvidia-current решило мне похожую проблему ранее. Но опять таки я не загружал нужный мне модуль, потому что горе-погроммисты переименовали его. И теперь, правильнее было бы подправить /etc/bumblebee/bumblebee.conf вот так:
Driver=nvidia
...
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia_current
Module=nvidia
...
Руки бы им за подчёркивание оторвать. На всякий случай, я также добавил nvidia модуль в /etc/modules:
nouveau # не знаю, но в блеклист я этот модуль не стал добавлять nvidia_current
Ну и немного для истории, вот моя видео карта:
$ optirun ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GT 540M"
CUDA Driver Version / Runtime Version 5.0 / 5.0
CUDA Capability Major/Minor version number: 2.1
Total amount of global memory: 2048 MBytes (2147155968 bytes)
( 2) Multiprocessors x ( 48) CUDA Cores/MP: 96 CUDA Cores
GPU Clock rate: 1344 MHz (1.34 GHz)
Memory Clock rate: 900 Mhz
Memory Bus Width: 128-bit
L2 Cache Size: 131072 bytes
Max Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)
Max Layered Texture Size (dim) x layers 1D=(16384) x 2048, 2D=(16384,16384) x 2048
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per multiprocessor: 1536
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 1 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 5.0, CUDA Runtime Version = 5.0, NumDevs = 1, Device0 = GeForce GT 540M
$ optirun ./bandwidthTest
[CUDA Bandwidth Test] - Starting...
Running on...
Device 0: GeForce GT 540M
Quick Mode
Host to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 6269.0
Device to Host Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 6277.8
Device to Device Bandwidth, 1 Device(s)
PINNED Memory Transfers
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 23688.5
Вот пришла пора описать как я ставил саму CUDA, и какие сложности попались мне на пути. Версия, которую мне захотелось поставить -
Так получилось, что во время написания этого поста, я являюсь счастливым обладателем ноутбука фирмы ASUS, модель X7BS. Если захочется погуглить, то в нем Intel Core i7 - 2630QM, 2.0GHz, что даёт мне 8 гипертрединговых ядер, ну и два жёстких по 500 Gb. Однако не это в нём примечательное, а то, что он является обладателем технологии NVIDIA Optimus. Другими словами, его видеокарта GeForce GT 540M (2 Gb) умеет распоряжаться интегрированной Intel'овской картой.