2013-04-23 4 views
0

В настоящее время я пытаюсь реализовать продукт Matrices в CUDA: Первая матрица - это трехмерная матрица (N, M, Z), а вторая - 2D-матрица (M, L). Я не могу понять, что не так в моем коде для этого умножения. Может ли кто-нибудь помочь мне в этом вопросе? СпасибоУмножение 3D-матрицы в CUDA

Вот мое ядро:

__global__ void matrixMul(float * A, float * B, float * C,int N, int M, int Z, int L) { 
int idx = blockIdx.x*blockDim.x + threadIdx.x; 
int idy = blockIdx.y*blockDim.y + threadIdx.y; 

for(int z=0; z<width; z++){ 
    C[idx*width+idy] += A[idy + idx*width ]*B[idx*width+idy+z*width*height]; 
} 

} 
+0

В чем же ваша проблема? И не лучше ли называть ядро ​​'matrixMult' вместо' matrixAdd'? – Stefan

+0

Вы пытаетесь вычислить произведение гиперматрицы? или что-то другое? – talonmies

+0

Здравствуйте, My isssue - это самый быстрый способ получить мои результаты. Я пытаюсь запустить параллельное вычисление этого продукта. У меня есть некоторые сомнения относительно моего индексации. Я думаю, что C (i, j, t) = sum i = 1 до n (a (r + it) * B (i, t) ... Предыдущая индексация дала некоторые странные результаты .. – ALFRAM

ответ

1

Проблема, которую я вижу, это нумерация строк/столбцов.

z должно быть как в A, так и в B матричных индексах. Правило умножения матриц гласит:

(AB) IJ = сумма (к) AIK * BKJ

поэтому я полагаю, для примера будет коснуться как

(AB) IJ = сумма (к, e) Aik * Bkje

+0

Я изменил свои индексы следующим образом. Я знаю, что оба правильны, так как я могу вернуть исходные матрицы, но как только продукт для результата (int z = 0; z ALFRAM

Смежные вопросы