O que significa vinculação estática, dinâmica e dinâmica única?


9

Uso o Intel MKL para BLAS e o Intel MKL Link Line Advisor para obter ajuda com as opções da linha de comando.

O orientador fornece opções para Biblioteca Dinâmica Estática, Dinâmica e Única. O que esses termos significam?

Houve vários posts sobre SO sobre isso, mas todos eles foram focados no desenvolvimento de softwares em vez de códigos científicos / matemáticos. ( Este foi especialmente útil)

  • Como esses termos são relevantes para a computação paralela?
  • Um é melhor que o outro? (Eu sei que melhor precisaria ser definido com mais precisão, mas não sei como a partir de agora)
  • O que é usado com mais frequência e por quê?
  • O que o programador precisa considerar ao vincular?

Apenas como uma observação, se você ainda não viu, os compiladores Intel mais recentes (acho que a versão 11 e mais recentes) fornecem o -mklsinalizador que deve remover a necessidade de usar o consultor de linha de link na maioria dos casos.
Aesin 19/03/12

@ Aesin, eu estava pensando. É a maneira mais ideal de vincular?
Inquérito

Infelizmente, não sei - ainda não testei e o manual não detalha o que está fazendo ou como se combina com outras opções. Ele vincula estaticamente o MKL se você especificar -statice o vincula dinamicamente, se não o fizer. É certamente muito melhor do ponto de vista da facilidade de uso, em qualquer caso.
Aesin 19/03/2012

Respostas:


14

Os termos vínculo estático e vínculo dinâmico não estão diretamente relacionados à computação paralela, embora já se saiba há algum tempo que o carregamento dinâmico (em vez de carregar um executável estaticamente compilado) não é escalável nos sistemas de arquivos de rede devido ao alto carga de metadados causada pelo carregador dinâmico que procura caminhos de carregamento para bibliotecas de destino.

É difícil fazer afirmações gerais sobre se as bibliotecas estáticas ou dinâmicas são melhores na computação de alto desempenho. Certamente, para a maioria dos aplicativos de supercomputação, é mais simples e preferível vincular estaticamente. Por que é isso? Na geração atual de supercomputadores, geralmente há apenas uma tarefa em execução por nó, o que reduz fortemente quaisquer benefícios do consumo reduzido de memória devido a bibliotecas compartilhadas. Além disso, os códigos de computação científica tendem a não ser muito sofisticados em termos de recursos de linguagem ou design de programa e raramente usam recursos de linguagem que exigem carregamento dinâmico (como módulos de plug-in). As bibliotecas dinâmicas têm a dificuldade adicional de serem muito menos portáteis nos sistemas operacionais do que as bibliotecas estáticas.

Como conseqüência de tudo isso, a maioria dos sistemas HPC usa compilação estática quando disponível. As bibliotecas estáticas são vistas como mais rápidas, mais fáceis de instalar e manter e geralmente mais robustas. Os códigos HPC baseados em Python são uma das exceções, mas ainda estão sujeitos aos problemas de desempenho associados ao carregamento dinâmico (vários usuários do scicomp estão atualmente trabalhando nesse problema!).

Ao escolher a vinculação estática versus a vinculação dinâmica, é necessário considerar como e onde seu código será implantado, se as bibliotecas subjacentes provavelmente serão alteradas ou movidas e as características de desempenho do seu sistema de arquivos de rede. Você também deve avaliar se precisa de vinculação dinâmica, por meio de uma dependência de biblioteca ou para interoperar com uma linguagem de script dinâmico, como Python.

Biblioteca dinâmica única é um termo específico da Intel. Refere-se ao empacotamento de suas bibliotecas dinâmicas em uma única meta-biblioteca para simplificar o processo de vinculação. Se você usará vínculo dinâmico com as bibliotecas da Intel, esse formulário provavelmente será o preferido, a menos que você esteja fazendo algo complicado.


Excelente resposta! Só mais uma coisa: eu sei que a vinculação dinâmica seria desnecessária e a escolha será entre dinâmica estática e dinâmica única. Você diz que devo escolher o último, a menos que esteja fazendo algo complicado (o que não estou). Então, devo vincular usando o Single Dynamic? [FWiW, estou trabalhando nos métodos do subespaço de Krylov]
Inquérito

Desculpa! Eu quis dizer que você deve usar estática por padrão, mas prefere dinâmica única em vez de dinâmica.
Aron Ahmadia 18/03/12

Fiz alguns testes comparativos e Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97constatei : uma média de mais de 1000 valores.
Inquérito

11
Vale a pena notar que em alguns sistemas HPC é necessário vincular estaticamente - nos sistemas BlueGene / L, este é o caso, por exemplo, porque o sistema operacional reduzido nos nós de computação não oferece suporte à vinculação dinâmica.
Aesin 19/03/12

11
Estou um pouco confuso com a sua declaração: "Na geração atual de supercomputadores, geralmente há apenas um trabalho em execução por nó, o que reduz fortemente quaisquer benefícios do consumo reduzido de memória devido a bibliotecas compartilhadas". Você quis dizer que existe apenas um processo por nó? Não tenho certeza de como um trabalho por nó afeta a situação. Ao vincular estaticamente cada processo, uma cópia completa do executável será armazenada, o que pode ser significativo à medida que os núcleos por processador crescem. A vinculação dinâmica exigirá apenas uma cópia da biblioteca dinâmica por espaço de memória compartilhado.
andybauer
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.