Как создать dll с CUDA на VS2010

652 views
Skip to first unread message

Алексей Вахтин

unread,
Mar 13, 2013, 4:53:45 AM3/13/13
to cudac...@googlegroups.com
Здравствуйте.


Никак не получается создать dllку. Имеется модуль *.cu, в приложении exe все отлажено, но создать dllку с этим модулем не получается. Как я делал:
1. Создал проект dll С++
2. В проекте "Настройки построения" включил CUDA 5.0
3. Добавил файл *.cu, и в свойствах "тип элемента" указал CUDA C/C++

Но тут же появляются ошибки, например, "Идентификатор "threadIdx" не определен" - это, видимо, работает Nsight, а при попытке построить решение появляются ошибки:

Ошибка 1 error C1083: ═х єфрхЄё  юЄъЁ√Є№ Їрщы шёЄюўэшъ: F:/Alexsey/?????/Visual C#/CUDA/Wavlet/CUFWT/CUFWT.cu: Invalid argument F:\Alexsey\Архив\Visual C#\CUDA\Wavlet\CUFWT\c1xx CUFWT

Ошибка 2 error MSB3721: выход из команды ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin"  -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include"  -G   --keep-dir "Debug" -maxrregcount=0  --machine 32 --compile  -g   -DWIN32 -D_WINDOWS -D_DEBUG -D_USRDLL -D_WINDLL -D_UNICODE -DUNICODE -D_AFXDLL -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd  " -o "Debug\CUFWT.cu.obj" "F:\Alexsey\Архив\Visual C#\CUDA\Wavlet\CUFWT\CUFWT.cu"" с кодом "2". C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.targets 592 10 CUFWT


Что я делаю не так? Как правильно создавать dllки CUDA?




С уважением, Вахтин А. А.

Алексей Вахтин

unread,
Mar 13, 2013, 4:56:15 PM3/13/13
to CUDA.CS.MSU.SU
Никак не получается создать dllку. Имеется модуль *.cu, в приложении exe все отлажено, но создать dllку с этим модулем не получается. Как я делал:
1. Создал проект dll С++
2. В проекте "Настройки построения" включил CUDA 5.0
3. Добавил файл *.cu, и в свойствах "тип элемента" указал CUDA C/C++

Нашел причину. Путь до папки проекта содержал символы кириллицы  Поэтому и не компилировалось. Я только после нескольких раздумий обратил внимание, что в первой ошибке есть символы "?????" - а это были символы кириллицы. Но, все равно, пришлось немного повозиться с библиотекой. раньше был отдельно модуль *.cu и заголовочный файл *.h который содержал заголовки импортируемых функций. И этот заголовочный файл прикреплялся к *.cpp библиотеки. Сейчас так не получилось - не видит функции приложение C#. Только после того как в модуле cu объявил функции как импортируемые, все заработало:

extern "C" __declspec(dllexport)  <тип> <название функции>(<параметры>)
{
     <тело функции>
}

Алексей Тюрин

unread,
May 28, 2017, 1:00:26 PM5/28/17
to CUDA.CS.MSU.SU
У Вас получилось? Можно взглянуть на проект? Мне нужно создать dll с cuda который я мог бы использовать в C# в дальнейшем

среда, 13 марта 2013 г., 23:56:15 UTC+3 пользователь Алексей Вахтин написал:

Алексей Вахтин

unread,
May 28, 2017, 4:32:35 PM5/28/17
to CUDA.CS.MSU.SU
Тогда еще была другая CUDA и VS. Вот я набросал проект для CUDA 8.0 и VS 2015. Смысл в следующем - нужно создать проект для CUDA. Он создается как exe для консольного приложения,  поэтому его нужно сделать dll. Для этого в окне свойств проекта выбираете активную платформу (хотя, можно для обоих сделать - надежнее будет), в опциях "Свойства конфигурации > Общие" выбираете Тип конфигурации - Динамическая библиотека dll. В "Свойства конфигурации > Компоновщик > Система" выбираете подсистема - Windows (/SUBSYSTEM:WINDOWS). Экспортировать функции, еще по аналогии создаваемого VS проекта dll можно добавить dllMain.cpp. Рекомендуется создавать библиотеку под x64. Проект c# тоже должен быть под x64. Если будет AnyCPU, то может не сработать, программа будет писать, что библиотека не найдена. В принципе, можно из примера взять проект куды за основу, так как он уже настроен под dll.

28 мая 2017 г., 16:56 пользователь Алексей Тюрин <leha...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу "CUDA.CS.MSU.SU".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес cudacsmsusu+unsubscribe@googlegroups.com.
Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный адрес cudac...@googlegroups.com.
Чтобы зайти в группу, перейдите по ссылке https://groups.google.com/group/cudacsmsusu.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

cuda_dll_example.7z

Алексей Тюрин

unread,
May 29, 2017, 4:24:15 PM5/29/17
to CUDA.CS.MSU.SU
Большое спасибо! Очень помогли)

воскресенье, 28 мая 2017 г., 23:32:35 UTC+3 пользователь Алексей Вахтин написал:
Тогда еще была другая CUDA и VS. Вот я набросал проект для CUDA 8.0 и VS 2015. Смысл в следующем - нужно создать проект для CUDA. Он создается как exe для консольного приложения,  поэтому его нужно сделать dll. Для этого в окне свойств проекта выбираете активную платформу (хотя, можно для обоих сделать - надежнее будет), в опциях "Свойства конфигурации > Общие" выбираете Тип конфигурации - Динамическая библиотека dll. В "Свойства конфигурации > Компоновщик > Система" выбираете подсистема - Windows (/SUBSYSTEM:WINDOWS). Экспортировать функции, еще по аналогии создаваемого VS проекта dll можно добавить dllMain.cpp. Рекомендуется создавать библиотеку под x64. Проект c# тоже должен быть под x64. Если будет AnyCPU, то может не сработать, программа будет писать, что библиотека не найдена. В принципе, можно из примера взять проект куды за основу, так как он уже настроен под dll.
28 мая 2017 г., 16:56 пользователь Алексей Тюрин <leha...@gmail.com> написал:
У Вас получилось? Можно взглянуть на проект? Мне нужно создать dll с cuda который я мог бы использовать в C# в дальнейшем

среда, 13 марта 2013 г., 23:56:15 UTC+3 пользователь Алексей Вахтин написал:

Никак не получается создать dllку. Имеется модуль *.cu, в приложении exe все отлажено, но создать dllку с этим модулем не получается. Как я делал:
1. Создал проект dll С++
2. В проекте "Настройки построения" включил CUDA 5.0
3. Добавил файл *.cu, и в свойствах "тип элемента" указал CUDA C/C++

Нашел причину. Путь до папки проекта содержал символы кириллицы  Поэтому и не компилировалось. Я только после нескольких раздумий обратил внимание, что в первой ошибке есть символы "?????" - а это были символы кириллицы. Но, все равно, пришлось немного повозиться с библиотекой. раньше был отдельно модуль *.cu и заголовочный файл *.h который содержал заголовки импортируемых функций. И этот заголовочный файл прикреплялся к *.cpp библиотеки. Сейчас так не получилось - не видит функции приложение C#. Только после того как в модуле cu объявил функции как импортируемые, все заработало:

extern "C" __declspec(dllexport)  <тип> <название функции>(<параметры>)
{
     <тело функции>
}

--
Вы получили это сообщение, поскольку подписаны на группу "CUDA.CS.MSU.SU".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес cudacsmsusu...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages