2008-09-26 28 views
14

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++

+0

¿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? –

+0

Me refiero a los servidores grandes – axs6791

Respuesta

8

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)
1

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.

2

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.

2

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.

+1

el enlace está roto :( – Tom

+0

Gracias Tom. Afortunadamente el artículo DDJ es útil. –

+0

El enlace está en el archivo: https://web.archive.org/web/20090421155750/http://ubiety.uwaterloo .ca/~ tveldhui/papers/Expression-Templates/exprtmpl.html –

4

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.)

1

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

2

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).

Cuestiones relacionadas