Ottimizzazione del software e Ottimizzazione dell'hardware: qual è l'impatto maggiore?

7

Mi chiedevo in che modo l'ottimizzazione del software e l'ottimizzazione dell'hardware si confrontano quando si tratta dell'impatto che hanno sulla velocità e sulle prestazioni dei computer.

Ho sentito dire che il miglioramento dell'efficienza e degli algoritmi del software nel corso degli anni ha fatto enormi progressi in termini di prestazioni. Ovviamente entrambi sono estremamente importanti, ma quale è stato l'impatto maggiore negli ultimi 10, 20 o 30 anni?

E in che modo le modifiche apportate all'hardware influenzano le modifiche al software? Quanto dell'ottimizzazione del software è un risultato diretto dei miglioramenti dell'hardware e quanto è indipendente dall'hardware?

Per essere chiari, sto chiedendo delle ottimizzazioni del software a livello di compilatori e sistemi operativi. Ovviamente l'utilizzo di algoritmi di alto livello migliori comporterà i maggiori aumenti di velocità (si pensi a quick-sort vs bubble-sort), ma questa domanda riguarda il motivo sottostante per cui i computer sono più veloci oggi, in generale.

    
posta domvoyt 23.05.2012 - 17:19
fonte

6 risposte

6

Il maggiore aumento delle prestazioni deriva sicuramente dall'hardware.

In termini di software, uno dei più grandi cambiamenti negli ultimi 30 anni è che non scriviamo quasi tanto codice di basso livello come un tempo. Ad esempio, ora il software si basa su ottimizzazioni automatiche del compilatore rispetto all'assemblaggio scritto a mano e fa ampio uso di strutture e schemi esistenti che sono maturati negli ultimi decenni. D'altra parte, il software è diventato sempre più complesso e ci sono stati risultati di prestazioni corrispondenti.

Tuttavia, le funzionalità hardware sono migliorate principalmente in base alla legge di Moore e le velocità della CPU e la larghezza di banda della memoria sono aumentate centinaia di volte negli ultimi 30 anni. I processi di produzione sono migliorati, consentendo ai componenti di diventare più piccoli e più veloci perché è possibile raggruppare più transistor. Una delle cose più grandi che ha velocizzato i computer è l'accesso alla memoria e l'uso del caching. Le dimensioni della cache della CPU sono ora più grandi della RAM totale e i programmi di basso livello sono stati spostati per sfruttarlo al meglio. Inoltre, quando le CPU a 64 bit diventavano un luogo comune, era necessario un set di istruzioni corrispondente (ad esempio x86-64, il cui utilizzo poteva ancora essere qualificato come "software") per trarne il massimo vantaggio. In questo modo, si tratta di una combinazione di miglioramenti dell'hardware, che vengono sfruttati meglio dai cambiamenti nella progettazione del software.

In breve, i maggiori incrementi massimi delle prestazioni provengono dall'hardware, tuttavia sono spesso necessarie modifiche al software per fare un uso ottimale del nuovo hardware. O uno non funziona davvero senza l'altro!

    
risposta data 23.05.2012 - 21:07
fonte
5

I have heard that improving software efficiency and algorithms over the years has made huge performance gains

Penso che ciò che hai ascoltato qui sia correlato a algoritmi migliori, ma questo è ciò che hai esplicitamente escluso dalla tua domanda.

A livello dei sistemi operativi, non credo che molte applicazioni siano più veloci oggi rispetto a 10 anni fa perché il sistema operativo è migliorato (nella maggior parte dei casi è vero il contrario - la maggior parte dei sistemi operativi diventa sempre più grande ogni anno, producendo un sovraccarico maggiore ). L'unica eccezione potrebbe essere il supporto migliore per processori multipli e calcolo parallelo, ma ciò non può essere visto indipendentemente dai miglioramenti dell'hardware.

Per i compilatori, ci sono stati alcuni miglioramenti dei decenni, ma quelli con il maggiore impatto sulle prestazioni sono stati i miglioramenti per supportare le funzionalità del nuovo hardware. Le funzionalità di calcolo parallelo IMHO (multicore, SIMD ecc.) E l'elaborazione a 64 bit sono le cose più importanti da menzionare qui. EDIT: c'è un aspetto in cui i miglioramenti nel software del compilatore hanno aumentato le prestazioni delle applicazioni di circa un ordine di grandezza negli ultimi 10-20 anni: compilatori just-in-time, specialmente quelli per Java (dal 1999) e successivi Javascript .

