Я хочу добавить две большие матрицы NxN (N кратно двум) и распараллелить программу с помощью Cuda C. Мне удалось запустить программу с матрицами размером 512x512. Но если я выйду за пределы этого (например, 1024x1024), то это не сработает. Я считаю, что проблема может заключаться в том, что CUDA может запускать максимум 512 потоков на блок (?). Поэтому мой вопрос заключается в том, как изменить программу, чтобы я мог создавать матрицы любого размера.Большая матричная добавка с использованием CUDA C
CUDA ядра
__global__ void parMatrixAdd_kernel(float *a, float *b, float *c, int N) {
int col = threadIdx.x + blockIdx.x * blockDim.x;
int row = threadIdx.y + blockIdx.y * blockDim.y;
int index = col + row * N;
if (col < N && row < N) {
c[index] = a[index] + b[index];
}
}
блок и сетки размеры:
//BLOCK_DIM is 512, N works upto 512, but not beyond
dim3 dimBlock(BLOCK_DIM, BLOCK_DIM);
dim3 dimGrid((int)ceil(N/dimBlock.x),(int)ceil(N/dimBlock.y));
массивы: matrix1[N][N]
matrix2[N][N]