[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 580: sizeof(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 636: sizeof(): Parameter must be an array or an object that implements Countable
3.14.by forum • кaк cTpouTcя oчередь доступа к параметру CUDA функции?
Page 1 of 1

кaк cTpouTcя oчередь доступа к параметру CUDA функции?

Posted: Fri Aug 09, 2013 8:34 am
by dqrest
Всем привет) Я вот пишу простую программу на КУДА, которая присваивает значение всем элементам матрицы.

Дано: матрица А с размером 128х128, число В.
Нужно присвоить число В всем элементам матрицы А. Я создаю КУДА функцию с 128 блоками и 128 потоками.
Вопрос: Как будет выстраиваться очередб доступа в КУДА функции к переменной В

__global__ void func(double *dataGPU, double B, int n, int m)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
int size = n * m; // будет ли это место выполнятся параллельно?
if(idx < size)
dataGPU[idx] = B;// будет ли это место выполнятся параллельно?
}
Будут ли указанные места выполнятся параллельно? Как сделать это максимально эффективно?

Re: кaк cTpouTcя oчередь доступа к параметру CUDA функции?

Posted: Fri Aug 09, 2013 8:43 am
by BarsMonster
Гораздо проще проверить на практике, и оценить получившуюся скорость записи в видеопамять.
Если она примерно равна теоретической полосе пропускания - значит все ок.

Re: кaк cTpouTcя oчередь доступа к параметру CUDA функции?

Posted: Fri Aug 09, 2013 11:52 am
by dqrest
Все таки очередь доступа портит все кашу.
думаю, что логично было бы сделать так

__global__ void func(double *dataGPU, double B, int n, int m)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
__shared__ double sval;
if(threadIdx.x == 0)
sval = B;
__syncthreads();

int size = n * m; // будет ли это место выполнятся параллельно?
if(idx < size)
dataGPU[idx] = sval;// будет ли это место выполнятся параллельно?
}

Улучшение есть, но кто-нить знает другие рецепты. В инете рыл-рыд не могу найти ничего!