Qual algoritmo usar para inversão de matriz densa paralela em no máximo 8 núcleos?

8

Eu preciso implementar inversão de matriz densa paralela para uma linguagem que estou usando que parece não ter uma biblioteca existente para isso (especificamente IDL usando IDL Bridge para passagem de mensagens). Eu estou familiarizado com métodos de programação paralela através da experiência usando MPI em C ++, embora principalmente para métodos paralelos de FFT e N-body. Tenho pouca experiência ou conhecimento de métodos computacionais, seriais ou paralelos, para álgebra linear.

O que estou procurando é uma descrição clara de pseudo-código de um algoritmo de inversão de matriz paralela estável e robusto, apropriado para um pequeno número de núcleos, pois a máquina que executa a tarefa IDL (atualmente serial) possui 8 núcleos. Na prática, provavelmente usarei apenas 4 para manter os núcleos livres para outras tarefas.

Eu preferiria a simplicidade do que o desempenho de ponta, se houver uma variedade de algoritmos conhecidos para esta tarefa.

Bogdanovist
fonte
1
Suponho que você queira dizer matrizes densas . Certamente você pode fazer com que o IDL use uma implementação encadeada do LAPACK (por exemplo, MKL ou mesmo ATLAS), LD_PRELOADse necessário.
precisa
Sim obrigado, estou atrás de um algoritmo de matriz densa. Eu esclareci isso agora na pergunta. Investigarei as implementações encadeadas do LAPACK, como você sugere. Isso seria preferível, se possível. Obrigado pelo ponteiro.
Bogdanovist
O IDL possui bibliotecas de álgebra linear multithread há pelo menos os últimos 3 ou 4 anos. Acredito que LA_INVERT será executado multithread em qualquer versão recente do IDL. Note-se que há uma opção de configuração que controla quantos threads estão disponíveis (e provavelmente é definido como único segmento por padrão)
Brian Borchers
Obrigado Brian. Eu verifiquei a documentação do IDL7 e IDL8 e nem sugiro que LA_INVERT use o pool de threads. Também testei que, quando defino o IDL para inverter matrizes grandes por um tempo, apenas 1 dos 8 núcleos é usado (de acordo com o monitor do sistema). Eu verifiquei as configurações de! CPU e TPOOL_NTHREADS é igual a HW_NCPU que, de acordo com a documentação, significa que as rotinas encadeadas devem poder usar o número de núcleos fisicamente disponíveis. Também tentei reduzir o TPOOL_MIN_ELTS para aplicar o multithreading em LA_INVERT sem sorte. Mais alguma ideia?
Bogdanovist
Qual o tamanho das suas matrizes? O IDL não usará multithreading, a menos que as matrizes sejam grandes o suficiente. Se você tiver matrizes muito pequenas (digamos, menos que N = 1000), não haverá vantagens de desempenho em multithread e o IDL não usará as rotinas multithread. Também existem definições de configuração para este ponto de corte. Não uso o IDL há vários anos, mas estou realmente surpreso que isso não esteja funcionando para você - sugiro perguntar em um fórum específico do IDL. O comp.lang.idl = pvwave usenet gr é um bom lugar para procurar.
precisa saber é o seguinte

Respostas:

5

Em vez de criar o seu próprio, sugiro que você dê uma olhada nas implementações paralelas robustas e eficientes existentes, como o PLASMA .

Se você está procurando apenas algoritmos para se implementar, a maioria das rotinas está documentada excessivamente na seção "Documentação" desse site.

Pedro
fonte