.... распределение на основе элементов
Это очень странная терминология для использования, учитывая, что в 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
.Очевидно, код изменится для основного хранилища столбцов, я оставляю это в качестве упражнения для читателя.