Quindi arriva principalmente all'hardware. In termini di 20 o 30 anni fa, era principalmente la velocità di clock del processore, dove l'aumento correlava approssimativamente 1: 1 nelle prestazioni delle applicazioni per molte applicazioni (non è perfettamente vero, il vero aumento è stato minore poiché le prestazioni dell'applicazione dipendono anche da altri componenti hardware come velocità di accesso alla memoria, velocità del disco rigido, velocità della GPU, ecc.). Quando si pensa agli ultimi 10 anni, la velocità di clock del processore non è aumentata molto di più, poiché i produttori di processori hanno raggiunto i limiti pratici di produzione. Invece, c'è stato un cambio di paradigma nel calcolo parallelo. Processore multi-core, GPU computing (che è anche una forma di calcolo parallelo), SIMD nel mainstream ecc. Hanno dominato l'ultimo decennio.

    
risposta data 23.05.2012 - 18:33
fonte
3

Se l'hardware fornisce un rapporto di accelerazione di 2x, allora tutto diventa 2x più veloce di prima.

Se una nuova ottimizzazione del compilatore offre un rapporto di accelerazione pari a 2x, anche questo rende tutto 2x più veloce di prima.

Insieme, renderanno le cose 4x più veloci di prima.

Prima che ti rallegri, c'è una regola molto vecchia: Nature Abhors a vuoto . Se c'è spazio libero sulla RAM, qualcuno lo riempirà. Se c'è spazio libero su disco, qualcuno lo riempirà. Se ci sono cicli di riserva sulla tua CPU, qualcuno li userà.

Non la pensi così? Trova quel vecchio laptop scartato con il processore da 500 mhz e il disco da 3 gb e prova a installare qualche nuovo software su di esso.

I programmatori (incluso me) tendono a scrivere codice che utilizza i cicli disponibili, indipendentemente dal numero di ingegneri che lavorano sodo, e non sempre per una maggiore funzionalità.

    
risposta data 23.05.2012 - 21:57
fonte
2

30 anni fa, un computer PC aveva una Z80 Micro in esecuzione a forse 1 Meg, e se si è fortunati, un altro Z80 stava eseguendo il display.
Oggi, un tipico computer PC ha una CPU con 2 o 4 core che funzionano a 2-3 Gig Hz. Hanno anche GPU con 100 di processi paralleli, ancora misurati nella gamma GhZ.
Quindi abbiamo una larghezza del bus da 8 bit a 64 bit.

Tutto questo, perché i computer non funzionano più di 10 mila volte più velocemente rispetto a quelli da 30 anni. L'hardware è. Direi che le ottimizzazioni del software per computer non sono buone come suppongono le vostre domande.

    
risposta data 25.05.2012 - 06:56
fonte
2

Assumendo inefficienze algoritmiche grossolane, non è ancora chiaro dove si trovano i maggiori guadagni. I più recenti miglioramenti dell'hardware sono inutili senza il lato dell'ottimizzazione del software comunque. La parallelizzazione delle attività e la vettorizzazione sono un'ottimizzazione software o hardware? È entrambi.

Inoltre, a volte la velocità si realizza attraverso un cambiamento radicale nella capacità dell'hardware e nella filosofia del software. Ad esempio, a causa di un'esplosione sia della capacità di memoria sia della velocità di trasmissione sequenziale del disco, molti ingegneri del software stanno abbandonando il concetto di database relazionali ricercati a favore di sbattere tutti i dati nella memoria.

Il punto generale è che le ottimizzazioni dell'hardware senza le ottimizzazioni software corrispondenti spesso ti comprano solo guadagni incrementali. Lo stesso vice versa.

    
risposta data 25.05.2012 - 08:15
fonte
1

Con la compilazione di silicio , qualsiasi parte di software può essere implementata nell'hardware.

Il guadagno di prestazioni è fondamentalmente nella conversione di un'architettura Von Neuman sequenziale in una parallela di flusso di dati.

Pertanto, qualsiasi ottimizzazione del software è possibile in hardware con la stessa leva.

Al giorno d'oggi, il software viene principalmente utilizzato per spostare i dati da un luogo a un altro, mentre l'hardware lo elabora: FPU, DSP, GPU ...

Le webcam AVCHD e YouTube non esisterebbero senza codificatori video e decodificatori hardware implementati (esistono su dispositivi limitati come smartphone!).

Queste ottimizzazioni dell'hardware hanno impatto su compilatori e sistemi operativi nel senso che l'elaborazione grafica, audio e video ora appartengono al sistema operativo e alle sue librerie fornite.

    
risposta data 25.05.2012 - 09:45
fonte

Leggi altre domande sui tag