nVidia CUDA / CUDA и .NET — укрощаем native код
Возникла у меня необходимость написать приложение в среде Visual C++ 2008 Express Edition, которое бы обрабатывало нейронными сетями коллекции изображений. И решил я поэкспериментировать с технологией CUDA, о которой слышал уже давно, благо обладаю соответствующим железом.
Скачал всё, что требуется для CUDA, и установил. Консольные сэмплы скомпилировались и запустились, что меня очень порадовало. Но. Мне-то приложение нужно писать не консольное, а GUI-шное, так сказать Windows Forms проект. Поскольку MFC я не люблю, то решил воспользоваться именно .NET решением. Вот. А проблемы начались, когда я начал миксить созданный в MSVC++ проект с файлами *.cu и компилятором nvcc.exe
Дело в том, что платформа .NET не дружит с native кодом, на котором основано использование CUDA. Я стал искать, как же их всё таки слить воедино. Нашёл некую технологию CUDA.NET, которая по заверениям разработчиков "is an effort by GASS to provide access to CUDA functionality through .NET applications". Не знаю, как они там это «провайд», но лично у меня её использовать не получилось…
В общем, искал я дальше, и на одном из форумов творищ BarsMonster посоветовал мне написать dll с функциями CUDA, используя native код, а потом импортировать эти функции уже в приложение с .NET Мне такой вариант понравился, и я так и поступил. Но, поскольку в процессе реализоации этого метода я столкнулся с разными трудностями и ошибками, я решил написать комплексный how-to по этому делу. Итак, приступим.
AD: