2013-06-17 3 views
1

tptrs를 blas로 바꾸는 방법은 무엇입니까?tptrs를 blas로 바꾸는 방법?

내가 해결하려는 :

XA = B 

을하지만 tptrs은 내가 해결 할 것으로 보인다 :

A'X = B 
: tptrs에서 '트랜스'플래그를 사용하여,

AX = B 

또는

재 배열은 다음과 같습니다.

(A'X)' = B' 
X'A = B' 

그래서 XA = B를 풀 때 사용할 수는 있지만 수동으로 B를 수동으로 이항시켜야하고, 다시 해답을 바꾸어야합니다. 트랜스 포즈를하지 않아도되는 트릭을 놓치고 있습니까?

+0

A, B 및 X의 크기는 무엇입니까? – John

+0

미정의. A는 정사각형의 낮은 삼각형 행렬입니다. B와 X는 모두 직사각형 행렬입니다. 모두는 조밀하다 (당연히, blas이기 때문에). 일반적으로 A는 상대적으로 작지만 B와 X는 길고 가늘습니다. –

+0

'트릭'이라고 부르지는 않겠지 만, 독자적인 매트릭스 솔버를 작성할 수 있습니다. –

답변

2

TPTRS는 BLAS 루틴이 아닙니다. 그것은 LAPACK 루틴입니다.

A가 B와 X에 비해 상대적으로 작은 경우 "일반"삼각 행렬에 압축을 해제하고 XA = B를 지정할 수있는 "side"인수를 사용하는 BLAS 루틴 TRSM을 사용하는 것이 좋습니다. A가 mxm이고 B가 nxm이면, 언 패킹은 m^2 연산을 추가합니다.이 연산은 O (nm^2) 연산과 비교할 때 약간의 오버 헤드가됩니다.

+0

예, 며칠 전에 TRSM에 대해 배웠습니다. 정확히 내가 찾던 해결책 이었으므로 이것을 답으로 표시하겠습니다. –

+1

@HughPerkins : 원본 A가 실제로 포장 된 양식 인 경우 TRSM을 사용하기 위해 전체 포장 된 양식을 인스턴스화 할 필요가 없습니다. 그렇게하지 않으려면 적당한 타일 크기 (예 : 64x64)를 선택하고 각 타일의 포장을 풀고 대각선 타일의 경우 TRSM을 호출하고 대각선 타일이 아닌 경우 GEMM을 호출 할 수 있습니다. 그러나 걱정할 필요가없는 내용 일 것입니다. –

+0

팩 형태가 아닙니다. 그냥 처음에는 TSRM을 찾지 못했고, 처음 발견 한 기능은 처음에는 압축 된 양식을 필요로했습니다. 그런 다음 원래의 압축되지 않은 양식을 얻는 데 노력을 쏟았습니다. –