En mi programa de doctorado en ciencias computacionales, estamos trabajando casi exclusivamente en C ++ y Fortran. Parece que algunos profesores prefieren uno sobre el otro. Me pregunto cuál es «mejor» o si uno es mejor que el otro en determinadas circunstancias.

Comentarios

  • Una mezcla de un alto y el lenguaje de bajo nivel es mejor que usarlo exclusivamente, en mi opinión. P.ej. Utilizo Python + C ++.
  • Las respuestas a esta pregunta serán casi puramente subjetivas y, por lo tanto, ‘ no estoy seguro de que esta pregunta sea apropiada.

Respuesta

Como suele ocurrir, la elección depende de (1) el problema que está tratando de resolver, (2) el habilidades que tienes, y (3) las personas con las que trabajas (a menos que sea un proyecto en solitario). Dejaré (3) a un lado por el momento porque depende de la situación individual de cada uno.

Dependencia del problema: Fortran sobresale en el procesamiento de matrices. Si su problema puede describirse en términos de estructuras de datos simples y en matrices particulares, Fortran está bien adaptado. Los programadores de Fortran terminan usando matrices incluso en casos no obvios (por ejemplo, para representar gráficos). C ++ es más adecuado para estructuras de datos complejas y altamente dinámicas.

Dependencia de habilidades: se necesita mucha más experiencia en programación para escribir buenos programas en C ++ que para escribir buenos programas de Fortran. Si comienza con poco programa Con experiencia y solo tiene un tiempo limitado para aprender ese aspecto de su trabajo, probablemente obtenga un mejor retorno de la inversión aprendiendo Fortran que aprendiendo C ++. Suponiendo, por supuesto, que su problema se adapta a Fortran.

Sin embargo, la programación es más que solo Fortran y C ++. Recomendaría a cualquiera que se dedique a la ciencia computacional que comience con un nivel dinámico alto -lenguaje de nivel como Python. Recuerde siempre que su tiempo es más valioso que el tiempo de la CPU.

Comentarios

  • » Recuerde siempre que ¡su tiempo es más valioso que el tiempo de la CPU! » Como alguien que trabaja en HPC, no estoy de acuerdo con esa parte; todo lo demás es perfecto.
  • » ¡Recuerde siempre que su tiempo es más valioso que el tiempo de la CPU! » Como alguien que trabaja en investigación científica, yo no ‘ estoy más de acuerdo con esa parte.
  • » Recuerde siempre que ¡Tu tiempo es más valioso que el tiempo de la CPU! » – Me ‘ me gustaría invertir mis dos centavos, usando varios cientos de nodos, cada uno con más de 10 núcleos para ejecutar algún programa durante varias semanas puede interpretarse como un desperdicio horrible de un recurso muy valioso, si un par de semanas más pudieran producir un código que se ejecuta en solo un par de días. Esos clústeres de HPC son un recurso común raro y costoso.
  • » ¡Recuerde siempre que su tiempo es más valioso que el tiempo de la CPU! «, codifique durante una semana pero se ejecute durante un mes, ¡esto ‘ es bastante habitual, señor!
  • » ¡Recuerde siempre que su tiempo es más valioso que el tiempo de la CPU! «, ¡prefiero codificar durante un mes y ejecutarlo en una semana! – se puede hacer más una vez que se escribe el código y otros encontrarán el código que usted escribe también más útil.

Respuesta

Creo que tanto C ++ como Fortran son lo suficientemente buenos y funcionan bien.

Sin embargo, creo que Fortran es mejor para la computación científica numérica , para algoritmos que se pueden expresar usando matrices y no necesitan otras estructuras de datos sofisticadas, por lo que en campos como diferencias / elementos finitos, solucionadores de PDE, cálculos de estructura electrónica. Fortran es un lenguaje de dominio específico. En particular, creo que es más fácil escribir rápido programas en Fortran que en C ++, por un científico (no necesariamente un experto en informática).

C ++ es un lenguaje de propósito general, por lo que se puede expresar cualquier algoritmo en él, y definitivamente es mejor para algoritmos que no se pueden expresar usando arreglos, desde el campo HPC probablemente algunos gráficos, generadores de malla, manipulación simbólica, etc.

