Перейти к содержимому
Compvision.ru
Smorodov

Базовый проект OpenCV + CUDA

Recommended Posts

Подготовительные операции (предполагается, что VC2008 уже установлен).

1) Установить комплект CUDA.

2) Установить cudavswizard2.0 (лежит здесь: http://sourceforge.net/projects/cudavswizard/)

3) Установть OpenCV (если еще не установлен)

4) Запускаем Visual Studio 2008 и создаем новый проект типа CUDAWinApp. (File->New->New project->слева выбираем CUDA-> CUDAWinApp)

5) Alt+F7 вызывается окошко свойств проекта. Выбрать конфигурацию Release. (Все конфигурации лучше настраивать по отдельности, а не выбирать AllConfigurations)

6) В этом окошке слева выбрать Linker->Input .

7) В строке с названием Additional Dependencies должно быть cudart.lib cutil32.lib cxcore.lib cv.lib highgui.lib, чего нет добавить.

8) Открыть Linker->General,список Additional Library Directories должен содержать:

$(CUDA_LIB_PATH)

$(NVSDKCUDA_ROOT)\common\lib

C:\Program Files\OpenCV\lib

9) Открываем CUDA ->General, список Additional Include Directories должен содержать:

$(CUDA_INC_PATH)

$(NVSDKCUDA_ROOT)\common\inc

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\otherlibs\highgui

10) Что за фигня, в .cu файле нет подсветки!!! (однако должно компилироваться)

11) Идем в “C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\”.

12) Создаем (если не существует) файл “usertype.dat”.

13) Открываем “ Program files (или Program Data в vista)\NVIDIA Corporation\NVIDIA CUDA SDK\doc\syntax_highlighting\visual_studio_8\usertype.dat” и копируем его содержимое в недавно созданный файл.

14) Сохраняем файл.

15) Открываем IDE и идем Tools -> Options.

16) Открываем Text Editor -> File Extension tab, задаем расширение “cu” как новый тип файлов.

17) Перезапускаем IDE, наслаждаемся :).

ЗЫ: Если у кого то стоит Касперский, то для успешной компиляции его лучше временно отключить, хотя откомпилированные программы работают нормально и с включенной защитой.

Файл с проектом (перед открытием выполнить пункты 1,2,3, 11-17 по желанию): CUDAWinApp2.rar

Проект просто находит границы.

Я специально в проекте так расточительно считаю, дабы показать на что можно расчитывать при использовании графического акселератора. Причем, полученное изображение можно обрабатывать дальше средствами OpenCV.

CUDA_OpenCV.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделитесь оценками в производительности =) на вашем GPU, CPU?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Поделитесь оценками в производительности =) на вашем GPU, CPU?

Время обработки одного кадра:

GPU Geforce8200 (встроенный) 0.05-0.06 ms

CPU Athlon x 2 5000 примерно 10 ms

Померять можно так:

   //До кода ставим:

// Создаем и запускаем таймер
unsigned int timer = 0;
cutilCheckError(cutCreateTimer(&timer));
cutilCheckError(cutStartTimer(timer));

//---------------------
// Измеряемый код
//---------------------

// После кода ставим:

// Останавливаем и освобождаем таймер
cutilCheckError(cutStopTimer(timer));
printf("Processing time: %f (ms) \n", cutGetTimerValue(timer));
cutilCheckError(cutDeleteTimer(timer));[/code]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а где можно посмотреть еще примеры?

есть смысл ковырять какие то сторонние библиотеки типа GpuCV или из них все все равно плавно перетекает в opencv?

нашел небольшую статью на русском про сравнение скоростей.

http://agora.guru.ru/hpc-h/files/Using_GPU_for_computer_vision_in_OpenCV_library.pdf

там в конце еще ссылки на библиотеки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот здесь можно скачать unit тест на базе Qt, который сравнивает производительность вычислений на CPU и GPU для некоторых функций OpenCV. У меня почему то CPU работает гораздо быстрее чем GPU. Мне всегда казалось, что видеокарта должна матрицы быстрее считать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

dasg. Мне бы ваши проблемы.

Давно интересует тест производительности OpenCV и GPU.

Cuda не пользуюсь так как карта AMD.

Но у меня на GPU Собель раз в 10 быстрее считался, правда эксперимент был не совсем чистым.

По поводу скорости. Зависит от процессора.

Ну вот считай CPU, у меня Core 2 Due T7500 2 ядра. Каждое ядро может обрабатывать одновременно 2 команды SSE. Каждая команда SSE имеет 4 блока данных(128/32; 32 бита берём float) а если брать не флоат, а слова 128/16=8 блоков данных.

Частота процессора 2.4 ГГц

Итого:2*2*4*2.4=38,4 операций/с

Видео карта, У меня ATI HD3470. 40 ядер каждое ядро содержит 5 алу. Но из этих 5 алу только четыре выполняют основные операции, а пятый считает сложные операции такие как Sin, sqrt. Каждое АЛУ работает над вектором из 4 чисел. Частота 680 МГц

Итого=40*4*4*0.680=435,2 операций/с

Видео карта Geforce 9600M GS. Число ядер 32 частота 1035 МГц каждое ядро способно выполнять кучу операций параллельно, примерно столько же сколько и ATI .

Итого 32*4*4*1.035=529,92 операций/с

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня на Geforce 9600M GS OpenCV видит только 4 ядра. Тоже как-то странно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не странно, а так и есть. Но! не "ядра", а "мультипроцессора", каждый из которых состоит из восьми простых процессоров. Подробности смотри в "NVIDIA CUDA Programming Guide", там есть таблица.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×