|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.11.2008, 19:55 | #1 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Nvidia CUDA(Linux)
Часть 1. Начало работы и установка драйверов.
Вот выдалась свободная минутка и я решил описать как установить CUDA на ваш компьютер. Требования: видеокарта Nvidia 8400(не под ноут) и выше. Я советую установить Ubuntu 8.04. Чтобы не возникло неожиданных осложнений я советую установить ее из под Windows как обычную программу. Установка соединения с интернет. В справке этот вопрос подробно расписан, отпишусь только для dsl. Запустите терминал(Приложения->стандартные->терминал) Пропишите: sudo pppoeconf Везде отвечайте да и заполняйте необходимые поля(всего 2 поля имя и пароль соединения) Запуск соединения: sudo pon dsl-provider Остановка: sudo poff dsl-provider Установка драйверов для видеокарты. Скачайте драйвер с оф сайта http://www.nvidia.com/object/cuda_get.html#linux Перед установкой драйверов потребуется доустановить дополнительные пакеты (если они отсутствую в системе): исходники ядра, утилиты make, bunutils, компилятор gcc, libc6-dev Запустите терминал(Приложения->стандартные->терминал) Пропишите sudo -s -H для получения прав администратора. Далее пропишите apt-get install linux-headers-`uname -r` binutils pkg-config build-essential xserver-xorg-dev чтобы установить необходимые пакеты. Далее чтобы продолжить установку драйвера нужно остановить X-Server. Перед остановкой я вам советую переименовать имя драйвера на 1.run например, чтобы было проще. Останавливаем X-Server /etc/init.d/gdm stop Переключитесь в текстовую консоль Ctrl+Alt+F1 и залогиньтесь. Запустите инсталлятор драйверов (из каталога куда вы их сохранили) от имени root. Если драйвер лежит на рабочем столе, то прописать вам нужно следующее: sudo -s -H sh ~/desktop/1.run Инсталлятор ругнётся на отсутствие precompiled headers для вашего ядра и предложит скачать их с сервера nVidia. Откажитесь. Он предложит скомпилировать их сам - соглашайтесь. Далее соглашайтесь со всеми требованиями Включите X-Server /etc/init.d/gdm start Теперь нужно немного подправить один файл: sudo gedit /etc/default/linux-restricted-modules-common там нужно исправить строчку на вот такую DISABLED_MODULES="nvidia nvidia_legacy nvidia_new" Сохраните и перезагрузите компьютер. Если же X-сервер не запустился, то просто восстановите конфигурационный файл: sudo cp /etc/X11/xorg.conf.backup /etc/X11/xorg.conf и ищите ошибку в своих действиях или спрашивайте в этой теме. Не пугайтесь, дальше будет легче. Последний раз редактировалось Kostia; 13.11.2008 в 16:50. |
13.11.2008, 16:48 | #2 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Часть 2.Установка и настройка Nvidia Toolkit и SDK.
Тут нужно немного попотеть и выкачать аж 60 mb из интернета. http://www.nvidia.com/object/cuda_get.html#linux gcc-4.1. Для Nvidia Toolkit нужна именно версия 4.1, если стоит другая можно, не удаляя других версий, дополнительно поставить gcc-4.1. Чтобы установить gcc 4.1 научимся пользоваться менеджером пакетов Synaptic(Система->Администрирование->Synaptic) Нажмите на кнопку поиск и наберите gcc 4.1, из предложеных вариантов отметьте gcc 4.1 и нажмите применить. Возможно может протребоваться установить пакет build-essential. Установите его так же как и gcc. Теперь нужно установить по умолчанию gcc 4.1. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 413 --slave /usr/bin/g++ g++ /usr/bin/g++-4.1 --slave /usr/bin/cpp cpp /usr/bin/cpp-4.1 sudo update-alternatives --config gcc Чтобы проверить введите gcc -v. Nvidia Toolkit. Пропишите в терминале sudo sh path/NVIDIA_CUDA_Toolkit_2.0_Ubuntu7_x86 _64.run Установите в каталог по умолчанию. Теперь нужно подправить файл /etc/ld.so.conf sudo gedit /etc/ld.so.conf Добавте # NVIDIA CUDA v2.0 support /usr/cuda/lib и вызовите ldconfig sudo ldconfig Устанавливаем Nvidia CUDA SDK в каталог по умолчанию. Теперь переходм в папку ~/NVIDIA_CUDA_SDK/ cd ~/NVIDIA_CUDA_SDK Чтобы откомпилировать пример в режиме эмуляции введите sudo make emu=1 Чтобы откомпилировать примеры в режиме использования видеокарты нужно ввести sudo make И наслаждаемся мощью ваших "ядер" sudo ./bin/linux/release/nbody |
17.11.2008, 14:03 | #3 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Дополнение к предыдущей части.
"Компиляция остальных проектов в SDK" Как вы заметили не все примеры были откомпилированны. Для компиляции остальных проектов нужно пройти в каталог необходимого проекта. cd ~/NVIDIA_CUDA_SDK/projects/simpleTexture3D sudo make Откомпилированный проект будет лежать в том же каталоге где и все остальные проекты. (bin/linux/release) |
17.11.2008, 15:03 | #4 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Часть 3. Подготовка почвы.
Для тех кто уже знаком с gcc, эта статья будет малоинтересна т.к. она расчитана на обсолютно не знакомых с gcc. Начнем gcc - это абривиатура GNU Compiler Collection. Он включает в себя много разных языков программировагия gcc(C), g++(C++), gpc(Pascal)... Нас интересует gcc т.к. CUDA поддерживает только этот язык программирования. Hello, world! Да, да, именно с этого мы и начнем. Создайте новый пустой файл на рабочем столе и обзовите его 1.c. Откройте его с помощью текстового редактора. Код:
cd ~/desktop gcc 1.c ./a.out OpenGL(glut) Нужно сначала установить пакет glut. Найдите пакет в Synaptic.(glut/freeglut) Создайте на рабочем столе папку ogl и новый пустой файл в этой папке, назовите его ogl.c. Код:
cd ~/desktop/ogl gcc ogl.c -lglut Это простой пример инициализации OpenGL. Теперь можно создать что-то сложнее нежели просто инициализация. Код:
P.S. продолжение следует Последний раз редактировалось Kostia; 18.11.2008 в 11:10. |
20.11.2008, 12:30 | #5 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Как я обещал, продолжение следует.
Теперь я хочу рассказать как обрабатывать события клавиатуры и мыши. Код:
Key - нажатая кнопка x,y - черт его знает зачем они нужны Функция идентична OnKeyDown в Delphi. Рассмотрим функцию mouse. У нее 4 параметра. Button - 0-левая кнопка, 1-средняя кнопка, 2-правая кнопка state - 0-Down, 1-Up x,y - координаты курсора Далее я хочу обратить внимание на генерацию случайных чисел. srand( (unsigned)time( NULL ) ); = Randomize rand()%100 = Random(100) glutIdleFunc(Display); - установка глобального вызова функции.(Функция вызывается каждый кадр) glutIdleFunc(0); - stop glutReshapeFunc(Reshape); - эта функция вызывается при изменении размеров окна.(у нас тут устанавливается матрица проекции для работы с экранными координатами) glutSwapBuffers(); - переключение буферов для GLUT_DOUBLE. Информацию об остальных фукция OpenGL вы можете найти в интернете. Последний раз редактировалось Kostia; 20.11.2008 в 14:25. |
20.11.2008, 14:21 | #6 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Загрузка картинок из файлов.
Код:
Примечание, чтобы компилировать проект нужно ввести g++ name -lglut -lfreeimage. Немного прояснимся, ведь CUDA понимает только язык C, а тут C++. Все очень просто, кусочек кода который будет исполняться на видеокарте должен быть написан на C, а остальная программа которая будет ваполняться на процессоре может быть написана как на C так и на C++. С кодом для загрузки картинки разобраться очень легко. 1. Определили формат загружаемого изображения 2. Загрузили изображение 3. Переделали под 32 бита 4. Выделили память под текстуру 5. Скопировали содержимое image в texture |
03.12.2008, 04:49 | #7 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Создание собственного проекта на CUDA
Осталось научиться писать собственные программы на CUDA.
/home/kostia/NVIDIA_CUDA_SDK/doc/CUDA_SDK_release_notes_linux.txt Код:
От автора: Перевел как смог, уж не обессудьте. Способ описанный выше мне котегорически не понравился и я его сразу же забы и начал поиски иформыции по компиляции проека в другом месте и нашел ее здесь: /usr/local/cuda/doc Приблизительно компиляция проекта выглядит так: Режим видеокарты: /usr/local/cuda/bin/nvcc ${1}1.cu -o gravitation_pole -O3 -I/usr/local/cuda/inc -I ~/NVIDIA_CUDA_SDK/common/inc -lcudart -lcuda -lglut -lfreeimage --host-compilation C++ Режим эмуляции: /usr/local/cuda/bin/nvcc ${1}1.cu -o gravitation_pole -O3 -I/usr/local/cuda/inc -I ~/NVIDIA_CUDA_SDK/common/inc -lcudart -lcuda -lglut -lfreeimage -deviceemu 1-Путь к помпилятору 2-1.cu-имя файла который нужно компилировать(Может быть любым исходя из имени вашего проекта) 3-gravitation_pole-имя готовой программы(Может быть любым) 4-I-место где нужно искать библиотеки 5-Режим компиляции Более подробную информацию можно найти в nvcc_2.0.pdf. Последний раз редактировалось Kostia; 03.12.2008 в 04:52. |
03.12.2008, 05:37 | #8 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Первыя программа на CUDA
Первыя программа на CUDA.
Код:
PS. начинаю со строки 39 Для начала нужно выделить память в видеокарте по массивы, для этого есть функция cudaMalloc. Далее копируем содержимое массивов, которые нужно сложить, в видеопамять. cudaMemcpy. Флаги: cudaMemcpyDeviceToHost - из видео в оперативную память cudaMemcpyDeviceToDevice - из одной видеокарты в другую cudaMemcpyHostToDevice - из оперативной в видеопямять Далее идет вызов функции которая выполняется на видеокарте(__global__). функция <<кол-во блоков потоков, кол-во потоков в блоке>> (параметры) Далее копируем из видео в операвную память и вывод результата. Более подробную информацию смотрите в NVIDIA_CUDA_Programming_Guide_2.0.p df Последний раз редактировалось Kostia; 03.12.2008 в 05:40. |
03.12.2008, 05:54 | #9 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Дополнительно
Если у вас имеется несколько видеокарт, то вы можете выбрать нужную вам видеокрту воспользовавшись функцией cudaSetDevice.
CUDA_SAFE_CALL( cudaSetDevice( 0 ) );// select GPU ( 0 - first ) Блоки потоков и потоки в видеокарте располагаются не только по оси x но и по оси y. Для того чтобы задать значения по x и y можно воспользовать спец типом dim3. Код:
Т.к. потоки и блоки потоков в видеокарте совершенно ни как не связаны между собой, то вам может потребоваться синхронизация. Допустим вы считаете факториал, на один поток приходится больше вычислений чем на другой и может произойти не соответсвие. Для синхронизации предусмотрена функция __syncthreads();. Она ждет пока все потки закончат свои вычисления. Используйте проверки очень осторожно, иначе может получиться, что один поток выполняется, а остольные ждут его завершения. Вот в общем и все, дальше сами. Удачи! Всегда ваш, Семёнов Константин. Последний раз редактировалось Kostia; 03.12.2008 в 11:26. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужен человек, который может написать программку для работы на GPU ATI и NVidia | legonxt | Фриланс | 1 | 10.11.2008 09:58 |
Проблема с драйверами NVidia | DM_bite | Компьютерное железо | 2 | 04.11.2008 22:33 |
Linux на VMware....... WinXP <-> Linux | DMUTPUU | Операционные системы общие вопросы | 1 | 24.09.2008 12:03 |
Dрайвера NVIDIA | Minimus | Помощь студентам | 7 | 11.08.2008 22:07 |
Linux | MAcK | Операционные системы общие вопросы | 3 | 26.10.2007 11:03 |