홈>
다음 커널은 두 개의 nxn 행렬을 곱합니다 :
__global__ void matrixMultiplication(const double *A, const double *B, double *C, int N)
{
int i = blockDim.y * blockIdx.y + threadIdx.y;
int j = blockDim.x * blockIdx.x + threadIdx.x;
double value = 0;
for(int k = 0; k < N; k++){
value += A[k * N + j] * B[i * N + k];
}
C[i * N + j] = value;
}
MATLAB에서 위의 커널을 다음과 같이 사용합니다 :
k = parallel.gpu.CUDAKernel('matrixMultiplication.ptx', 'matrixMultiplication.cu');
A = rand(3,4);
b = rand(4,1);
C = zeros(3,1);
k.ThreadBlockSize = [3,4,1];
k.GridSize = [1, 1];
D = A*b;
C = feval(k,A,b,C,4);
D-C
그러나 결과는 0이 아닙니다! nx1 벡터에서 mxn 행렬을 곱할 수 있도록이 커널을 어떻게 변경합니까?
-
답변 # 1
관련 자료
- 파이썬에서 벡터를 사용한 행렬의 곱셈은 Matlab과 비교할 때 다릅니다
- 동형 암호화 - palisade 라이브러리를 사용한 행렬 벡터 곱셈
- python - 벡터와 행렬의 곱셈 인 3 차원 배열
- c++ - 고유 행렬 (벡터)에 스칼라 추가
- python 3.x - 큐피 행렬 곱셈 n 횟수
- c - 파이썬 행렬 곱셈 인덱스 교환 메모리 사용 예
- python - 두 번째 행렬에 열이 하나만있을 때 행렬 곱셈에서 오류가 발생 함
- python - 행렬 곱셈에서 A를 찾는 방법 Ax = b, 일부 값은 알려져 있고 A는 확률 적으로 남습니다
- python - numpy를 사용하여 벡터 곱셈을 지연시키는 효율적인 방법
- python - 행렬 곱셈 후 Pytorch에서 졸업생을 얻는 방법은 무엇입니까?
- c++ - 그래프 구현을위한 인접 행렬의 배열 오류 벡터
- grep - perl pdl - 벡터가 배열 또는 행렬인지 검색
- R을 기준으로 벡터를 기준으로 행렬 값을 일치하는 이름으로 바꿉니다
- c++ - 주어진 행 벡터 합계를 사용하여 최대 형식으로 배열 된 이진 행렬의 열 벡터 합계를 찾습니다
- matlab - 행렬을 차트로, 벡터를 선으로 고려하여 행렬을 벡터로 채우는 방법
- linear algebra - Maxima에서 체인 행렬 곱셈 결과를 변수에 지정
- qgis - matlab - 래스터 매트릭스 변환기에서 벡터 (x, y)의 모양 파일
- java - 행렬 곱셈 함수가 공백 또는 잘못된 출력을 반환합니다
- python - 행렬 행렬 곱셈의 CPU 시간
- julia - 분포 벡터에서 무승부 행렬 만들기
Matlab을 사용하고 있고 배열은 열 순서대로 저장되므로 커널 코드를 약간 수정해야합니다.
커널에는 출력 매트릭스의 항목 당 하나의 스레드가 필요하므로 (3 x 4) * (4 x 1) 예제에서 3 x 1 스레드를 실행해야합니다. 실행하면 다음을 볼 수 있습니다 :
열 주요 주문 저장에 적합합니다.