Con el rápido desarrollo de compiladores de C++, especialmente los de intel, y la capacidad de aplicar directamente SIMD funciones en C/C++ códigos, ¿ Fortran todavía tienen ninguna ventaja real en el mundo de los cálculos numéricos?

Yo soy de un applied maths, mi trabajo implica una gran cantidad de análisis numérico, cálculo, optimizaciones y tal, con un sentido estrictamente definidos de rendimiento-requisito.

Apenas sé nada acerca de Fortran, tengo algo de experiencia en C/CUDA/matlab(si usted se considera a este último como un lenguaje de computadora para empezar), y mi tarea diaria consiste en el análisis de datos muy grandes (por ejemplo, 10 GB-matriz grande), y parece que el programa de pasar al menos 2/3 de su tiempo en la memoria de acceso (es por eso que me envían parte de su trabajo a la GPU), hacer que la gente piense que vale la pena los efectos para mí para tratar la rutina de fortran, al menos en algunos de rendimiento críticas de parte de mis códigos para mejorar el rendimiento de mi programa?

Debido a la complejidad y las cosas se deben hacer involucrados no, sólo voy a ir a esa rutina si sólo hay un importante beneficio en el rendimiento de ahí, gracias de antemano.

  • Fortran beneficios de no haber suavizado, por lo que puede optimizar mucho más agresiva. En C99 puede lograr algo similar con restrict, a pesar de que no es parte de C++. Por otro lado, C++ permite el uso de la expresión plantillas y alineaciones. Así que la respuesta es que «depende de lo que están haciendo», supongo.
  • Algunas preguntas similares: Es Fortran más rápido que C?, ¿Qué ventajas Fortran actuales tienen más de C++moderno?, ¿cuánto mejor son los compiladores de Fortran ¿de verdad?, no se si sería un duplicado exacto, aunque.
  • ¿Qué se entiende por «programa de pasar al menos 2/3 de su tiempo en la memoria de acceso?» ¿Eso significa que 2/3 de tiempo de carga de un 10 GB de la matriz? O ¿quiere decir que su tasa de errores de caché es demasiado alto? O su programa es el ancho de banda de memoria limitada?
  • Porque el programa tiene que paga un montón de visitas a algunos de 10GB grandes matrices para cada iteración, así que sí, puede ser la memoria de ancho de banda limitado o de alto caché-miss o ambos (algunos de los trabajos implica al azar de la memoria de acceso, y sí, sé que la forma de acelerar por reordenar los datos, pero no será un enorme impacto en el rendimiento en otros lugares, entonces, simplemente me impide incluso tratando de que), como por pura cálculos, simd de las características intrínsecas se lleva la mayor parte del trabajo, mientras que la gpu también ayuda un poco, así que no sé si fortran puede hacer algo mejor.
  • Trate de enviar más de ella a la GPU.
InformationsquelleAutor user0002128 | 2012-10-25