También es posible escribir arreglos y algoritmos en C ++, pero en mi experiencia, requiere mucho más conocimiento de la informática y en general más trabajo (es decir, uno necesita crear o reutilizar clases para la manipulación de matrices y manejar la gestión de la memoria a mano o usando alguna biblioteca como Teuchos de Trilinos). Los no expertos tienden a escribir programas Fortran bastante buenos, pero programas C ++ horribles (hablando de mi propia experiencia).

Descargo de responsabilidad: personalmente me gusta mucho Fortran y lo prefiero a C ++ para la computación numérica. He pasado más de 2 años programando en C ++ diariamente, y casi un año programando diariamente en Fortran moderno (en el área de elementos finitos). Yo también uso mucho Python y Cython.

Comentarios

  • Uno para la primera respuesta que se equilibra. Creo que C ++ y Fortran no son las únicas posibilidades en la HPC contemporánea. Creo que es bueno conocer los puntos fuertes y débiles cuando te decides por Fortran, C ++ o Python (o lo que quieras). He visto 20.000 líneas de Fortran en un solo archivo, cultivadas orgánicamente durante algunas décadas. Personalmente, no lo usaría para otra cosa que no sea la computación de matriz pesada aislada. Ni siquiera por nada relacionado con la producción. Hasta ahora, para un comentario sesgado.
  • No pude ‘ estar más en desacuerdo con esta respuesta. Nuestro código de elementos finitos no habría sido posible escribir en Fortran. De hecho, comenzó hace 15 años como una mezcla de C simple y Fortran (este último es para las partes numéricamente intensivas del método), y gradualmente pasó a C puro y luego a C ++ en el transcurso de varios años. El código se volvió consistentemente más corto, más rápido y más fácil de entender, y fue más capaz después de cada iteración. Estoy de acuerdo con otros que señalan que C ++ te da mucha cuerda para dispararte. Elija el idioma con el que ‘ se sienta más cómodo.
  • Bill, ¿usó Fortran moderno (90 y adiciones posteriores?). Esto es muy importante (debería haber sido más explícito en mi respuesta sobre esto). Por supuesto, » 20.000 líneas de Fortran «, o f77 generalmente no es mejor que C ++ bien escrito.
  • @ OndřejČert í k: Creo que si crees que los programas modernos de elementos finitos usan » simple » estructuras de datos, entonces no ha ‘ t examinado ninguna de ellas recientemente. Intente implementar elementos finitos adaptativos, métodos hp o multigrid en mallas no estructuradas utilizando estructuras de datos simples. Bill da en el clavo y creo que puedo hablar en su nombre al decir que el uso de » moderno Fortran » habría generado poco más que un pequeño diferencia.
  • @WolfgangBangerth, consulte, por ejemplo, Phaml ( math.nist.gov/phaml ) para una implementación de Fortran de prácticamente todo lo que que mencionaste.

Responder

Yo «también estoy tirando mis dos centavos en algo tarde, pero yo» Acabo de ver este hilo y siento que, para la posteridad, hay algunos puntos que necesitan urgentemente ser aclarados.

Note a continuación que hablaré de C y no de C ++. ¿Por qué? Bueno, de lo contrario, es fácil comparar un lenguaje orientado a objetos de tipo dinámico completo con algo tan estático como Fortran. Sí, algunas implementaciones modernas de los últimos estándares de Fortran pueden hacer más que eso, pero muy pocas personas en realidad usarlos, por lo que cuando hablamos de Fortran, pensamos en lenguaje simple, estático e imperativo. Ahí es donde C también está, así que reemplazaré C con C ++ para lo siguiente.

Primero de Todos, cualquier discusión sobre Fortran / C que tiene mejores compiladores es discutible. Los compiladores dedicados de C / Fortran son cosa del pasado. Tanto gcc / gfortran como icc / ifc son simplemente diferentes interfaces del mismo back-end, es decir, su programa será transformado en una descripción abstracta por el front-end y luego optimizado y ensamblado por el back-end. Si escribe, semánticamente, el mismo código en Fortran o en C, el compilador, en ambos casos, producirá el mismo ensamblado que se ejecutará igual de rápido.

Esto ahora me lleva a mi segundo punto: ¿por qué todavía vemos diff erences? El problema es que la mayoría de las comparaciones las hacen los programadores de Fortran que intentan algo en C o viceversa. ¿Alguna vez has notado que la mayoría de los autores o poetas prefieren escribir en su lengua materna? ¿Le gustaría escribir poesía en un idioma en el que no se sienta completamente seguro o en casa? Por supuesto que no … Yo mismo considero que C es mi lenguaje de programación «nativo». Sin embargo, también pasé tres años trabajando en un grupo que usaba solo Fortran, en el que he logrado cierto nivel de fluidez. Sin embargo, nunca escribiría nada por mi cuenta en Fortran ya que «me siento más cómodo con C y, como consecuencia, el código resultante será mejor , como sea que lo defina.

