Estoy buscando libros o recursos en línea que detallen las técnicas de programación para computación de alto rendimiento usando C++.Recursos para computación de alto rendimiento en C++
Respuesta
prácticamente todo el código HPC del que he oído hablar es para resolver sistemas de ecuaciones lineales o FFT. Heres algunos enlaces para empezar te al menos en las bibliotecas usadas:
- BLAS - conjunto estándar de rutinas de álgebra lineal - cosas como la multiplicación de matrices
- LAPACK - conjunto estándar de rutinas de álgebra lineal de alto nivel - cosas por el estilo LU decomp.
- ATLAS - Optimizado aplicación BLAS
- FFTW - Optimizado aplicación FFT
- PBLAS - Blas de procesadores distribuidos
- SCALAPACK - distribuido implementación LAPACK
- MPI - Biblioteca Comunicación para sistemas distribuidos.
- PETSc - no lineal escalable y solucionadores lineales (user-extensible, interfaz a muy por encima)
Eche un vistazo a The ADAPTIVE Communication Environment (ACE). Es una biblioteca de plantillas y objetos para aplicaciones de alto rendimiento en C++. Tiene grandes primitivas multiplataforma para enhebrar, redes, etc.
Lo primero podría estar leyendo acerca de MPI(Message Passing Interface) que es el estándar de facto en las interconexiones de nodos HPC.
El Trilinos conjunto de bibliotecas y paquetes ofrecen una amplia gama de bibliotecas de middleware para HPC incluyendo, solucionadores lineales iterativos dispersos; solucionadores no lineales; solucionadores eigen; ODE & Integradores DAE que incluyen análisis de sensibilidad; optimización (caja invasiva y caja negra); interfaces de elementos finitos; interfaces de malla; precondicionadores; etc. Todos estos paquetes están diseñados con técnicas de C++ bastante modernas (hay API de Python, así como C y Fortran). Se utilizaron en simulaciones paralelas de gran escala (5000 + CPU) de consecuencias excepcionales (diseño de armas nucleares) con gran éxito. Estos paquetes ofrecen un gran conjunto de capacidades que tienen un nivel mucho más alto que BLAS, etc.
A pesar de tener más de 14 años, el trabajo pionero de Expression Templates todavía se considera como uno de los trabajos de C++ más excepcionales en años. Rápido, eficiente, seguro ... He usado las técnicas y son realmente extraordinarias.
Editar: En caso de que el enlace anterior queda rota, aquí hay un alternate reference for Expression Templates. Este artículo de DDJ cita el trabajo original de Veldhuizen.
el enlace está roto :( – Tom
Gracias Tom. Afortunadamente el artículo DDJ es útil. –
El enlace está en el archivo: https://web.archive.org/web/20090421155750/http://ubiety.uwaterloo .ca/~ tveldhui/papers/Expression-Templates/exprtmpl.html –
Aunque no es FOSS, las bibliotecas Intel IPP y MKL realmente pueden ahorrarle mucho tiempo (tanto en desarrollo como en tiempo de ejecución) si necesita realizar alguna de las operaciones admitidas por estas bibliotecas (por ejemplo: procesamiento de señales, procesamiento de imágenes, matemáticas matriciales). Por supuesto, depende de su plataforma si puede aprovechar los beneficios de ellos.
(No, no trabajo para Intel, pero soy un cliente feliz de ellos.)
No importa lo que escriba, y cuánto diseñe para el rendimiento desde el principio, las posibilidades son bastante buenas, se beneficiará de la optimización del rendimiento. Por lo general, cuanto más grande sea el programa, más se beneficiará. THIS es una manera simple y efectiva de hacer esa afinación. Se basa en un "muestreo profundo", una técnica que proporciona precisión en el diagnóstico y minimiza la medición.
También podría mirar a http://en.wikipedia.org/wiki/Performance_analysis#Simple_manual_technique
Mira la Eigen Vector/Matrix library. La API es muy elegante, y los programas resultantes son extremadamente rápidos (debido a la vectorización explícita para las arquitecturas SSE2).
Alta escalabilidad: crear sitios web más grandes, más rápidos y más confiables.
Y también:
- 1. Análisis XML de alto rendimiento en C++
- 2. C/C++ versus Java/C# en aplicaciones de alto rendimiento
- 3. C# ==> ¿Servidor de alto rendimiento?
- 4. Arrays multidimensionales C++ de alto rendimiento
- 5. Biblioteca matemática de alto rendimiento para .NET/C# y Java
- 6. Alto Rendimiento Desarrollo
- 7. Sitio de alto rendimiento
- 8. registro multiproceso para aplicaciones de alto rendimiento
- 9. (Re) Comenzando con C++ (para computación científica)
- 10. Mapa hash C/C++ de super alto rendimiento (tabla, diccionario)
- 11. Consejos/técnicas de alto rendimiento sockets de servidor de C#
- 12. Conversión de doble a char * en C++ con alto rendimiento
- 13. Mensajería JMS de alto rendimiento
- 14. Recursos matemáticos para programadores C/C++
- 15. ¿Diferencia entre computación en la nube y computación distribuida?
- 16. Alto rendimiento latencia baja C++ cadena personalizada clase
- 17. visualizador de PDF de alto rendimiento para web
- 18. Calentamiento de aplicaciones Java de alto rendimiento
- 19. inserto de hibernación de alto rendimiento
- 20. gráficos de alto rendimiento wpf 2d
- 21. consulta por lotes JDBC para un alto rendimiento
- 22. ¿Filtro de floración moderno y de alto rendimiento en Python?
- 23. Cronómetro de alto rendimiento frente a Cronómetro
- 24. DDD - Cómo implementar repositorios de alto rendimiento para buscar
- 25. uso óptimo de CPLEX Java para alto rendimiento
- 26. Recursos para I18N en C++
- 27. Libros sobre sitios web de alto rendimiento y escalabilidad.
- 28. viabilidad de la biblioteca de registro C++ para la captura asincrónica de datos de alto rendimiento?
- 29. Libros recomendados de multiprocesamiento/computación paralela para C# 4.0
- 30. plataforma de computación reversible
¿Quiere decir un alto procesamiento en grandes servidores, o reducir el consumo de recursos en máquinas pequeñas (más pequeñas) o PC? –
Me refiero a los servidores grandes – axs6791