Выделение памяти под двумерные массивы

Добрый день. Извините за возможно глупый вопрос, но возникли проблемы. Нужно передать в ядро двумерный массив. Прочитал про cudaMallocPitch и попытался реализовать. Требуется двумерный массив X передать в devX.

const int N = 500000;
const int K = 10;
float X[N][K];
float ** devX = NULL;
int pitch;
cudaMallocPitch ( (void**)&devX, &pitch, N *sizeof ( float ),K );
cudaMemcpy ( devX, X, sizeof (X), cudaMemcpyHostToDevice );

возникает ошибка: error C2664: 'cudaMallocPitch' : cannot convert parameter 2 from 'int *__w64 ' to 'size_t *'

заранее спасибо=)

Forums: 

А как вы определили, что

А как вы определили, что ничего не копирует?
devX - указатель в адресном пространстве видяхи, обычный отладчик по нему мусор будет показывать

Поясните пожалуйста

Поясните пожалуйста начинающему)) Хотелось бы подробно, с примером о том как с помощью cudaMallocPitch и cudaMemcpy2D выделить память под двумерный массив и скопировать его на девайс. Поясните все параметры функций. Особенно меня в тупик ставит параметр pitch. Не могу понять что это и как использовать