Pergunta

Eu tenho um projeto escrito em C #, onde eu preciso fazer várias operações algébricas lineares em matrizes (como LU-fatoração).

Uma vez que o programa é principalmente um protótipo criado para confirmar uma teoria, um C # implementação será suficiente (em comparação com uma rápida C um possivelmente ++), mas eu ainda gostaria de uma boa BLAS ou LAPACK biblioteca disponível para me salvar alguns codificação.

Para encurtar a história, alguém pode recomendar um BLAS free / open source ou biblioteca LAPACK para uso com .net?

Com os melhores cumprimentos Egil.

Update: Encontrada Math.NET Numerics hoje, parece interessante, alguém tem alguma experiência com isso

Foi útil?

Solução

ACML da AMD é um livre download, mas é binária apenas, não de fonte aberta, e código nativo, não .net.

O desempenho é geralmente superior ao código Netlib.org, e, geralmente, aproximadamente o mesmo que MKL da Intel -. O que não é IIRC livre

O download inclui um exemplo que demonstra como a ligá-la para C #. Não diferente de chamar qualquer outro C ou biblioteca C ++ a partir de C #.

biblioteca implementa BLAS, LAPACK, FFTs, e RNG.

http://developer.amd.com/cpu/ bibliotecas / ACML / download / pages / default.aspx

EDIT para responder a comentar:

Em um Intel CPU, ACML da AMD irá executar aproximadamente , bem como MKL da Intel, mas isso depende do algoritmo, tamanhos de matriz, número de núcleos, topologia de memória e velocidade, etc. etc. etc. . sua milhagem pode variar. A única maneira de saber ao certo se a executar o seu próprio benchmark. Em alguns casos, ACML é mais rápido que MKL mesmo em hardware Itel.

Qualquer um vai ser significativamente mais rápido do que qualquer implementação "ingênua" para grande matrizes. Ambos são arquitetadas para usar vários segmentos em vários núcleos processadores, e têm kernels linguagem assembly mão-refinado e um monte de ajuste para os comportamentos de cache em várias máquinas.

Para pequenas matrizes, o desempenho é geralmente um cuidado NÃO FAZEM, uma vez que qualquer CPU moderna pode resolver um pequeno matix em apenas alguns milissegundos, mesmo usando o código mais simples. Nesse caso, você está usando apenas uma biblioteca para escrever evitar e depuração de código que foi escrito centenas de vezes já.

Outras dicas

A biblioteca de matemática DotNumerics é livre projeto de código / aberto escrito em C # e contém a tradução de Lapack, Blas, e EISPACK para C #.

O BLIS-like Biblioteca instanciação Software (BLIS) é o padrão ouro atual para BLAS bibliotecas de código aberto. https://github.com/flame/blis Não é tão rápido como MKL (embora perto) mas mais rápido do que OpenBLAS, um garfo dos GotoBLAS lendários, em praticamente todos os CPUs (e muito mais rápido sobre as últimas arquiteturas, incluindo Intel, AMD e ARM). Ele é bem cuidados.

ACML, mencionado em outra resposta, não existe mais. AMD agora usa software de código aberto como parte de sua pilha de software ACL (AMD Compute Library). BLIS é o que faz parte dessa pilha de software: https: //developer.amd .com / amd-cpu-libraries / blas-library / .

caviat: cartaz é parte do projeto BLIS. As reivindicações acima são bem documentados.

(Comentário adicionado mais tarde:.. Não notou o ".NET" Infelizmente BLIS ainda não é suportado bem para Windows)

Lutz Roeder tem uma boa porta de código aberto Mapack.Net

Usado no passado para vários projetos e achei EARY ao trabalho com

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top