Intel MKL 라이브러리를 사용하여 복수의 오른쪽 (rhs) 벡터가있는 선형 방정식 시스템 (A*x = b)
을 풀고 있습니다. rhs 벡터는 비동기 적으로 생성되며 별도의 루틴을 통해 생성되므로 한꺼번에 해결할 수 없습니다.mkl_dss_solve의 여러 인스턴스에서 하나의 LU 인수 분해 사용
프로그램을 신속하게 처리하기 위해 각 스레드가 단일 rhs 벡터를 해결할 책임이있는 다중 스레드 프로그램이 사용됩니다. 행렬 A
은 항 s 상수이기 때.에, LU 인수 분해가 한 번 수행되어야하며 인수는 모든 스레드에서 후속 적으로 사용됩니다. 그래서, 다음 명령
dss_factor_real(handle, opt, data);
를 사용하여 A
을 고려하고 다음 명령을 사용하여 문제를 해결하기 위해 스레드에 핸들을 전달 그러나
dss_solve_real(handle, opt, rhs, nRhs, sol);
을 나는 발견 그것은에 - 스레드로부터 안전하지 않습니다 것을 동일한 handle
을 dss_solve_real
의 여러 경우에 사용하십시오. 분명히, 어떤 이유로 MKL 라이브러리 변경은 경쟁 조건을 만드는 각 인스턴스에서 처리합니다. 나는 MKL 매뉴얼을 읽었지만 관련있는 것을 찾을 수 없었다. 각 스레드에 대해 A
을 인수 분해하는 것은 논리적이지 않으므로이 문제를 극복하고 모든 곳에서 동일한 handle
을 사용하는 방법이 있는지 궁금합니다. 당신의 도움에 미리
감사
감사합니다. 나는 어떤 가정도하지 않는다 (직렬 또는 병렬). 실제로 RHS 벡터는 대기열에서 비동기 적으로 전달됩니다. RHS 벡터가 준비 될 때마다 자유 근로자 (스레드)가 특정 RHS 벡터에 대한 문제를 해결하기 위해 사용됩니다. 이제 dss_solve_real이 핸들을 변경한다고 확신합니다. 핸들을 잠그고 싶다면 쓰레드를 사용하는 것이 정당화되지 않습니다. – Pouya
편집을 참조하십시오. 저는 여전히 여러 스레드가 rhs를 해결하는 것이 효율적이지 않다고 생각합니다. 직렬 해결 단계를 수행 할 수 있다고해도 말입니다. –