¿Hay algún sistema de compilación que incorpore los tiempos de tarea relativos previstos en la programación?

13

Aquí hay una pequeña ilustración de mi pregunta:

Suponga un trabajo de compilación que consta de 4 tareas independientes denominadas A-D. D lleva más tiempo que A-C en suma.

Un sistema de compilación que no puede incorporar los tiempos de tarea relativos podría programar las tareas de esta manera:

---------------------------------------
CPU1: A  |    C   |
---------------------------------------
CPU2: B    | D                        |
---------------------------------------

Por el contrario, si el programador es consciente de las diferencias de tiempo entre tareas, podría tener un horario mucho más corto:

---------------------------------------
CPU1: A  |  B    |   C   |
---------------------------------------
CPU2: D                        |
---------------------------------------

Mis preguntas:

  1. ¿Hay algún sistema de compilación que incorpore tiempos de tarea relativos previstos en el calendario?
  2. ¿Qué investigación académica existe en los sistemas de construcción de este tipo?
  3. ¿Dónde estos sistemas de compilación (si existen) toman la información del tiempo? ¿Heurísticas, tiempos recogidos durante versiones anteriores?
  4. Si tales sistemas de compilación no existen, ¿por qué? ¿Hay algún problema que los haga menos valiosos de lo que parecen a primera vista?
pregunta sjakobi 29.01.2017 - 17:42

2 respuestas

3

Microsoft Visual Studio Team System (anteriormente TFS) considera tiempos de acción de compilación y compilaciones paralelas; toma los datos del historial de compilación anterior; y aunque no creo que puedas obtener el comportamiento que deseas fuera de la caja, puedes personalizarlo.

Un ejemplo de algunas tareas personalizadas para trabajar en la optimización del rendimiento

enlace

    
respondido por el Bruno Guardia 01.02.2017 - 03:03
0

Esto se basa en la suposición errónea de que "construir" una tarea no es paralela.

Muchos compiladores trabajan con múltiples subprocesos, por lo que una sola tarea A utilizará todas las CPU. Por lo tanto, el orden no importa. Para las tareas enlazadas de E / S, especialmente las relacionadas con la red, es mejor comenzarlas todas paralelamente desde el principio: la mayor parte del tiempo se dedicará a esperar una respuesta.

En otras palabras, el ordenamiento no importa ya que las tareas individuales generalmente están en paralelo (como compilar, por ejemplo)

Editar:

En realidad, esta concepción de "Tarea A en la CPU 1" también es errónea. Incluso para tareas de un solo subproceso, el sistema operativo que programa los procesos / subprocesos puede saltar de CPU a CPU en cada cambio de contexto. Supongo que la mayoría de los sistemas de compilación ejecutarán todas las tareas en paralelo y dejarán que el sistema operativo haga la programación. Las tareas más largas tomarán más tiempo y eso es todo.

Suponiendo que tiene una tarea de un solo hilo de larga ejecución que no está vinculada a E / S , sería mucho más fácil para el sistema de compilación asignarle una prioridad / importancia en lugar de intentar retrasar tareas más pequeñas para reducir los cambios de contexto del sistema operativo.

Incluso si tiene tareas extrañas , lo cual es bastante raro en la práctica, y tiene un sistema de compilación de programación sofisticado que funciona en heurísticas basadas en ejecuciones anteriores (la única forma de saberlo), los beneficios es posible que obtengas algo más pequeño ... sin embargo, obtienes un montón de complejidad adicional para mantener.

    
respondido por el dagnelies 04.02.2017 - 21:23

Lea otras preguntas en las etiquetas