5 Comentarios

  1. 57

    Fortran tiene estrictas aliasing semántica en comparación con C++ y ha sido agresivamente en sintonía para numérica rendimiento durante décadas. Los algoritmos que utiliza la CPU para trabajar con matrices de datos con frecuencia, tienen el potencial de beneficiarse de un Fortran aplicación.

    Los lenguajes de programación de penaltis no debe ser tomado demasiado en serio, pero de los 15 puntos de referencia, Fortran ocupa el #1 para la velocidad en cuatro de ellos (por Intel Q6600 un núcleo), más que cualquier otro idioma. Se puede ver que los puntos de referencia donde Fortran brilla son las pesadamente valores numéricos:

    Contraejemplo:

    • k-nucleótidos 500% más lento (este punto se centra en la más sofisticada de las estructuras de datos y procesamiento de cadena, que no es Fortran de la fuerza)

    También se puede ver un resumen de la página «cuántas veces más lento» que muestra que, de todas las implementaciones, el código de Fortran es, en promedio, más cercana a la más rápida implementación para cada punto de referencia — aunque el cuantil bares son mucho más grande que el de C++, lo que indica Fortran es inadecuado para algunas de las tareas que C++ es bueno, pero usted debe saber que ya.

    Así, las preguntas que usted necesita preguntarse a sí mismo son:

    1. Es la velocidad de esta función tan importante que reimplementing en Fortran es digno de mi tiempo?

    2. Es el rendimiento tan importante que mi inversión en el aprendizaje de Fortran va a pagar?

    3. Es posible el uso de una biblioteca como ATLAS, en lugar de escribir el código de mí mismo?

    Responder a estas preguntas requieren un conocimiento detallado de su base de código y modelo de negocio, así que no puedo responder a esas. Pero sí, Fortran implementaciones son a menudo más rápido que C++ implementaciones.

    Otro factor en su decisión es la cantidad de código de ejemplo y de la cantidad de implementaciones de referencia disponibles. Fortran fuerte de la historia significa que hay una gran cantidad de código numérico disponible para su descarga e incluso con un viaje a la biblioteca. Como siempre, usted tendrá que tamizar a través de él para encontrar las cosas buenas.

    • La comparación de estos dos idiomas se basa en la tanda de penaltis es realmente deficiente. Por lo menos uno debe utilizar el mismo proveedor.
    • Sí, es imperfecto. No creo que hay una manera de comparar los idiomas que no está defectuoso.
    • Como digo, no se pueden comparar manzanas y naranjas, pero g++ con gfortran y ifort con intel c++.
    • Por CIERTO, que probablemente reducirá la ventaja de la velocidad de Fortran sobre C++ y todavía no me deje de preferir Fortran, porque la verdadera ventajas se encuentran en otra parte. El lenguaje de la sencillez y la buena sintaxis de las operaciones de matrices.
    • FYI, intel compilador de c ha comenzado a apoyar la matriz de notaciones como parte de la cilk extensión. El sencillo, bastante oneliner código es ahora posible.
    • Sí, pero atc es esencialmente un nuevo idioma.
    • Muchas personas decir que c++ es más lento que el fortran especialmente para numérica de programación. Pero el uso de gfortran y g++, que siempre se las arregló para optimizar mi código c++ a ser al menos tan rápido como mi código de fortran. He encontrado que la principal razón por la que a veces c++ es más lento es el compilador de la asunción acerca de puntero de aliasing que se puede curar simplemente por restringir la palabra clave.
    • Sí, eso es exactamente. Pero en C++ no tiene restringir la palabra clave, no es parte de la norma.
    • Bonita respuesta, pero le habría gustado ver C++, Fortran vs comparaciones complementa con C vs Fortran comparaciones también.

  2. 16

    La respuesta completa y correcta a su pregunta es, «sí, Fortran tiene algunas ventajas».

    C++ también tiene algunos de los diferentes ventajas. Para hacer Python, R, etc, etc. Son idiomas diferentes. Es más fácil y rápido de hacer algunas cosas en un idioma, y algunos que en otros. Todos son ampliamente utilizados en sus comunidades, y por muy buenas razones.

    Cualquier otra cosa, en la ausencia de preguntas más específicas, es sólo ruido y el lenguaje de la guerra-cebo, que es la razón por la que he votado a cerca de la pregunta y espero que otros también lo harán.

  3. 8

    Fortran es naturalmente adecuado para la programación numéricas. Usted tiende a tener una gran cantidad de números en tales programas, normalmente dispuestas matrices. Las matrices son ciudadanos de primera clase en Fortran y es a menudo bastante recta hacia adelante para traducir numérica de los granos de Matlab en Fortran.
    Con respecto a las potenciales ventajas de rendimiento ver las otras respuestas, que cubren esta bastante bien. La línea de base es, probablemente, puede crear altamente eficiente aplicaciones numéricas con la mayoría de los lenguajes compilados hoy en día, pero usted puede saltar a través de algunos bucles para llegar allí. Fortran fue cuidadosamente diseñado para permitir que el compilador de reconocer la mayoría de las manchas de optimizaciones, debido a las características del lenguaje. Por supuesto, también puede escribir arbitrarias lento código con cualquier lenguaje compilado, incluyendo Fortran.
    En cualquier caso, usted debe elegir las herramientas adecuadas. Fortran trajes de aplicaciones numéricas, C el sistema de trajes relacionados con el desarrollo. En una última observación, el aprendizaje Fortran básicos no es difícil, y siempre vale la pena echar un vistazo a otros idiomas. De esta forma se abre un punto de vista diferente sobre los problemas que queremos resolver.

  4. 8

    También vale la pena mencionar es que el Fortran es mucho más fácil de dominar que C++. De hecho, Fortran tiene una menor lenguaje de especificación de C sin formato y la sintaxis es posiblemente más simple. Usted puede aprender muy rápidamente.

    Lo que significa que si usted está interesado sólo en el aprendizaje de C++ o Fortran para resolver un problema específico que tienen en el momento (es decir, para acelerar los cuellos de botella en algo que usted escribió en un lenguaje de creación de prototipos), Fortran podría dar un mejor retorno sobre la inversión.

  5. 0

    Código de Fortran es mejor para la matriz y el vector de tipo de operación en general. Pero usted también puede producir un rendimiento similar con c/c++ de código por el paso de consejos/sugerencias para el compilador para producir una calidad similar vector de instrucciones. Una opción que me dio un buen impulso fue no asumir la memoria de suavizado entre las variables de entrada que son objetos de la matriz. De esta manera, el compilador puede agresivamente hacer bucle interno de desenrollar y canalización para la ILP donde se pueden solapar las cargas y la operación del almacén a través de bucle de iteración con derecho prefetches.

Dejar respuesta

Please enter your comment!
Please enter your name here