Así que la principal diferencia está en el programador, no en el lenguaje. ¿Entonces no hay diferencias? Bueno, no del todo. Aquí hay algunos ejemplos:

  • SIMD: Ya sea SSE, SSE3 o AltiVec, si desea usarlos en Fortran, es mejor que espere y ore para que el compilador adivine exactamente lo que quiere y lo hace. Buena suerte. En C generalmente tiene funciones intrínsecas para cada arquitectura o, más recientemente, tipos de vectores SIMD generales en gcc . La mayoría de los compiladores de Fortran solo usarán instrucciones SIMD para desenrollar bucles, pero si tiene un kernel que funciona con vectores cortos de datos de una manera no obvia, es muy probable que el compilador no lo vea.

  • Diferentes arquitecturas de hardware: toda la arquitectura CUDA se basa en kernels en C. Sí, Portland Group ahora tiene una CUDA también es compatible con el compilador de Fortran , pero es comercial y, lo más importante, no es de NVIDIA. Lo mismo ocurre con OpenCL, para el cual lo mejor que pude encontrar es un proyecto reciente que solo admite algunas llamadas básicas.

  • Programación en paralelo: Sí, tanto MPI como OpenMP funcionan bien con C y Fortran. Sin embargo, si desea un control real de sus subprocesos, es decir, si tiene un cálculo de memoria compartida completamente dinámico, se perderá con Fortran. En C tiene los subprocesos estándar que, aunque no son cálidos ni difusos, todavía te ayudan a atravesar la tormenta. En general, la mayoría de los cálculos que dependen del acceso al sistema operativo, por ejemplo, subprocesos, procesos, sistema de archivos, etc., funcionan mejor con C. Ah, y no intentes hacer los tuyos networking con Fortran.

  • Facilidad de uso: Fortran está más cerca de Matlab que de C. Una vez que haya superado todas las diferentes palabras clave y cómo declarar variables, el resto del código se parece a Matlab, haciéndolo más accesible para los usuarios con experiencia de programación limitada.

  • Interoperabilidad: cuando crea una estructura en C, el diseño de los datos reales es sencillo y determinista. En Fortran, si utiliza matrices de punteros o datos estructurados, el diseño real de los datos depende en gran medida del compilador, no directamente. hacia adelante, y por lo general completamente indocumentado. Puede llamar a C desde Fortran y viceversa, pero no empiece a pensar que puede ser tan fácil pasar algo más que una matriz estática de uno a otro y viceversa.

Todo esto es algo un tanto geek, de bajo nivel, pero estamos hablando de Computación de alto rendimiento, ¿verdad? Si no está interesado en cómo explotar mejor el hardware subyacente paradigmas, es decir, implementar y / o desarrollar algoritmos que sean mejores para memoria compartida / distribuida, hilos, vectorización SIMD , GPU que usan SIMT, etc., entonces solo estás haciendo matemáticas en una computadora.

Esto se ha vuelto mucho más largo que todo lo que entendí, así que aquí tienes un resumen: un conjunto de mensajes de tipo:

  • Escribirá el mejor código que pueda en el idioma que usted conozca mejor.
  • No hay diferencia en la calidad del código producido por dos compiladores que usan el mismo back-end; somos nosotros quienes escribimos código incorrecto en un idioma u otro.
  • A pesar de sentirse más de bajo nivel, Fortran es una abstracción de alto nivel y no le permitirá acceder a ciertas características de hardware / SO directamente, por ejemplo SIMD, hilos, redes, etc …

