MATLAB CUDA Kernel Object — ошибка при использовании команды?

У меня есть следующее CUDAKernel объект:

рабочая среда

Который я вызываю, используя:

kernel1 = parallel.gpu.CUDAKernel('kcc2.ptx', 'kcc2.cu');
kernel1.ThreadBlockSize = 256;
kernel1.GridSize = 4;

gpuTM = gpuArray(single(TM));
gpuLTM = gpuArray(single(LTM));
gpuLTMP = gpuArray(int32(LTMP));

rng('shuffle');
randz = abs(randi(2^53 -1, [1, r_max]));
GPUrands = gpuArray(double(randz));

[x,y] = gather(feval(kernel1, gpuLTM, gpuLTMP, F_M, Force, GPUrands, ...
(r_max), single(Lamda), single(Fixed_dt), single(r), single(q), ...
single(gama_B), single(gama_M), single(mu_B), single(mu_M), ...
single(KB_p_ref), single(KB_m_ref), single(f_ref), single(g_ref), ...
single(Kca_p_ref), single(Kca_m_ref)));

Как вы видите выше, у меня есть 2 левых аргумента, но я получаю ошибку в MATLAB:

Ошибка при использовании gpuArray / collect:
Слишком много выходных аргументов.

Я не понимаю Все мои параметры выстраиваются в ядре CUDA и в MATLAB. Как видите, функция ядра имеет следующий прототип C ++:

__global__ void myKern(const float *transMatrix, const int *pointerMatrix,
float *masterForces, float *Force, const double *rands, const int r_max,
const float lamda, const float dt, const float r, const float q,
const float gama_B, const float gama_M, const float mu_B, const float mu_M,
const float KB_p_ref, const float KB_m_ref, const float f_ref,
const float g_ref, const float Kca_p_ref, const float Kca_m_ref)

Должно только вернуться masterForces а также Force ([x,y] в MATLAB), поскольку они являются единственными непостоянными указателями.

В чем может быть проблема?

1

Решение

Вы не можете подать заявку gather непосредственно для нескольких выходных переменных, вы должны сделать это в отдельных строках (это основной синтаксис MATLAB):

[x,y] = feval(kernel1, ...);
x = gather(x);
y = gather(y);

Результат оценки ядра CUDA — две переменные типа gpuArray (данные хранятся на GPU). Затем вы можете перенести данные в память процессора, используя gather применяется к каждой переменной.

3

Другие решения


По вопросам рекламы [email protected]