2013-10-18 3 views
0

주어 매우 희박한 nnz (A) 비 제로하고 치밀한 NXNB 매트릭스와 매트릭스 A NXN. 매트릭스 제품 AxB을 계산하고 싶습니다. n이 매우 크므로 순진하게 수행하면 밀도 매트릭스 B을 메모리에 넣을 수 없습니다. 다음 두 가지 옵션이 있지만 어떤 것이 더 좋은지 잘 모릅니다. 몇 가지 제안을 해 주실 수 있습니까? 감사.분할 벡터 행렬 곱셈

옵션 1. 행렬 Bn 열 벡터 [b1,b2,...,bn]에 분할합니다. 그런 다음 행렬 A과 단일 벡터 bi을 메모리에 넣고 A*b1, A*b2, ..., A*bn을 각각 계산할 수 있습니다.

옵션 2. 각각 AB 행렬을 n/2Xn/2 블록으로 분할 한 다음 블록 행렬 - 행렬 곱셈을 사용하여 A*B을 계산합니다.

위 중 어느 것이 더 좋습니까? 옵션 1이 병렬 계산에서 높은 성능을 갖고 있다고 말할 수 있습니까?

+1

... 바퀴를 다시 발명하기보다는 Eigen, Armedillo 또는 다른 제 3 자 매트릭스 라이브러리를 사용하십시오. – IdeaHat

+0

현재 위의 두 가지 선택의 성능 비교를 알고 싶을 수 있습니다. –

+0

n의 크기 순서가 유용 할 수 있습니다 ... 분명히'root (n)'이 메모리에 적합할까요? 아마 전형적인 (16 GB) 작업 메모리 세트의 경계에서 벗어난 것일까? n은 아마도 10^21 이하입니까? –

답변

0

Scalapack 문서의 두 밀도 매트릭스의 경우 this document에 대한 설명을 참조하십시오. Scalapack은 분산 선형 대수학의 참조 도구 중 하나입니다.