Comentarios

  • Buena respuesta. Sin embargo, no ‘ creo que su comentario final sea necesariamente cierto. Yo ‘ soy un programador de C, pero obtienes acceso a cosas de bajo nivel en Fortran a través de buenas prácticas de programación. La forma ideal de utilizar cosas como operaciones SIMD es escribir código que lo sugiera fuertemente (bloqueando los bucles, por ejemplo) y dejar que el compilador lo haga por usted. Para enhebrar, simplemente use openMP (pthreads también se puede usar con un poco de trabajo adicional). Fortran tiene todas las cosas que mencionas que no ‘ t, solo en un nivel que le importa a su usuario típico: numérico.
  • @ Reid.Atcheson: Bueno , si bloquea todo de modo que el compilador lo detecte, funcionará automáticamente tanto en C como en Fortran. El problema es, sin embargo, ¿hasta qué punto quieres confiar en tu compilador? ¿Y por qué quiere tener que confiar en él en los casos en que sabe exactamente lo que quiere que se haga? OpenMP hace subprocesos, sí, pero por bloques. Puede engañarlo para que obtenga diferentes grupos de subprocesos para hacer cosas diferentes, pero eso es solo un mal uso de OpenMP. Los Pthreads para Fortran son simplemente envoltorios de las funciones C. Sin embargo, estoy de acuerdo en que Fortran es más fácil si ‘ no está en los detalles.
  • Seguro que no ‘ No obtendrá una eficiencia máxima del 99% si depende del compilador, pero puede acercarse fácilmente. Más allá de esto, debe usar intrínsecos o ASM en línea. Tienes que hacer concesiones en algún lugar para la eficiencia general del programador, que ‘ es la razón por la que existen los lenguajes de programación en primer lugar. En la etapa en la que en realidad estás lo suficientemente loco como para entrar en los detalles de los intrínsecos o ASM (lo he estado algunas veces), Fortran no es ‘ t una muleta. De todos modos, ‘ sabrías cómo vincular tu código ensamblado optimizado a mano.
  • @ Reid.Atcheson: Bueno, yo ‘ d argumenta que para aplicaciones HPC paralelas, puede terminar muy por debajo del 99% de eficiencia máxima … Y los tipos de vector gcc hacen que el uso de intrínsecos no sea un problema 🙂
  • @Pedro, Publicación brillante. Absolutamente brillante. Muchas gracias por postear.Lo encontré mientras buscaba aleatoriamente en hilos interesantes.

Respuesta

De mis 15 años de pensar en software científico : Si su código se ejecuta un 25% más rápido porque lo escribe en Fortran, pero le toma 4 veces más tiempo escribirlo (sin STL, dificultad para implementar estructuras de datos complejas, etc.), Fortran solo gana si gasta una fracción significativa de su día jugando con los pulgares y esperando que terminen sus cálculos. Dado que para casi todos lo más valioso es nuestro propio tiempo, la conclusión es la siguiente: use el lenguaje que le permita desarrollar, depurar y probar su código lo más rápido posible, ignorando dentro de lo razonable que puede ser más lento de lo posible si lo escribiste en Fortran.

Respuesta

Mi enfoque ha sido usar C ++ para todo menos los núcleos computacionales, que generalmente son los mejores escrito en asamblea; esto le compra todo el rendimiento del enfoque HPC tradicional pero le permite simplificar la interfaz, por ejemplo, sobrecargando núcleos computacionales como SGEMM / DGEMM / CGEMM / ZGEMM en una sola rutina, por ejemplo, Gemm. Claramente, el nivel de abstracción puede elevarse mucho más evitando punteros sin procesar y cambiando a clases opacas, pero es un buen primer paso.

Encuentro que la mayor desventaja de C ++ es abrumadoramente el aumento en el tiempo de compilación, pero, en mi experiencia, los ahorros en el tiempo de desarrollo lo compensan con creces. Otro inconveniente es que los compiladores de C ++ de los proveedores tienden a tener más errores que los compiladores de C y Fortran. En el último año, creo que me encontré con casi diez errores en los compiladores de C ++.

Dicho todo esto, creo que la eliminación de paquetes científicos escritos en lenguajes de bajo nivel (y Fortran) es la renuencia a exponer interfaces convenientes para estructuras de datos sofisticadas: la mayoría de las personas están satisfechas con la interfaz Fortran BLAS, ya que solo requiere punteros y dimensiones principales para describir matrices, pero pocas personas argumentarían que la interfaz habitual de resolución directa dispersa de Fortran de 40 enteros es algo cercano a lo conveniente (cf. UHM, SuperLU, PETSc y Trilinos).

En resumen, defiendo el uso de ensamblado para núcleos computacionales de bajo nivel, pero lenguajes de nivel superior para todo lo demás, especialmente cuando se opera en estructuras de datos no triviales.

