Selezionare una CPU o un microcontrollore necessari per una determinata applicazione software?

4

Supponiamo di avere un algoritmo software (ad esempio, una FFT), e ho bisogno di elaborare (n) quantità di dati in (t) millisecondi. Questo è un compito in tempo reale scritto in C. Ci sono un sacco di CPU là fuori, e si potrebbe semplicemente selezionare il più veloce, ma vogliamo anche qualcosa di giusto per il lavoro riducendo i costi.

FFT sono O (n log n) per quanto ne so, quindi forse si può dire che ci vorrebbe k * (n log n) per eseguire una FFT su n unità di dati. Anche se la costante fosse nota, come potrei tradurla nei cicli effettivi della CPU, al fine di determinare quale CPU è adatta?

Un collega di lavoro mi ha posto questa domanda e non ho potuto rispondere, poiché si tratta di un settore dell'ingegneria informatica che non conosco.

Supponiamo che questo programma software funzioni da solo, senza alcun sistema operativo o altro sovraccarico.

    
posta 9a3eedi 09.02.2016 - 04:46
fonte

4 risposte

10

"Big O notation" non ha senso per questo scopo. Se si conosce n , è possibile stimare il numero di operazioni, ma alcune operazioni sono economiche (ad esempio 1 ciclo) e alcune operazioni non lo sono (ad esempio, mancata cache che costa migliaia di cicli); e la migliore stima che puoi raggiungere usando questo metodo sarà sminuita da "errore di stima". Nota: la "notazione Big O" è principalmente utile solo per confronti teorici di algoritmi che fanno la stessa cosa sulla stessa macchina reale o ipotetica.

In pratica; vuoi confrontare il codice reale su una vera CPU con dati realistici. Sulla base di questo si applicano i "modificatori ponderati" per adattare la stima ad altre CPU; che tengono conto di cose come le differenze nella gerarchia di memoria (latenza, dimensioni della cache), differenze nelle CPU (è più veloce / più lento dell'altra per SIMD, virgola mobile, operazioni in interi), le differenze sono compilatori (si ottimizza molto meglio / peggio di un altro), ecc. (dove i "pesi" provengono da quanto pensi che ogni cosa influenzi le prestazioni).

È facile dire " L'ho confrontato su una CPU a 3 GHz e ci sono voluti 10 secondi per un carico realistico, quindi suppongo che ci vorranno circa 45 secondi su una CPU da 1 GHz con RAM più lento e leggermente peggiore virgola mobile. "

    
risposta data 09.02.2016 - 08:12
fonte
4

Sono necessari alcuni benchmark affidabili per la CPU in questione e per CPU comparabili, di cui almeno una è disponibile. Quindi sviluppi l'algoritmo, lo misuri sulle CPU che hai e, prendendo i dati del benchmark, indovina quanto tempo impiegheranno le altre CPU.

Quindi decidi quali CPU potrebbero essere in grado di gestire il tuo algoritmo e seleziona quelle più economiche pur essendo in grado di eseguire l'operazione. E poi implementa il tuo algoritmo e verifica che sia effettivamente abbastanza veloce.

C'è sempre la possibilità che alcune CPU siano più ottimizzate per ottenere buoni risultati rispetto ad altre che sono più ottimizzate per prestazioni reali, quindi le conclusioni di misurazioni e benchmark potrebbero essere errate una volta misurata su una particolare CPU.

    
risposta data 09.02.2016 - 16:44
fonte
0

La complessità di un algoritmo sarà la stessa, sia che sia implementata in hardware o software. Potresti ottenere una "k" molto più bassa se è interamente implementata nella CPU, ma è ancora O (n log n).

    
risposta data 09.02.2016 - 07:40
fonte
0

In termini generali, supponendo che il lavoro sia vincolato dalla CPU e si stia all'interno di una serie di CPU in cui le differenze tra i numeri di modello sono principalmente la velocità di clock, allora la differenza tra CPU diversamente sincronizzata ma altrimenti identica sarà approssimativamente proporzionale alla differenza in velocità di clock.

Il cambio tra diverse revisioni della stessa famiglia di CPU può modificare significativamente il comportamento. Sebbene le istruzioni di assemblatore sottostanti elaborate possano essere in gran parte identiche, l'ottimizzazione dell'hardware può essere significativamente diversa in un modo che influisce sul tuo particolare compito. Potrebbero esserci meno opportunità per l'esecuzione parallela, la pipeline di comando e la previsione dei rami potrebbero essere meno favorevoli, oppure alcune delle istruzioni assembler potrebbero essere implementate come microcodice (un mini programma software all'interno della CPU) e richiedere molti più cicli di CPU per completare. / p>

Il passaggio tra le architetture della CPU, come il passaggio da x86 a ARM o XScale, rende più probabile tutto quanto sopra.

C'è anche un altro aspetto in questo. Il costo è anche più del semplice costo di acquisto della CPU. Vi è un chipset più ampio che è necessario sulla scheda del processore, e quindi, a seconda dell'ambiente operativo, il costo dell'elettricità di far funzionare il processore (e alimentato a batteria, il differenziale di costo per batterie più grandi / più piccole), e anche il costo di sostituzione per CPU guaste. Le CPU in esecuzione più calde non durano a lungo.

    
risposta data 09.02.2016 - 17:58
fonte

Leggi altre domande sui tag