Если бы не сегодняшнее горе, то я бы не написал этот блог пост. Проблема возникла в том, что после установки очередной порции обновлений, и, кажется, пакета 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