c++ - microsoft - visual studio installer
Lenguas más rápidas que C++ (17)
Se dice que Blitz ++ proporciona un rendimiento cercano al Fortran .
¿En realidad Fortran tiende a ser más rápido que C ++ normal para tareas equivalentes?
¿Qué pasa con otros idiomas HL de rendimiento excepcional en tiempo de ejecución? He oído hablar de algunos lenguajes que suprimen a C ++ para ciertas tareas ... Objective Caml, Java, D ...
¿Supongo que GC puede hacer mucho más rápido el código, porque elimina la necesidad de copiar en exceso en la pila? (Suponiendo que el código no está escrito para el rendimiento)
Lo pregunto por curiosidad: siempre asumí que C ++ es una codificación ASM experta de bloqueo casi imbatible.
¿Es por eso que está utilizando un navegador gestionado? Porque es más rápido. O sistema operativo gestionado porque es más rápido. No, espera, es la base de datos SQL. Espera, debe ser el juego al que estás jugando. Para, debe haber una pieza de código numérico Java y Csharp, francamente, son inútiles con. Por cierto, debe comprobar en qué está escrita su máquina virtual para eliminar el lenguaje raíz y decir que es lenta.
Qué error, pero me muestran una aplicación de gestión rápida para que todos podamos reírnos. VS? ¿Oficina abierta?
A veces, D puede ser más rápido que C ++ en aplicaciones prácticas, en gran parte porque la presencia de recolección de basura ayuda a evitar la sobrecarga de RAII y el recuento de referencias cuando se usan punteros inteligentes. Para los programas que asignan grandes cantidades de objetos pequeños con ciclos de vida no triviales, la recolección de basura puede ser más rápida que la administración de memoria de estilo C ++. Además, las matrices integradas de D permiten al compilador realizar mejores optimizaciones en algunos casos que el vector STL de C ++, que el compilador no comprende. Además, D2 admite datos inmutables y anotaciones de funciones puras, en las que se optimizan las versiones recientes de DMD2. Walter Bright, el creador de D, escribió un intérprete de JavaScript tanto en D como en C ++, y según él, la versión D es más rápida.
Ahh ... La vieja pregunta: ¿qué compilador hace el código más rápido?
Solo importa en el código que realmente pasa mucho tiempo en la parte inferior de la pila de llamadas, es decir, los puntos calientes que no contienen llamadas a funciones, como la inversión de matriz, etc.
(Implícito por 1) Solo importa en el código que realmente ve el compilador. Si el contador de su programa pasa todo el tiempo en bibliotecas de terceros que no construye, no importa.
En el código donde importa, todo se reduce a qué compilador hace mejor ASM, y eso depende en gran medida de lo inteligente o estúpidamente que se escribe el código fuente.
Con todas estas variables, es difícil distinguir entre buenos compiladores.
Sin embargo, como se dijo, si tienes mucho código de Fortran para compilar, no lo vuelvas a escribir.
C # es mucho más rápido que C ++; en C # puedo escribir un analizador XML y un procesador de datos en una décima parte del tiempo que me toma escribirlo en C ++.
Oh, ¿te refieres a la velocidad de ejecución?
Incluso entonces, si se toma el tiempo desde la primera línea de código escrita hasta el final de la primera ejecución del código, C # probablemente sea más rápido que C ++.
Este es un artículo muy interesante sobre la conversión de un programa C ++ a C # y el esfuerzo requerido para hacer que C ++ sea más rápido que C #.
Entonces, si tomas en cuenta la velocidad de desarrollo, casi cualquier cosa supera a C ++.
OK, para cumplir con el requisito de rendimiento de OP en tiempo de ejecución solamente: no es el lenguaje, es la implementación del lenguaje lo que determina el rendimiento en tiempo de ejecución. Podría escribir un compilador de C ++ que produzca el código más lento que se pueda imaginar, pero aún es C ++. También es teóricamente posible escribir un compilador para Java que apunte a las instrucciones IA32 en lugar de a los códigos de byte de Java VM, dando un impulso de velocidad de ejecución.
El rendimiento de su código dependerá del ajuste entre los puntos fuertes del idioma y los requisitos del código. Por ejemplo, un programa que hace mucha asignación / desasignación de memoria tendrá un mal desempeño en un programa ingenuo de C ++ (es decir, use el asignador de memoria predeterminado) ya que la estrategia de asignación de memoria de C ++ es demasiado generalizada, mientras que el asignador basado en GC de C # puede funcionar mejor (ya que el enlace de arriba muestra). La manipulación de cadenas es lenta en C ++ pero rápida en lenguajes como php, perl, etc.
Con lo que Blitz ++ está compitiendo no es tanto el lenguaje Fortran, sino los siglos de trabajo de las bibliotecas matemáticas de Fortran. Hasta cierto punto, el lenguaje ayuda: un idioma antiguo ha tenido mucho más tiempo para obtener compiladores optimizados (y, seamos sinceros, C ++ es uno de los idiomas más complejos). Por otro lado, las bibliotecas de alto nivel de C ++ como Blitz++ y uBLAS permiten uBLAS sus intenciones con mayor claridad que el código de Fortran de nivel relativamente bajo, y permite nuevas clases de optimizaciones en tiempo de compilación.
Sin embargo, usar una biblioteca de manera efectiva todo el tiempo requiere que los desarrolladores conozcan bien el lenguaje, la biblioteca y las matemáticas. Por lo general, puede obtener un código más rápido mejorando cualquiera de los tres ...
Debe utilizar algún analizador XML administrado impar al cargar esta página. :)
Continuamente perfilamos el código y la ganancia es consistente (y esto no es ingenuo C ++, es simplemente C ++ moderno con abucheos). Consiste en allanar cualquier implementación de CLR al menos 2x y, a menudo, 5x o más. Un poco mejor que los días de Java, cuando era aproximadamente 20 veces más rápido, pero aún así puedes encontrar buenos ejemplos y simplemente eliminar todo el System.Object hinchado y claramente vencerlo a pulpa.
Una cosa que los desarrolladores administrados no obtienen es que la arquitectura del hardware está en contra de cualquier escalado de VM y de los enfoques de raíz de objetos. Tienes que verlo para creerlo, aferrarte, encender un navegador e ir a una máquina virtual ''delgada'' como Silverlight. Te sorprenderás de lo lento y lento que es la CPU.
Dos, patada de una aplicación de base de datos para cualquier rendimiento, sí administrada frente a db nativa.
El rendimiento de un lenguaje compilado es un concepto inútil: lo importante es la calidad del compilador, es decir, qué optimizaciones puede aplicar. Por ejemplo, a menudo, pero no siempre, el compilador Intel C ++ produce un código con mejor rendimiento que g ++. Entonces, ¿cómo se mide el rendimiento de C ++?
Donde entra la semántica del lenguaje es lo fácil que es para el programador hacer que el compilador cree una salida óptima. Por ejemplo, a menudo es más fácil paralelizar el código de Fortran que el código C, razón por la cual Fortran todavía se usa mucho para computación de alto rendimiento (por ejemplo, simulaciones de clima).
Como la pregunta y algunas de las respuestas mencionaron al ensamblador: lo mismo es cierto aquí, es solo otro lenguaje compilado y, por lo tanto, no es inherentemente "más rápido". La diferencia entre ensamblador y otros lenguajes es que el programador, que idealmente tiene un conocimiento absoluto del programa, es responsable de todas las optimizaciones en lugar de delegar algunas de ellas al compilador "tonto".
Por ejemplo, las llamadas de función en el ensamblador pueden usar registros para pasar argumentos y no necesitan crear marcos de pila innecesarios, pero un buen compilador también puede hacer esto (piense en línea o en llamada rápida). La desventaja de usar ensamblador es que los algoritmos de mejor rendimiento son más difíciles de implementar (piense en la búsqueda lineal frente a la búsqueda binaria, la búsqueda de tabla hash, ...).
Escribí esto hace unos minutos:
Esto dependerá mucho del compilador, los programadores, si tiene gc y puede variar demasiado. Si se compila directamente al código de la máquina, espere tener un mejor rendimiento que el interpretado la mayor parte del tiempo, pero existe una cantidad finita de optimización posible antes de que tenga la velocidad de ASM de todos modos.
Si alguien dijera que fortran era un poco más rápido, ¿codificarías un nuevo proyecto en eso de todos modos?
FORTAN suele ser más rápido que C ++ para el procesamiento de matrices debido a las diferentes formas en que los lenguajes implementan las matrices: FORTRAN no permite el alias de los elementos de la matriz, mientras que C ++ sí lo hace. Esto hace que el trabajo de los compiladores FORTRAN sea más fácil. Además, FORTRAN tiene muchas bibliotecas matemáticas muy maduras en las que se ha trabajado durante casi 50 años. ¡C ++ no ha existido tanto tiempo!
Fortran es más rápido y casi siempre mejor que C ++ para código puramente numérico. Hay muchas razones por las que Fortran es más rápido. Es el lenguaje compilado más antiguo (mucho conocimiento en la optimización de compiladores). Sigue siendo EL lenguaje para los cálculos numéricos, por lo que muchos proveedores de compiladores se ganan la vida vendiendo compiladores optimizados. También hay otras razones más técnicas. Fortran (bueno, al menos Fortran77) no tiene punteros y, por lo tanto, no tiene los problemas de alias, que afectan a los lenguajes C / C ++ en ese dominio. Muchas bibliotecas de alto rendimiento aún están codificadas en Fortran, con una larga historia (> 30 años). Ni C ni C ++ tienen buenas construcciones de matriz (C es un nivel demasiado bajo, C ++ tiene tantas bibliotecas de matriz como compiladores en el planeta, que son todas incompatibles entre sí, lo que evita un grupo de código rápido bien probado).
Hacerlo mucho mejor que en C ++ consistirá principalmente en hacer que el compilador entienda lo que significa el programador. Un ejemplo de esto podría ser una instancia en la que un compilador de cualquier idioma deduce que una región de código es independiente de sus entradas y solo calcula el valor del resultado en el momento de la compilación.
Otro ejemplo de esto es cómo C # produce un código de rendimiento muy alto simplemente porque el compilador sabe lo que significan los conjuros particulares y puede usar inteligentemente la implementación que produce el rendimiento más alto, donde una transliteración del mismo programa a C ++ da como resultado una asignación / asignación innecesaria. Eliminar ciclos (ocultos por plantillas) porque el compilador está manejando el caso general en lugar del caso particular que esta pieza de código está dando.
Un último ejemplo podría estar en las adaptaciones Brook / Cuda de C diseñadas para hardware exótico que ya no es tan exótico. El lenguaje admite las primitivas exactas (funciones del kernel) que se asignan al hardware no Von-neuman que se está compilando.
La cosa con c ++ es que está muy cerca del nivel de hardware. De hecho, puede programar en el nivel de hardware (a través de bloques de ensamblaje). En general, los compiladores de c ++ hacen un trabajo bastante bueno en las optimizaciones (para un gran aumento de velocidad, habilite "Link Time Code Generation" para permitir la integración de funciones entre diferentes archivos cpp), pero si conoce el hardware y tiene el know-how , puede escribir algunas funciones en el ensamblaje que funcionen incluso más rápido (aunque a veces, simplemente no puede vencer al compilador).
También puede implementar sus propios administradores de memoria (que es algo que muchos otros lenguajes de alto nivel no permiten), por lo que puede personalizarlos para su tarea específica (tal vez la mayoría de las asignaciones sean de 32 bytes o menos, luego puede solo tiene una lista gigante de búferes de 32 bytes que puede asignar / desasignar en tiempo O (1)). Creo que c ++ PUEDE superar a cualquier otro idioma, siempre y cuando entienda completamente el compilador y el hardware que está utilizando. La mayoría se reduce a qué algoritmos usas más que cualquier otra cosa.
Por lo general, el algoritmo no es el idioma que determina el nivel de rendimiento en el que terminará.
Dentro de ese campo de juego, los compiladores optimizados generalmente pueden producir mejor código que la mayoría de los codificadores de ensamblaje.
La optimización prematura es la raíz de todo mal.
Este puede ser el "conocimiento común" de que todos pueden hacer loros, pero acepto que probablemente sea correcto. Espero pruebas concretas de lo contrario.
Si el código no se escribe para el rendimiento , C # es más rápido que C ++ .
Un descargo de responsabilidad necesario: todos los puntos de referencia son el mal.
Aquí hay puntos de referencia que a favor de C ++ .
Los dos enlaces anteriores muestran que podemos encontrar casos en los que C ++ es más rápido que C # y viceversa.
Si fortran es más rápido que c ++ es una cuestión de discusión. Algunos dicen que sí, otros dicen que no; No voy a entrar en eso. Depende del compilador, la arquitectura en la que lo estés ejecutando, la implementación del algoritmo ... etc.
Donde fortran tiene una gran ventaja sobre C es el tiempo que le toma implementar esos algoritmos. Y eso lo hace extremadamente adecuado para cualquier tipo de computación numérica. Voy a indicar algunas ventajas obvias sobre C:
- Indización de matriz basada en 1 (tremendamente útil cuando se implementan modelos más grandes, y no tiene que pensarlo, solo FORMula TRANslate
- tiene un operador de energía (
**
) ( Dios, ¿quién pensaba que funcionaría una función de poder? ¡¿En lugar de un operador ?! ) - tiene, diría que es el mejor soporte para arreglos multidimensionales de todos los idiomas en el mercado actual (y no parece que vaya a cambiar tan pronto) -
A(1,2)
como en matemáticas - por no hablar de evitar los bucles: A = B * C multiplica las matrices (casi como sintaxis matlab con velocidad compilada )
- tiene características de paralelismo incorporadas en el lenguaje (verifique el nuevo estándar en este)
- muy fácilmente conectable con lenguajes como C, python, para que pueda realizar los cálculos de trabajo pesado en fortran, mientras que ... lo que sea ... en el idioma de su elección, si se siente tan inclinado
- Totalmente compatible con versiones anteriores (ya que todo F77 es un subconjunto de F90) por lo que tiene todo un siglo de codificación a su disposición
- muy muy portátil (esto podría no funcionar para algunas extensiones de compilador, pero en general funciona como un encanto)
- comunidad de resolución de problemas orientada a problemas (ya que los usuarios de fortran no suelen ser cs, sino matemáticos, técnicos, ingenieros ... personas sin programación, sino con experiencia en resolución de problemas cuyo conocimiento sobre su problema puede ser muy útil)
No puedo pensar en otra cosa fuera de mi cabeza en este momento, así que esto tendrá que hacer.
Todo depende del compilador, por ejemplo, el compilador del Esquema Stalin, supera a casi todos los idiomas en el conjunto de pruebas micro de Debian, pero ¿mencionan algo sobre los tiempos de compilación?
No, sospecho que (no he usado antes a Stalin) la compilación de puntos de referencia (todas las optimizaciones a niveles máximos de esfuerzo) lleva mucho tiempo para cualquier cosa que no sea el código más pequeño.