Tenga en cuenta que esto La publicación resultó en esta comparación del rendimiento de C y Fortran en el kernel $ y: = \ alpha x + y $ .

Comentarios

  • ¿Por qué no ‘ t confiaría en un compilador C estándar con la optimización adecuada habilitada para compilar núcleos pequeños? En ese nivel de tamaño y complejidad del código, la diferencia en lo que un compilador podría sacar de él no está clara.
  • He hablado con varias personas que me han dicho que, incluso con el uso restringido apropiado, su Fortran era aún más rápido que su código C y / o C ++ para alguna operación como una transposición de matriz explícita. No digo ‘ que sea ‘ imposible hacer que el código C o C ++ sea tan rápido, pero que el compilador Fortran tiende a hacerlo un mejor trabajo.
  • Tengo la misma experiencia con la palabra clave » restrict » (mi código simple de Fortran era siempre un poco más rápido). Pero mi experiencia es limitada, y simplemente ‘ no tengo tiempo para invertir en comprender el ensamblaje generado por gcc. Así que simplemente uso Fortran, es ‘ simple y ‘ rápido.
  • @JackPoulson: el compilador El argumento es algo que escucho bastante de la comunidad de Fortran. Desafortunadamente, la mayoría de los compiladores, p. Ej. gcc o ifc / icc, use diferentes interfaces de idiomas para el mismo back-end. La maquinaria que realiza la optimización y la generación de código es idéntica y, por lo tanto, las diferencias en los resultados probablemente se deben a diferencias en la familiaridad del programador con el lenguaje subyacente …
  • Solo para dar un poco de perspectiva sobre la afirmación que se repite con frecuencia y que pocas veces se valida de que Fortran es más rápido en núcleos numéricos: Hace un tiempo notamos que el vector matriz disperso se multiplica en Trilinos ‘ El paquete Epetra era un 30% más lento que el del trato.II. El primero fue escrito en Fortran 77 directo, el último en C directo sin el uso de ‘ restrict ‘. Ambos tenían entre 10 y 15 líneas de código. Hoy, Trilinos usa el código extraído de deal.II. Estoy ‘ seguro de que se pueden encontrar muchos casos en los que F77 es más rápido que C. El punto es que ya no es ‘ t universalmente hoy.

Respuesta

Ya que soy nuevo aquí, estaba revisando preguntas antiguas y encontré esta. ¡Ojalá no sea tabú responder a los viejos!

Como nadie más ha mencionado esto, pensé que lo haría. Fortran 2003 es casi completamente compatible con la mayoría de los principales compiladores (intel, ibm, cray, NAG, PCG), incluso gcc con (próximamente) versión más reciente 4.7. Fortran 2003 (y 2008) es un lenguaje orientado a objetos, aunque un poco más detallado que C ++. Una de las cosas que creo que es bueno acerca de Fortran es el hecho de que el comité de estándares ve la informática científica como su audiencia principal (agradezco a Damian Rouson por señalarme esto el otro día).

Traigo todo esto no para que los programadores de C ++ se conviertan en programadores de Fortran, sino para que la gente de Fortran sepa que ahora tienen más opciones además de cambiar a C ++ o emular conceptos orientados a objetos en Fortran 90/95.

Una La advertencia que agregaré es que hay un costo por estar a la vanguardia de lo que se implementa en los compiladores. Si emprende un proyecto importante en Fortran 2003 en este momento, encontrará errores y necesitará actualizar continuamente su compilador (especialmente si usa gcc), ¡aunque esto ha mejorado significativamente en los últimos meses!

Respuesta

El problema con C ++ es que tiene numerosas posibilidades de arruinar el rendimiento, por ejemplo, utilizando a ciegas STL, excepciones, clases (sobrecarga virtual más alignm problemas de entrada), sobrecarga de operadores (nuevas / eliminaciones redundantes) o plantillas (la compilación interminable y los errores crípticos parecen benignos, pero puede perder horas de esta manera).

Sin embargo, cuanto más obtenga, mejor acceso a las bibliotecas generales y posiblemente mayor visibilidad de su código (aunque esto depende en gran medida del campo y todavía tiene C puro). Y aún puede compensar la falta de flexibilidad de Fortran envolviendo su código en un lenguaje de script como R, Lush, Matlab / Scilab o incluso Python, Ruby o Lua.

