Autor |
Mensaje |
sabian_reloaded
Nivel 9
Edad: 34
Registrado: 18 Jun 2009
Mensajes: 2925
Ubicación: El bosque platense
Carrera: No especificada
|
|
Sebastian Santisi escribió:
|
[Ah, al respecto de esto; si tenés alguna duda puntual, abrite un thread, y se ve qué se puede hacer.
Si bien en Fortran no he laburado mucho más que para emparchar alguna aplicación o traducir a algún otro lenguaje; tiene una implementación de arrays bastante similar a la de C (con algunas salvedades como la base de cuenta y el row order, pero son similares al 99%)... seguramente pueda darte una mano.
|
Mil gracias por la hospitalidad, aún sin ser estudiante de FIUBA. Ahora este lo pude entender, pero me llevo facil 1 hora entenderlo (aunque cheteaba a la vez ). Me sentí totalmente lelo.
Cuando vuelva a tener problemas (o sea la proxima vez que apareza un arreglo ) armo un thread.
Gracias por todo Seba.
Abrazo.
P.D 1: FORTRAN 90 tambien usa la norma IEEE754 (o como se llame ). Igualmente me aclaraste mi duda básica cuando me confirmaste que C tiene varios tipos de Reales.
P.D 2: Como sabes hijo de budaaaa , es mas corto preguntarte que lenguaje no sabes a preguntarte cual sabes.
P.D 3: Otra duda que me quedo en el tintero, C admite funciones externas (esto lo doy practicamente por seguro)? Y admite variables complejas?
EDIT: Cambienle el titulo a " FAQ para los giles que no saben C", me lo merezco
|
|
|
|
|
|
|
|
|
Ignium
Nivel 9
Edad: 38
Registrado: 29 Oct 2005
Mensajes: 2725
Ubicación: Rivadavia y Puan
Carrera: Civil
|
|
De hacer benchmark entre C y Fortran...
Vi mucho uso de mathemática, mathlab u octave para desarrollo y ensayo de algoritmos.
Si no me importa la eficiencia pero si ver la eficacia del algoritmo estos lenguajes son lo ideal pues tiene todo ya interiorizado.
En cambio existe una etapa de aplicación de código en la cual la velocidad es crucial. Y ahí entra el tema de fortran vs C es un debate que lleva bocha de tiempo.
Tengo solo tres casos puntuales. Un investigador de suelos de Stanford que pasó por el labo nos contaba que, teniendo ayudantes especializados en C, sus algoritmos numéricos siempre corrían mas rápido en fortran, relegando C para hacer el pre y el post. También el caso de uno de los chicos del equipo de Borkins, que realizaban ciertos códigos en fortran cuando eran de uso intensivo y el delirante de Sfrizo que hacía las pruebas en mathemática y después lo llevaba todo a Fortran.
No logré encontrar un documento o fuente que me de un resultado contundente
|
|
|
|
_________________ Centro de Estudiantes de Ingeniería - FIUBA
Grupo Google de la Comisión Curricular de Ing. Civil
|
|
|
|
|
sabian_reloaded
Nivel 9
Edad: 34
Registrado: 18 Jun 2009
Mensajes: 2925
Ubicación: El bosque platense
Carrera: No especificada
|
|
Que buen aporte!!! Esta muy bueno el topic. No sabía que había un debate al respecto. Gracias por los aportes a todos, ya se desvirtuo al carajo esto pero esta bueno.
|
|
|
|
|
|
|
|
|
Sebastian Santisi
Administrador Técnico
Edad: 42
Registrado: 23 Ago 2005
Mensajes: 17451
|
|
sabian_reloaded escribió:
|
P.D 1: FORTRAN 90 tambien usa la norma IEEE754 (o como se llame ). Igualmente me aclaraste mi duda básica cuando me confirmaste que C tiene varios tipos de Reales.
|
Bien, es lo más lógico que los haya adoptado.
sabian_reloaded escribió:
|
P.D 3: Otra duda que me quedo en el tintero, C admite funciones externas (esto lo doy practicamente por seguro)? Y admite variables complejas?
|
Lo de escalabilidad, me refería a eso... C es un lenguaje muy práctico para la modularización, y permite construir en base a módulos programas muy complejos y largos sin convertirse en cosas inmantenibles. Obviamente, admite todas las herramientas necesarias como para trabajar en más de un módulo, con diferentes compilaciones, con creación de bibliotecas, etc.
[edit]Al respecto de variables complejas; agregaron algo por ese lado en C99; nunca las usé... pero por las características del lenguaje, es trivial hacerse un módulo propio que las implemente.[/edit]
Ignium escribió:
|
De hacer benchmark entre C y Fortran...
|
Yo nunca vi uno (si bien tampoco busqué); pero sospecho a que se debe a la falta de fundamentos de los que exponen la teoría que viene a continuación.
Ignium escribió:
|
Vi mucho uso de mathemática, mathlab u octave para desarrollo y ensayo de algoritmos.
Si no me importa la eficiencia pero si ver la eficacia del algoritmo estos lenguajes son lo ideal pues tiene todo ya interiorizado.
|
Incluso cuando la eficiencia importa; dependiendo de la complejidad, sigue siendo más práctico un lenguaje de estos funcionales matemáticos.
El tiempo de desarrollo también debe ponerse en la balanza, más allá del tiempo de ejecución.
Si querés tener en C números de precisión arbitraria, buenas bibliotecas matriciales (compactas, en cuanto a esparsas tenés que caer en C porque Matlab no lo implementa de base), funciones máginas de alto nivel de esas que sacan los coeficientes de fourier, etc., un graficador incorporado, y los tantos chiches que tienen los otros programas; vas a tener que laburar un montón para armarte tu framework... y probablemente sigas dependiendo de gnuplot o alguna cosa por el estilo para hacer la visualización final.
En el tiempo en el que escribís un mal programa en C, tal vez hayas podido sacar 50 programas en Matlab. Si estás investigando, o creando modelos a medida, aunque el tiempo te urja, bien podés dedicarle 1 semana a armar el modelo en Matlab y después esperar una semana a que corra... no es negocio perder un mes haciéndolo en C para que corra en un par de horas.
Ignium escribió:
|
En cambio existe una etapa de aplicación de código en la cual la velocidad es crucial. Y ahí entra el tema de fortran vs C es un debate que lleva bocha de tiempo.
|
Y en el cual jamás escuché una opinión seria .
Ignium escribió:
|
Tengo solo tres casos puntuales. Un investigador de suelos de Stanford que pasó por el labo nos contaba que, teniendo ayudantes especializados en C, sus algoritmos numéricos siempre corrían mas rápido en fortran, relegando C para hacer el pre y el post. También el caso de uno de los chicos del equipo de Borkins, que realizaban ciertos códigos en fortran cuando eran de uso intensivo y el delirante de Sfrizo que hacía las pruebas en mathemática y después lo llevaba todo a Fortran.
|
Yo recuerdo a un docente en Exactas (ingeniero él) que afirmó muy rotundamente en su teórica que Fortran era más rápido que C... y también recuerdo al ayudante de la práctica (cientista de la computación con al menos 30 años menos, él) cuereándolo después .
La realidad, es que esas opiniones de alto nivel, totalmente categóricas, son una idiotez en esta disciplina como en cualquier otra.
La velocidad de un lenguaje es función de la traducción que se pueda hacer de ese lenguaje al código máquina, y de la eficiencia de esa traducción sobre el funcionamiento de la arquitectura. Usando dos compiladores buenos de C y de Fortran, no puede haber una diferencia crucial, en dos códigos similares.
Los que hacen estos benchmarks de albañil (imaginate, Ignium, a un MMO hablándote de que determinada variedad de Portland él él opina que es más dura en base a cómo una vez le hizo un revoque uno u otro albañil) suelen tener bastante poca fundamentación a nivel de qué es lo que está generando el compilador.
Luego, hay que ver la calidad de código (no de optimización) de la versión Fortran contra la versión C. Si yo fuera un "ayudante especializado en C" para el tipo de suelos de Stanford y el tipo de suelos de Stanford me da un código chorizo de 5000 lineas de código Fortran, lleno de gotos, con todas las variables globales, sin ni una sola función, y me pide que lo pase a C (cambiá suelos por hidráulica, Fortran por BASIC y ayudante por consultor y me tenés a mí) por mi salubridad mental, lo primero que voy a hacer es estructurar el código de una manera medianamente funcional. Si aislo bloques por funcionalidad, encapsulo en funciones, oculto las variables locales, y hago todas las cosas que son necesarias para que 5000 líneas de código no sean una ensalada donde el 50% del código está repetido; voy a obtener un programa decente, pero probablemente correrá más lento que el que era un programa secuencial, reservaba toda su memoria al inicio, y jamás hacía una llamada a una función. ¿Cuánto más lento?; ahí depende de la capacidad y conocimiento de arquitectura, hardware y lenguaje del tipo que haga la traducción; puede ser increíblemente más lento o puede ser imperceptiblemente más lento. El punto es que son comparaciones entre dos programas distintos.
Un bucle de código de trabajo intensivo (de los que hacen al tiempo en un software numérico, buscando alguna convergencia o actualizando sistemáticamente valores paso a paso) tiene que tener la misma eficiencia en C que en Fortran. Si da tiempos diferentes, o no es una traducción equivalente, o uno de los dos está violando la cuántica.
|
|
|
|
_________________
|
|
|
|
|
|
Ir a página Anterior 1, 2
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|