0
이것은 행렬 곱셈에 대한 내 코드이지만 첫 번째 행에는 올바른 결과가 나오지만 두 번째와 세 번째 (주로 큰 음수)에는 잘못된 결과가 발생합니다. 이것은 내 첫 번째 programm에 그래서 나는 완전히 @talonmies에 동의 순Cuda 행렬 곱셈 - 잘못된 결과
#include <iostream>
__global__ void MnozenjeMatrica(int* d_c, int* d_a, int* d_b)
{
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
int d = 0;
for(int i=0; i<3; i++)
{
int x = d_a[row * 3 + i];
int y = d_b[i * 3 + col];
d += x * y;
}
d_c[row * 3 + col] = d;
}
int main()
{
const int SIZE = 9 * sizeof(int);
int a[3][3] = {{2, 4, 6}, {1, 3, 5}, {8, 4, 1}};
int b[3][3] = {{5, 8, 34}, {5, 7, 5}, {1, 4, 31}};
int c[3][3] = {{5, 8, 34}, {5, 7, 5}, {1, 4, 31}};
int* d_a;
int* d_b;
int* d_c;
cudaMalloc((void**) &d_a, SIZE);
cudaMalloc((void**) &d_b, SIZE);
cudaMalloc((void**) &d_c, SIZE);
cudaMemcpy(d_a, a, SIZE, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, b, SIZE, cudaMemcpyHostToDevice);
MnozenjeMatrica<<<3, 3>>>(d_c, d_a, d_b);
cudaMemcpy(c, d_c, SIZE, cudaMemcpyDeviceToHost);
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
printf("%d\t", c[i][j]);
}
printf("\n");
}
}
여기에 질문하지 않았습니다. – talonmies
잘 모든 결과가 올바른 얻으려면 오류를 해결할 필요가 :) –
그리고 난 이발과 샌드위치가 필요합니다. 그렇다고 유효한 스택 오버 플로우 질문이있는 것은 아닙니다. 그리고 어느 쪽도 보이지 않습니다. 여기에있는 질문은 이후에 올 다른 사람들이 사용하기위한 것입니다. "내 코드가 작동하지 않습니다. 제발 도와주세요."거의 해당 범주에 속하지 않습니다. – talonmies