Comentarios

  • Por lo general, es una mala idea aplicar técnicas de bajo nivel en lenguajes de alto nivel. Por ejemplo, el STL está diseñado para operar en un nivel muy abstracto. Uno tiene que ser consciente de cuál es la interfaz está diseñado, úselo para esta tarea y luego salga del camino de los compiladores.
  • Creo que tanto mbq ‘ sy Martin ‘ s puntos son injustos. Sí, hay formas de dispararse en el pie si intenta implementar un vector numérico para propósitos de álgebra lineal usando std :: list < double >. Pero ese ‘ es un argumento tonto: al menos C ++ tiene una clase de lista enlazada que puede usar, mientras que Fortran no ‘ t. Es ‘ como decir » Los automóviles circulan a una velocidad tan alta que podría chocar contra una pared y lesionarse; debería utilizar carruajes tirados por caballos en su lugar. » Es ‘ una idea tonta tirar a la basura un lenguaje de alto nivel que también cosas de nivel (por ejemplo, C ++) para tener características de alto nivel.
  • @WolfgangBangerth No, ahora estás perjudicando a Fortran – es como » de bajo nivel » ya que las bacterias son » menos evolucionadas » que los humanos . Si quieres una analogía con el automóvil, debería ser más como » puedes usar tanto Jeep como Lexus para cruzar un camino pantanoso, pero usar el primero duele menos «.
  • Aprecio su opinión, pero mantengo que Fortran no es ‘ t tan evolucionado como C ++: -)

Respuesta

Tres hechos:

  • N-dimensional al estilo F77 matrices en C: No hay problema para usar CnD (un complemento descarado, sin duda)

  • Sistema de módulo de F90 está mal diseñado y es hostil para construir entornos. (El nombre de un módulo no tiene que coincidir con su nombre de archivo, p. ej.)

  • Fortran no admite la refactorización bien. Extraer un poco de funcionalidad de una función requiere que toque cuatro lugares: código real, declaraciones de variables, declaraciones de argumentos y lista de argumentos. C se las arregla con dos lugares para tocar. Esto agrava el efecto de la falla en administrar bien los datos (desc a continuación): Dado que la modularidad a pequeña escala es tan dolorosa, casi todo el mundo escribe subrutinas gigantes.

Una impresión personal:

  • Fortran no funciona bien para la gestión de datos. Intente devolver un puntero a una estructura de datos opaca para el usuario en F77 o F90. (transfer(), aquí vamos)

Comentarios

  • ¡Hola Andreas! CnD es interesante, yo ‘ no lo sabía. Ah, lo escribiste tú. 🙂 (f90 también admite la división, asignable para matrices y, lo más importante, la sintaxis de matriz para multiplicación, suma, etc.) Yo uso CMake con Fortran y funciona muy bien con módulos.¿Qué es exactamente la » lista de argumentos «? No ‘ creo que los use, por lo que solo se necesitan 3 lugares para modificarlos. En C, normalmente necesita modificar el código real, los parámetros y un archivo de encabezado, por lo que ‘ también tiene 3 lugares (definitivamente en C ++). Sí, transfer () no es ‘ t super agradable, pero normalmente no ‘ no lo necesita en la práctica.
  • Refactorizar el fortran moderno es trivial con IDE adecuados, como Photran en eclipse.
  • » El nombre de un módulo ‘ doesn ‘ t tiene que coincidir con su nombre de archivo, por ejemplo, » Debes estar bromeando, puedes tener muchos módulos en un archivo. Algunos de ellos abarcan solo un par de líneas. Son mucho más fáciles de crear si no tiene que crear un archivo para cada uno de ellos.
  • Solo quería agregar a lo que @ user389 dijo que, mientras Photran es excelente y es el único IDE de Fortran que permite refactorizaciones, su analizador falla todo el tiempo. Por otro lado, ‘ no es necesario comentar sobre el hecho de que Eclipse necesita memoria.

Respuesta

Fortran está optimizado para cálculos de matrices / matrices y es muy complicado trabajar con cualquier tipo de análisis de texto. C y C ++ pueden no coincidir con Fortran en computación numérica (está cerca), pero me resulta mucho más fácil procesar texto y organizar datos (es decir, estructuras de datos personalizadas) con C / C ++.

