Esistono sistemi di compilazione che incorporano i tempi attesi relativi alle attività nella pianificazione?

13

Ecco una piccola illustrazione della mia domanda:

Assumi un processo di creazione composto da 4 attività indipendenti denominate A-D. D richiede più tempo di A-C in somma.

Un sistema di build che non può incorporare i relativi tempi di attività potrebbe pianificare le attività in questo modo:

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

Al contrario, se lo scheduler è a conoscenza delle differenze temporali dell'attività, potrebbe presentare una pianificazione molto più breve:

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

Le mie domande:

  1. Esistono sistemi di compilazione che incorporano i relativi tempi di attività previsti nella pianificazione?
  2. Che tipo di ricerca accademica sui sistemi di costruzione di questo tipo esiste?
  3. Dove vengono creati questi sistemi di build (se esistono)? Euristiche, tempi raccolti durante le precedenti build?
  4. Se tali sistemi di build non esistono, perché? C'è un trambusto che li renderebbe meno degni di quanto non appaiano a prima vista?
posta sjakobi 29.01.2017 - 17:42
fonte

2 risposte

3

Microsoft Visual Studio Team System (in precedenza TFS) considera i tempi di azione build e le build parallele; prende i dati dalla cronologia di costruzione precedente; e anche se non credo che tu possa ottenere il comportamento che desideri, puoi personalizzarlo.

Un esempio di alcune attività personalizzate per lavorare sull'ottimizzazione delle prestazioni

link

    
risposta data 01.02.2017 - 03:03
fonte
0

Questo si basa sull'assunto sbagliato che "costruire" un'attività non è parallela.

Molti compilatori funzionano in multi-thread, quindi una singola attività A utilizzerà tutte le CPU. Pertanto, l'ordine non ha importanza. Per le attività legate all'I / O, in particolare per quanto riguarda il networking, è meglio avviarle tutte in parallelo fin dall'inizio: la maggior parte del tempo verrà speso in attesa di una risposta.

In altre parole, l'ordinamento non ha importanza poiché le singole attività sono in genere parallele (come la compilazione per esempio)

Modifica:

In realtà, anche questa concezione di "Attività A sulla CPU 1" è imperfetta. Anche per le attività a thread singolo, il sistema operativo che pianifica i processi / thread può saltarlo dalla CPU alla CPU su ogni switch di contesto. Immagino che la maggior parte dei sistemi di compilazione eseguirà tutte le attività in parallelo e consentirà al sistema operativo di eseguire la pianificazione. I compiti più lunghi richiederanno più tempo e questo è tutto.

Supponendo di avere un'attività a thread singolo con esecuzione prolungata che non è associata a I / O , sarebbe più semplice per il sistema di generazione assegnargli una priorità / importanza piuttosto che tentare di ritardare le attività più piccole a ridurre le opzioni di contesto dal sistema operativo.

Anche se disponi di tali compiti strani , cosa abbastanza rara nella pratica, e disponi di un fantastico sistema di pianificazione che opera sull'euristica in base alle corse precedenti (l'unico modo per sapere), i vantaggi si può essere piuttosto piccoli ... tuttavia si ottiene un po 'di complessità aggiuntiva da mantenere.

    
risposta data 04.02.2017 - 21:23
fonte

Leggi altre domande sui tag