2011-02-08 6 views
6

D로 작성된 빠른 선형 시스템 해석기는 어디에서 얻을 수 있습니까? 이 정방 행렬 및 벡터 B을 방정식을 도끼 이상적 B 및 대한 = B 해결 또한 에 명백한 반전을 수행 할 수 있어야한다. 나는 자기 자신을 썼지 만 캐시는 순진하기 때문에 꽤 느리다. 그렇지 않으면이다는 이러한 사항을 충족하지 않는 경우, 내 유스 케이스를 위해, 나는 다음과 같은 절대 타협 요구 사항, 즉 뭔가를 필요로하고 내가 그렇지 않으면 상관 없어 얼마나 잘 :D에 대한 빠른 선형 시스템 해석?

  1. 라이센스가 필요합니다. 공개 도메인, 부스트 라이센스 또는 이와 유사한 허가 라이센스 여야합니다. 이상적으로는 바이너리 (BSD가 아닌)에서 속성을 요구해서는 안되지만,이 점은 다소 협상 가능합니다.

  2. 순수 D로 작성하거나 순수 D로 쉽게 번역 할 수 있어야합니다. 불완전한 포트란 코드 (LAPACK)는 아무리 빠르면 좋은 대답이 아닙니다.

  3. 대형 (예 : n> 1000) 시스템에 최적화되어야합니다. 저는 게임 프로그래머가 4x4 행렬을 정말 빠르고 아주 빨리 해결할 수 있도록 설계된 것을 원치 않습니다.

  4. 필자가 필요로하지 않는 엄청난 양의 라이브러리에 얽매이지 않고 연결될 수 없습니다.

편집 :이 겉으로는 미친 요구 사항에 대한 이유는 내가 제 3 자 종속성을 갖고 싶어하지 않는 permissively 라이센스 오픈 소스 라이브러리이 코드를 필요로한다는 것이다.

+1

A에는 어떤 속성이 있습니까? 대칭? 양? 긍정적 인 명확한? 줄무늬? 부족한? 당신은 빠른 무언가를 요구하고 공개 도메인은 LAPACK를 제외합니다! 실제로 솔루션을 원하는 것처럼 들리지는 않습니다! 모든 고성능 선형 해석기가 핸드북에서 파생된다는 사실을 알고 계십니까? –

+0

"수첩"이란 무엇입니까? – Baxissimo

+0

@Baxissimo "자동 계산을위한 핸드북 : 선형 대수학"은 1972 년 JH Wilkinson과 C. Reinsch가 저술 한 책입니다. –

답변

3

포트란 코드가 마음에 들지 않으면 적당한 멀티 코어 지원, 잘 작성된 코드 및 훌륭한 사용자 인터페이스를 갖춘 비교적 빠른 C++ 고밀도 매트릭스 라이브러리가 Eigen입니다. 코드를 D로 변환하거나 (또는 ​​일부 알고리즘을 가져 오는 것) 직접해야합니다.

이제 "내 요구 사항을 생각해보십시오": ATLAS/LAPACK, UMFPACK, PARDISO, CHOLMOD 등을 "모든 사용자"(Mathematica, Matlab, Maple, SciPy, GSL, R ...)가 사용하는 이유가 있습니다. 빠르고, 멀티 쓰레드이며, 메모리 효율적이고, 이식성 있고, 수치 적으로 안정적인 행렬 솔버를 작성하는 것은 어렵습니다. (저를 믿으십시오, 시도했습니다). 이 힘든 일들이 ATLAS와 다른 것들에 많이 들려 왔습니다.

제 접근 방식은 매트릭스 유형에 따라 관련 라이브러리에 대한 바인딩을 작성하고 C 인터페이스에 대해 D에서 링크하는 것입니다. 어쩌면 multiarray의 바인딩이 충분합니다 (시도하지 않았습니다). 그렇지 않으면, 나는 또 다른 C++ 라이브러리, 즉 uBlas과 해당 bindings을 아이디어로 제안 할 것을 제안합니다.

+0

LAPACK 등의 문제는 코드의 작은 부분에 이것을 필요로하고 의존. 또한 Eigen은 LGPL이기 때문에 사용할 수 없습니다. 따라서 D 사본은 카피 레프트에 의해 보호됩니다. – dsimcha

+0

@dsimcha : 의미가 있습니다.아마도 Eigen의 부분 피벗 LU와 삼각 화 소스를 보면 도움이 될 것입니다. 알고리즘이 LGPL에 의해 다루어지는 것은 의심 스럽지만 (나는 이전의 학문적 연구를 기반으로했을 가능성이 높다), 나는 변호사가 아니다. LAPACK 의존성에 관해서는 : 그것은 보이는 것처럼 크지 않을 수도 있습니다. LAPACK은 OS X에 미리 설치되어 있으며, 미리 설치되어 있거나 유닉스/리눅스에서 쉽게 설치가 가능하며, Windows 바이너리를 쉽게 이용할 수 있습니다. 그러나 나는 죽은 말을 채찍질하고 싶지 않다 ... – stephan

+0

내가 아는 전부는 내가 관련이없는 이유로 노력한 지난 번에 Windows에서 일하는 LAPACK을 얻지 못했다. (나는 세부 사항을 기억하지 못합니다.) 어쩌면 내가 어떻게 생각하는지, 느린 순수한 D 루틴을 기본값으로 유지하고 -version = LAPACK 플래그를 추가하면 LAPACK이 설치되어 있고 속도가 필요하면 그것을 얻을 수 있습니다. (이 솔버의 성능은 N이 큰 비교적 드문 경우에만 중요합니다. 작은 N의 경우 순진한 알고리즘이 빠릅니다.) – dsimcha

관련 문제