2009-09-10 2 views
1

저는 C#에서 Goldenthal et.al의 비 연장 천 알고리즘을 실험적으로 구현하고 있습니다.C#의 희소 선형 대수학 솔버

처음으로 Math.NET Iridium을 사용하여 매트릭스를 어셈블 및 해결했지만 dnAnalytics로 신속하게 대체했습니다. 후자의 경우 매트릭스를 재사용 할 수 있기 때문에 실시간 성능에 중요한 추가 메모리 할당이 거의 필요하지 않습니다 (작은 천) 또는 일반적으로 반복적 인 해결.

문제는 dnAnalytics의 솔버 (주로 관심 대상은 LU 및 Bi-CG)가 이전 할당을 재사용하는 대신 매트릭스와 벡터를 장면 뒤에 할당한다는 것입니다.

=> 메모리를 즉시 재사용하는 스파 스 선형 대수 라이브러리가 있습니까? 아니면 직접 코드를 다시 작성해야합니까?

+0

새로운 것을 발견하셨습니까? 저희에게 알려주십시오! – Mikhail

+0

불행히도, 아니. .NET에서 다른 무료 솔버 패키지를 찾지 못했습니다. (상업용 및 비싼 [MKL]과 비슷하지만 라이브러리에 투자하지는 않을 것이지만 그렇게 많이 사용하지 않을 것입니다). 나는 현재 자신의 솔버와 스파 스 매트릭스 스토리지를 연구하고 있는데, 이는 실행 당 메모리를 할당하지 않는다. –

답변

1

이 조언은 불필요 할 수 있지만 dnAnalytics를 사용하는 경우 Intel Math 커널 라이브러리를 사용해야합니다. 순수한 C# 구현 아이디어가 들리 듯이 필자는 성능 차이가 엄청난 것으로 나타났습니다. 조밀 한 체계는 대략 100 시간 빨리 해결되었다.

+0

이 속도 차이는 프로그래머가 '순수 C# 구현'에서 메모리 관리를 제대로 수행하지 못했기 때문일 수 있습니다. – Paul

+0

수 있습니다. Intel Math Kernel 라이브러리에는 대부분 손으로 최적화 된 어셈블리 코드가 포함되어 있으며, 대부분의 관리 코드보다 뛰어난 성능을 발휘합니다. 어쨌든, 그 차이는 내가 예상했던 작은 선형 요소의 속도 향상보다 훨씬 컸다. –