Комментировать

проверьте правильность

Т.е. если я правильно понял, делаем следующее (CUDA.NET) :

  1. CUdeviceptr[] d_a = new CUdeviceptr[n];
  2. for (int i = 0; i < n; i++)
  3.       d_a[i] = cuda.CopyHostToDevice<int>(a[i]);

,
создаём массив указателей и каждому из них ставим в соответствие строку (указатель на строку) нашего массива. А когда параметр передаём на ядро, передаём массив указателей в качестве параметра:
 cuda.SetParameter(func, 0, (uint)d_a.Pointer);
Верно???