Como otros han mencionado, no descarte los lenguajes dinámicos interpretados (Python et al). Es posible que no ofrezcan la velocidad de fusión de Fortan desde el principio, pero le permiten concentrarse más en resolver su problema computacional que en todos los detalles de implementación. A menudo, puede implementar una solución en Python y, si el rendimiento es inaceptable, crear perfiles, identificar las áreas problemáticas y optimizar ese código con Cython o volver a implementar el programa completo en un lenguaje compilado. Una vez que haya desarrollado la lógica de resolución de problemas, el resto es solo implementación y, con una buena comprensión de los fundamentos de la computación, debería ser fácil de representar en cualquier variedad de lenguajes de programación.

Comentarios

  • Eso ‘ es correcto. Para el análisis de texto también uso Python.
  • También puede implementar parte de un script de Python en un lenguaje compilado, por ejemplo C ++ y conéctelo. Por ejemplo. Mejora Python, Swig, etc.

Respuesta

Actualmente estoy trabajando en uno de los laboratorios nacionales. de las personas que me rodean son ingenieros mecánicos. Al conversar con algunas de las personas de los grupos de HPC, están trabajando principalmente en Linux y principalmente en C ++. El grupo en el que estoy actualmente tiene principalmente aplicaciones de escritorio y usamos Windows y en orden descendente: C #, FORTRAN, Python, VBA y VB (6, no .NET). Algunas de las motores de simulación que usamos se escribieron en otros laboratorios nacionales en FORTRAN.

Respuesta

Perdón por investigar un hilo antiguo, pero parece que incluso en 2015, Fortran se está utilizando mucho.

Me encontré con este (alternativo link ) que básicamente es una lista de 13 códigos aprobados por la instalación OCLF del DOE para ejecutarse en la máquina Summit de 300 petaFLOPS que estará disponible para los investigadores en 2018 . Traté de encontrar el idioma principal utilizado para el código (basado en una búsqueda rápida en Google) y esto es lo que encontré:

XGC Fortran SPECFEM Fortran ACME Fortran (Bunch of climate codes) DIRAC Fortran (Mostly) FLASH Fortran GTC Fortran HACC C/C++ LS-DALTON Fortran (some C) NAMD C/C++ NUCCOR Fortran NWCHEM Fortran QMCPACK C++ RAPTOR Fortran 

Así que de 13 códigos, al menos 10 (según mi búsqueda rápida) parecen estar escritos en Fortran. Nada mal para un idioma de 50 años.

NOTA: Soy consciente de que las comparaciones de idiomas son inútiles, pero dada la cantidad de personas (especialmente usuarios de C ++) que hablan mal de Fortran, pensé que valdría la pena mencionarlo.

Comentarios

  • No estoy de acuerdo, porque mi experiencia en los laboratorios nacionales ha sido, en todo caso, lo contrario. La mayoría de los nuevos proyectos que veo en Lawrence Livermore están escritos en C ++, y la mayoría de las bibliotecas de código abierto nuevas (o mantenidas activamente) en solucionadores de ODE, discretizaciones FEM y bibliotecas de computación científica de propósito general. parece estar en C o C ++. Fortran parece usarse principalmente en proyectos que usan bibliotecas existentes / heredadas; No ‘ no veo muchos proyectos grandes y nuevos usando Fortran, independientemente de lo que piense sobre el lenguaje.
  • Algunos códigos de teoría funcional de densidad también están escritos en Fortran incluye VASP y CASTEP , aunque como señala @GeoffOxberry, nuevo los proyectos quizás tienden a C ++.
  • @blochwave Como puede leer en el enlace, los proyectos son para una nueva máquina (con aceleradores, etc.) que estará en línea en 2018.Así que no es como si tomaran un código de 25 años y lo compilaran, con la esperanza de ejecutarlo con un buen rendimiento. Estoy bastante seguro de que gran parte de los códigos de la lista anterior se han reescrito o se han reescrito, como en el nuevo código. Varios » nuevos » códigos climáticos también se encuentran en Fortran y son utilizados por muchas agencias en varios países.

Respuesta

Lo que Jack P. creo que está tratando de decir es que debes mezclar y combinar. Una buena pieza de software está cuidadosamente estratificada. Las diferentes capas pueden mapearse de manera más natural o eficiente a diferentes idiomas. Debes elegir el idioma más apropiado para cada capa. También debe comprender cómo los idiomas pueden interoperar, lo que puede afectar el idioma que elija para qué capa.

Una mejor pregunta es qué ejemplos de software excelentemente diseñado hay que vale la pena estudiar para aprender a diseñar software en capas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *