Добавление DLL CUDA в качестве ссылки на проект C #, показывающий ошибку - PullRequest
1 голос
/ 15 сентября 2011

Я сделал Simple CUDA dll код, который я показываю ниже.Функция добавляет некоторое значение в массив.

#include<stdio.h>
#include<stdlib.h>
#include<cuda.h>

//Cuda Kernel
__global__ void add_gpu(float *a)
{
int idx=blockIdx.x*blockDim.x+threadIdx.x;
a[idx]=a[idx]*2;
}


int cudasafe( cudaError_t error)
{
    if(error!=cudaSuccess) 
return 1;
else
return 0;
}


 extern "C" int __declspec(dllexport) __stdcall add_gpu_cu(float *a, int size,int    nblock, int nthread)
{

float* dev_a;
int flag;
flag=cudasafe(cudaMalloc((void**)&dev_a,size*sizeof(float)));
if(flag==1)
    return flag;
flag=cudasafe(cudaMemcpy(dev_a,a,size*sizeof(float),cudaMemcpyHostToDevice));
if(flag==1)
    return flag;
add_gpu<<<10,10>>>(dev_a);
flag=cudasafe(cudaMemcpy(a,dev_a,size*sizeof(float),cudaMemcpyDeviceToHost));
if(flag==1)
    return flag;
  }

Проблема в том, что я не могу добавить созданную dll как ссылку на мой проект на c #.Выдает исключение, говорящее, что ссылка на файл не может быть добавлена.Убедитесь, что файл доступен, и что он является допустимой сборкой или компонентом COM.

Я что-то не так делаю при создании DLL?

Пожалуйста, помогите

С уважением

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Нет, DLL является C ++ DLL, а не .NET DLL, поэтому вы не можете добавить ссылку на нее.Вам нужно использовать interop для использования его в C #.

. Для этого вам нужно включить файл .DEF в вашу DLL (или __declspec), чтобы сделать функцию экспортируемой, а затем объявить определение в C # вместе сстроки:

[DllImport("your_dll_name")]  public static extern int add_gpu_cu(IntPtr a, int size, int nblock, int ntrheac);
1 голос
/ 15 сентября 2011

Ссылка должна быть управляемой DLL, т.е. она должна быть написана с использованием MSIL.Вы используете неуправляемую библиотеку в настоящее время. Вот классное руководство по выполнению неуправляемых вызовов из .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...