Uso Intel MKL para BLAS y uso el Intel MKL Link Line Advisor para obtener ayuda con las opciones de línea de comandos.
El asesor proporciona opciones para la biblioteca dinámica estática, dinámica y única. que significan estas expresiones?
Ha habido numerosas publicaciones en SO con respecto a esto, pero todas se han centrado en desarrollar software en lugar de códigos científicos / matemáticos. ( Este fue especialmente útil)
- ¿Cómo son estos términos relevantes para la computación paralela?
- ¿Es uno mejor que el otro? (Sé que mejor debería definirse con mayor precisión, pero no sé cómo hacerlo a partir de ahora)
- ¿Qué se usa más comúnmente y por qué?
- ¿Qué debe tener en cuenta el programador al vincular?
-mkl
bandera que debería eliminar la necesidad de usar el asesor de línea de enlace en la mayoría de los casos.-static
y lo vincula dinámicamente si no lo hace. Sin duda, es mucho mejor desde el punto de vista de la facilidad de uso, en cualquier caso.Respuestas:
Los términos enlace estático y enlace dinámico no están directamente relacionados con la computación paralela, aunque se sabe desde hace bastante tiempo que la carga dinámica (a diferencia de la carga de un ejecutable compilado estáticamente) no escala bien en los sistemas de archivos de red debido a la gran carga carga de metadatos causada por el cargador dinámico que busca rutas de carga para bibliotecas de destino.
Es difícil hacer declaraciones generales sobre si las bibliotecas estáticas o dinámicas son mejores en informática de alto rendimiento. Ciertamente, para la mayoría de las aplicaciones de supercomputación, es más simple y se prefiere vincular estáticamente. ¿Por qué es esto? En la generación actual de supercomputadoras, generalmente solo se ejecuta un trabajo por nodo, lo que reduce en gran medida los beneficios del consumo de memoria reducido debido a las bibliotecas compartidas. Además, los códigos informáticos científicos tienden a no ser muy sofisticados en términos de características de lenguaje o diseño de programas, y rara vez hacen uso de características de lenguaje que requieren carga dinámica (como módulos de complementos). Las bibliotecas dinámicas tienen la dificultad adicional de ser mucho menos portátiles en los sistemas operativos que las bibliotecas estáticas.
Como consecuencia de todo esto, la mayoría de los sistemas HPC usan compilación estática cuando están disponibles. Las bibliotecas estáticas se consideran más rápidas, más fáciles de instalar y mantener y, en general, más robustas. Los códigos HPC basados en Python son una de las excepciones a esto, pero aún están sujetos a los problemas de rendimiento asociados con la carga dinámica (¡varios usuarios en scicomp están trabajando en este problema ahora mismo!).
Cuando elija la vinculación estática frente a la dinámica, debe considerar cómo y dónde se implementará su código, si es probable que las bibliotecas subyacentes cambien o se muevan, y las características de rendimiento de su sistema de archivos de red. También debe evaluar si necesita enlaces dinámicos, ya sea a través de una dependencia de la biblioteca o para interoperar con un lenguaje de script dinámico como Python.
Biblioteca dinámica única es un término específico de Intel. Se refiere al empaquetado de sus bibliotecas dinámicas en una única metabiblioteca para simplificar el proceso de vinculación. Si va a utilizar la vinculación dinámica con las bibliotecas de Intel, este formulario probablemente se prefiere a menos que esté haciendo algo complicado.
fuente
Dynamic : 0:42.92
Static : 0:42.93
Single Dynamic : 0:42.97
promedió más de 1000 valores.