none
Lineal o con hebras RRS feed

  • Pregunta

  • Hola, soy nuevo, nuevo, y me surgen varias dudas antes de iniciar mi programa

    la idea es seguramente utiizar WPF, c# y un poco de SQL 

    lo grueso del programa serán un buen monton de algoritmos con bucles y comparaciones, de millones de datos  ( cada dato sera aprox de entre creo, 9 a 40 números, algunas palabras y tal vez alun booleano, eso por cada registro de la BD )

    Mi pregunta es ¿Qué sera mas rápido o si hay diferencia, pasar los algoritmos uno detrás del otro o utilizar ( creo que existe por lo que he podido leer) hebras para hacer los cálculos casi en paralelo ?

    merci

    jueves, 22 de febrero de 2018 22:11

Respuestas

  • Si los cálculos a realizar no tienen interdependencias, es decir, no tienes que esperar a que acabe uno para poder hacer otro, sí que te interesa hacerlos usando hilos, porque de esa manera se aprovecharán las varias CPUs que haya en el ordenador (en lugar de ejecutarlo todo en una única CPU) y el resultado se obtendrá más deprisa. También te interesa usar hilos, incluso aunque solo tengas 1 CPU, si algunas de las operaciones son "I/O-bound", es decir, esperan a algún suceso externo, tal como una entrada/salida de disco, antes de poder continuar. En ese caso, al tener varios hilos, se sigue avanzando en otros hilos mientras está detenido el hilo que esperaba a la entrada/salida.
    • Propuesto como respuesta Pablo RubioModerator domingo, 25 de febrero de 2018 1:07
    • Marcado como respuesta thoruk domingo, 25 de febrero de 2018 5:25
    jueves, 22 de febrero de 2018 22:30
    Moderador

Todas las respuestas

  • Si los cálculos a realizar no tienen interdependencias, es decir, no tienes que esperar a que acabe uno para poder hacer otro, sí que te interesa hacerlos usando hilos, porque de esa manera se aprovecharán las varias CPUs que haya en el ordenador (en lugar de ejecutarlo todo en una única CPU) y el resultado se obtendrá más deprisa. También te interesa usar hilos, incluso aunque solo tengas 1 CPU, si algunas de las operaciones son "I/O-bound", es decir, esperan a algún suceso externo, tal como una entrada/salida de disco, antes de poder continuar. En ese caso, al tener varios hilos, se sigue avanzando en otros hilos mientras está detenido el hilo que esperaba a la entrada/salida.
    • Propuesto como respuesta Pablo RubioModerator domingo, 25 de febrero de 2018 1:07
    • Marcado como respuesta thoruk domingo, 25 de febrero de 2018 5:25
    jueves, 22 de febrero de 2018 22:30
    Moderador
  • Pues no creo que haya interdependencias, tal vez algún algoritmo, pero ahora mismo no lo tengo fresco

    Respecto a las cpu, tengo un i7 de hara unos 4 años no se que cantidad de cocos debe tener

    ¿ se notara mucho la diferencia de velocidad ?

    el programa en sus inicios, estuvo hecho en turbopascal, resolviendo los algoritmos linealmente, unos 25 algoritmos, y me tardaba en un Pentium 2 dual core unas 2 horas, no se si te servirá como referencia 

    viernes, 23 de febrero de 2018 10:48
  • En un i7 de dos cores correrá el doble si lo haces en multihilo, y en uno de 4 cores, el cuádruple. Además el i7 es super-canalizado, que significa que tiene dos pipelines por cada CPU, y esto hace que el sistema las reconozca como "dobles" (es decir, el i7 de dos cores se ve en el sistema como 4 CPUs, y el de cuatro cores se ve como 8 CPUs. Sin embargo, como comparten varios elementos comunes solo logran alrededor de un 30% más de velocidad. Esto quiere decir que si lanzas 8 hilos en un i7 de 4 cores lograrás una velocidad de alrededor de 5 veces la que tendrías si únicamente utilizaras un único hilo.

    En comparación con el Pentium2, y si optimizas bien el programa y usas varios hilos, es fácil que pases a tardar menos de un minuto.

    viernes, 23 de febrero de 2018 12:30
    Moderador
  • Pues muchas gracias, intentare programarlo con hebras entonces, aunque se me complique un poco mas

    Muchas gracias ¡¡

    lunes, 26 de febrero de 2018 15:55