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?
-mkl
sinalizador que deve remover a necessidade de usar o consultor de linha de link na maioria dos casos.-static
e o vincula dinamicamente, se não o fizer. É certamente muito melhor do ponto de vista da facilidade de uso, em qualquer caso.Respostas:
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.
fonte
Dynamic : 0:42.92
Static : 0:42.93
Single Dynamic : 0:42.97
constatei : uma média de mais de 1000 valores.