Jump to content
Compvision.ru
Sign in to follow this  
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

Share this post


Link to post
Share on other sites
Поделитесь оценками в производительности =) на вашем 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]

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 операций/с

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×