В Pycuda, как распределить строки 2-D массива для каждого потока? - PullRequest
0 голосов
/ 21 сентября 2018

Я новичок в Пикуде.В моем коде каждый поток должен вычислять строку двумерного массива.Однако, как я вижу в примерах, используется только распределение на основе элементов.Как я могу распространять его на основе строк массива?

1 Ответ

0 голосов
/ 23 сентября 2018

.... распределение на основе элементов

Это очень странная терминология для использования, учитывая, что в CUDA или PyCUDA вообще не существует понятия «распределение».В CUDA то, как входные данные обрабатываются заданным потоком, полностью на усмотрение программиста, нет никаких предопределенных «распределений» любого вида.

Так что в стандартном ядре CUDA C (это то, что вынапишите в PyCUDA, это действительно только API-оболочка и система компиляции), вы могли бы сделать что-то подобное для основного упорядоченного ввода строки:

__global__ 
void kernel(float* array, int lda)
{
     int tid = threadIdx.x + blockIdx.x * blockDim.x;
     int rowid = tid * lda;
     float* row = array + rowid;

     for(int col=0; col<lda; col++) {
         row[col] = ....;
     }
}

[Очевидно, никогда не компилируется и не тестируется, используйте на свой страх и риск]

Код установки оставляет row указателем на первый элемент данной строки входного массива с начальным измерением lda.Очевидно, код изменится для основного хранилища столбцов, я оставляю это в качестве упражнения для читателя.

...