Bibliotecas de GPU para usar em operações de Álgebra Linear

8

Estou procurando bibliotecas de GPU para acelerar um código que tenho, cujas regiões primárias de "alto desempenho" possuem decomposição de valor singular, fatoração QR e valores de Eigen, computação de Eigenvectors. Eu procurei no site da Nvidia em suas ferramentas como CuBLAS, Magma etc., mas não quero escrever o código em Cuda.

seria maravilhoso se existem bibliotecas por aí que eu possa "chamar" do meu código C principal para coisas como SVD, QR etc., e o cálculo seria feito nas GPUs. Então, em resumo, eu tenho um código C normal, no qual as operações intensivas de álgebra linear são aceleradas. Alguém sabe de uma biblioteca de código aberto (de preferência) que pode fazer isso?

Obrigado.

atmaere
fonte

Respostas:

8

Para o [CU] BLAS, existe um invólucro chamado 'thunking' no kit de ferramentas CUDA (src / fortran_thunking. {C, h}) que pega os ponteiros da memória da CPU e faz toda a alocação / cópia da GPU para você. Você pode conectá-lo ao seu código com instruções de pré-processador como

#define ZGEMV CUBLAS_ZGEMV
#define ZGEMM CUBLAS_ZGEMM
...

Para o LAPACK, o Magma possui interfaces do lado da CPU para a maioria, se não todas, de suas funcionalidades (elas tendem a ser implementadas primeiro). Assim, como no thunking, você apenas troca as chamadas. Em alguns casos, os requisitos de interface ou espaço de trabalho podem ser um pouco diferentes, portanto, você deve ter um pouco mais de cuidado do que com thunking.

A isenção de responsabilidade necessária é que não há almoço grátis: se você não estiver disposto a pelo menos manipular explicitamente as cópias da memória, seu desempenho será limitado a grandes problemas com alta intensidade computacional (flops / bytes). Se seus problemas forem pequenos e / ou em lote, eu recomendo que você escreva algum código de controle para transmitir as cópias da memória e as chamadas da biblioteca para sobrepor cópias da memória e computação. Isso não é realmente CUDA, tanto quanto uma API, pois você não precisa escrever kernels. CUBLAS e Magma fornecem chamadas de API para especificar fluxos.

Max Hutchinson
fonte
4

Karl Rupp, que escreve ViennaCL ( http://viennacl.sourceforge.net/ ) e está no Computational Sci StackEx, pode ser capaz de entrar aqui - sua biblioteca possui várias decomposições de matriz, incluindo SVD, LU, eigendecomp, etc. uma biblioteca somente de cabeçalho e deve funcionar bem com o código C ++ (não tenho certeza sobre C).

Um exemplo disso em uso com fatorações de LU - http://viennacl.sourceforge.net/viennacl-examples-dense-matrix.html .

Jesse Chan
fonte
Veja a descrição anterior dele. scicomp.stackexchange.com/questions/376/…
Jesse Chan
Estamos prestes a abrir o ViennaCL em outros idiomas além do C ++. Uma interface C pura para operações BLAS estará disponível na próxima versão 1.5.0 e mais algoritmos de fatoração na 1.6.0.
quer
3

Você pode dar uma olhada na biblioteca CULA , que implementa várias das operações LAPACK / BLAS mais comuns em precisão única (edição gratuita) e precisão dupla (edição completa, ou seja, versão paga).

A biblioteca funciona como uma substituição direta do LAPACK / BLAS; portanto, se você já usa essas funções no seu código original, não precisa alterar nada.

Pedro
fonte