2009-09-17 7 views
16

저는 C#으로 작성된 프로젝트에서 행렬에 대한 다양한 선형 대수 연산 (예 : LU 인수 분해)을 수행해야합니다..net (C#)을위한 좋은 무료 (오픈 소스) BLAS/LAPACK 라이브러리는 무엇입니까?

이 프로그램은 주로 이론을 확인하기 위해 만든 프로토 타입이기 때문에 C# 구현으로 충분하지만 (속도가 빠른 C++과 비교하면 충분 함) 여전히 좋은 BLAS 또는 LAPACK 라이브러리를 사용하여 코딩을 저장하고 싶습니다.

간단히 말해서 누구나 .net과 함께 사용할 수있는 무료/오픈 소스 BLAS 또는 LAPACK 라이브러리를 추천 할 수 있습니까?

안부 인사 Egil.

업데이트 : 오늘 Math.NET Numerics을 찾았습니다. 흥미 롭습니다. 아무도 그 경험이 있습니까?

답변

9

는 AMD의 ACML는 무료 다운로드이지만, 바이너리 만하지 오픈 소스, 그리고 네이티브 코드가 아닌 .NET입니다.

성능은 일반적으로 Netlib.org 코드보다 우수하며 일반적으로 무료 IIRC가 아닌 Intel의 MKL과 거의 동일합니다.

다운로드에는 C#에 바인딩하는 방법을 보여주는 샘플이 포함되어 있습니다. C#의 다른 C 또는 C++ 라이브러리를 호출하는 것과 전혀 다른 점이 없습니다.

라이브러리는 BLAS, LAPACK, FFT 및 RNG를 구현합니다. AMD의 ACML는, 뿐만 아니라 인텔 MKL을 수행합니다 인텔 CPU에

을하지만 코어의 알고리즘, 매트릭스 크기, 수에 따라 달라집니다 :

http://developer.amd.com/cpu/Libraries/acml/downloads/pages/default.aspx

편집 댓글에 대응하기 위해 , 메모리 토폴로지 및 속도 등. 귀하의 마일리지는 다를 수 있습니다. 확실히 말할 수있는 유일한 방법은 자신의 벤치 마크를 실행하는 것입니다. 경우에 따라 Itel 하드웨어에서도 ACML이 MKL보다 빠릅니다.

둘 중 어느 하나가 대형 행렬의 "순진"구현보다 훨씬 빠릅니다. 둘 다 멀티 코어 프로세서에서 다중 스레드를 사용하도록 설계되었으며 다양한 컴퓨터에서 손쉽게 어셈블리 언어 커널을 조정하고 캐시 동작을 조정할 수 있습니다. 현대의 CPU도 간단한 코드를 사용하여 단 몇 밀리 초에있는 작은 MATIX를 해결할 수 있기 때문에 작은 매트릭스를 들어

는 성능은 일반적으로 본건 케어입니다. 이 경우 이미 수백 번 작성된 코드 작성 및 디버깅을 피하기 위해 라이브러리 만 사용합니다.

+0

그래서 Intel CPU를 목표로한다면 AMDS ACML은 Intels MLK뿐만 아니라 순진한 C# 구현보다 훨씬 뛰어납니다. –

+0

음, 편집 내용이 [여기] (http://stackoverflow.com/questions/1644905/intel-mkl-vs-amd-math-core-library)와 모순됩니다.그들은 또한 좋은 [출처] (http://www.advancedclustering.com/company-blog/high-performance-linpack-on-xeon-5500-v-opteron-2400.html)를 참조합니다 ... 확실하지 않습니다. 편집은 옳은 대답입니다.하지만 당신 말이 맞습니다. 적어도 ACML은 무료입니다 ... –

2

루츠 Roeder는 다양한 프로젝트를 위해 과거에 사용되는 좋은 오픈 소스 포트 Mapack.Net

을 가지고 있으며, DotNumerics은 무료/오픈 소스 프로젝트는 C#으로 작성되어

5

와 수학 라이브러리를 작동하는 것이 eary 발견 포함 Lapack, Blas 및 Eispack을 C#으로 번역했습니다.