Domanda

Mi è stato chiesto di recente al prodotto il MIPS (milioni di istruzioni al secondo) per un algoritmo che abbiamo sviluppato. L'algoritmo è esposto da una serie di funzioni in stile C. Abbiamo esercitare il codice su un Dell Axim al benchmark delle prestazioni in ingresso differente.

Questa domanda è venuto dal nostro fornitore dell'hardware, ma sono per lo più uno sviluppatore di software HL quindi non sono sicuro di come rispondere alla richiesta. Forse qualcuno con simili HW / SW sfondo può aiutare ...

  1. Dato che il nostro algoritmo non è in tempo reale, non credo che abbiamo bisogno di quantificare come MIPS. E 'possibile citare semplicemente il numero totale di istruzioni di montaggio?

  2. Se uno è vero, come si fa a fare questo (cioè. Come misurare il numero di istruzioni di montaggio) in generale o specifico per ARM / XScale?

  3. Può 2 essere eseguita su un dispositivo WM o tramite l'emulatore di dispositivo fornito in VS2005?

  4. Può essere automatizzato 3?

Grazie mille per il vostro aiuto. Charles


Grazie per il vostro aiuto. Credo che S. Lott ha colpito il chiodo. E come un follow-up, ora ho altre domande.

5 Qualsiasi suggerimento su come fare per misurare MIPS? Ho sentito qualcuno suggerire in esecuzione il nostro algoritmo e nel confronto con benchmark Dhrystone / Whetstone per calcolare MIS.

6 Poiché l'algoritmo non ha bisogno di essere eseguito in tempo reale, è MIPS in realtà una misura utile? (Ad es. Fattoriale (N)) Quali sono altri modi per quantità i requisiti di elaborazione? (Ho già misurato le prestazioni di esecuzione ma non era una risposta soddisfacente.)

7 Infine, suppongo MIPS è una stima approssimativa e sarebbe dep. il compilatore, le impostazioni di ottimizzazione, ecc?

È stato utile?

Soluzione

Scommetto che il fornitore dell'hardware sta chiedendo quanti MIPS è necessario.

Come in "Hai bisogno di un processore 1000 MIPS o un processore 2.000 MIPS?"

Il che si traduce da una gestione in "Quanti MIPS?"

Hardware offre MIPS. Software consuma MIPS.

Hai due gradi di libertà.

  • inerente offerta MIPS del processore.

  • Il numero di secondi durante i quali si consumano che molti MIPS.

Se il processore non ha abbastanza MIPS, l'algoritmo sarà "lenta".

Se il processore MIPS ha abbastanza, l'algoritmo sarà "veloce".

ho messo "veloce" e "lento" tra virgolette perché è necessario avere un requisito di prestazione per determinare "abbastanza veloce per soddisfare il requisito performance" o "troppo lenta per soddisfare il requisito prestazioni".

Su un processore MIPS 2000, si potrebbe prendere un accettabile 2 secondi. Ma su un processore 1000 MIPS questo esplode a un'inaccettabile 4 secondi.


Quanti MIPS avete bisogno?

  1. I MIPS ufficiali per il processore. Vedere http://en.wikipedia.org/wiki/Instructions_per_second

  2. Esegui vostro algoritmo su alcuni dati.

  3. Misurare il tempo esatto di esecuzione. Nella media un gruppo di campioni per ridurre l'incertezza.

  4. Report. 3 secondi su un processore 750 MIPS è - ben - 3 secondi a 750 MIPS. MIPS è un tasso. Il tempo è il tempo. Distanza è il prodotto del tempo tasso *. 3 secondi a 750 MIPS a 750 * 3 milioni di istruzioni.

Ricordate Tasso (in istruzioni al secondo) * Tempo (in secondi) fornisce le istruzioni.

Non dire che è 3 * 750 MIPS. E non lo è; è 2250 milioni di istruzioni.

Altri suggerimenti

Alcune note:

  1. MIPS è spesso usato come un generale "capacità" misura per i processori, soprattutto nel campo soft real-time / embedded in cui si vuole garantire che non sovraccaricare un processore con il lavoro. Si noti che questo è istruzioni al secondo, come il tempo è molto importante!

  2. MIPS utilizzato in questo modo è molto poco scientifico.

  3. MIPS utilizzati in questo modo è ancora spesso la migliore approssimazione è per il dimensionamento di un sistema e determinare la velocità del processore. Potrebbe anche essere fuori del 25%, ma non importa ...

  4. Il conteggio MIPS richiede un processore che è vicino a quello che si sta utilizzando. Il set di istruzioni a destra è ovviamente cruciale, di catturare il flusso di istruzioni reale dal compilatore reale in uso.

Non si può in alcun modo approssimare questo su un PC. È necessario mettere in evidenza uno dei pochi strumenti per fare questo diritto:

  1. Utilizzare un simulatore di set di istruzioni per l'archicture bersaglio come Qemu, propri strumenti di ARM, Synopsys, CoWare, Virtutech o VAST. Questi sono veloci, ma possono contare istruzioni abbastanza bene, e sosterrà il giusto set di istruzioni. Blocco largo uso di istruzioni costosi come integer divide (e piacere senza virgola mobile), questi numeri tendono ad essere utilmente chiudere.

  2. Trova un orologio-ciclo simulatore di preciso per il processore di destinazione (o qualcosa di simile), che darà ancora una volta piuttosto buona stima degli effetti gasdotti ecc, a farla da ARM o da Carbon SoCDesigner.

  3. Ottenere una scheda di sviluppo per la famiglia di processori si prendono di mira, o un ARM vicino ad esso la progettazione, e il profilo dell'applicazione lì. Non si utilizza un ARM9 al profilo di un ARM11, ma un ARM11 potrebbe essere una buona approssimazione per un ARM Cortex-A8 / A9 per esempio.

MIPS è generalmente utilizzato per misurare la capacità di un processore.

Gli algoritmi di solito prendere uno:

  1. una certa quantità di tempo (se in esecuzione su un determinato processore)
  2. un certo numero di istruzioni (a seconda dell'architettura)

Nel descrivere un algoritmo in termini di istruzioni al secondo sembrerebbe come una misura di strano, ma, naturalmente, non so che cosa il vostro algoritmo fa.

Per trovare una misura significativa, vorrei suggerire che si imposta un test che consente di misurare il tempo medio necessario per il vostro algoritmo per completare. Numero di istruzioni di montaggio sarebbe una misura ragionevole, ma può essere difficile contarli! La cosa migliore è qualcosa di simile (pseudo-codice):

const num_trials = 1000000
start_time = timer()
for (i = 1 to num_trials)
{
    runAlgorithm(randomData)
}
time_taken = timer() - start_time
average_time = time_taken / num_trials

MIPS sono una misura della velocità della CPU, non le prestazioni algoritmo. Posso solo supporre la da qualche parte lungo la linea, qualcuno è un po 'confuso. Cosa stanno cercando di scoprire? L'unico scenario probabile che posso pensare è che stanno cercando di aiutare a determinare quanto velocemente un processore di cui hanno bisogno per darvi per eseguire il programma in modo soddisfacente.

Dato che è possibile misurare un algoritmo in numero di istruzioni (che è senza dubbio andando a dipendere dai dati di input, quindi questo non è banale), è quindi necessario un certo grado di tempo al fine di ottenere MIPS - per esempio , dire "ho bisogno di invocarlo 1000 volte al secondo". Se l'algoritmo è di 1000 istruzioni per quel caso specifico, ci si ritroverà con:

1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

Continuo a pensare che sia un modo davvero strano per cercare di fare le cose, quindi si consiglia di chiedere chiarimenti. Per quanto riguarda le vostre domande specifiche, lascio che a qualcuno più familiarità con Visual Studio.

Ricorda inoltre che diversi compilatori e le opzioni di compilazione fare una differenza enorme. Lo stesso codice sorgente può essere eseguito in molti diverse velocità. Così, invece di acquistare il processore 2mips si può essere in grado di utilizzare il processore da 1 / 2mips e utilizzare un opzione del compilatore. O spendere i soldi su un compilatore migliore e più conveniente utilizzare il processore.

Il benchmarking è viziata al meglio. Come hobby che ho usato per compilare il codice stesso Dhrystone (e cote) su vari compilatori di vari fornitori per lo stesso hardware ed i numeri sono stati in tutto il luogo, gli ordini di grandezza. Lo stesso codice sorgente stesso processore, Dhrystone non ha ancora dire una cosa, non è utile come una linea di base. Ciò che conta in benchmarking è quanto velocemente fa la corsa algoritmo, era meglio essere il più veloce o più velocemente di quanto è necessario. A seconda di quanto vicino al traguardo che si sta permette per un sacco di slop. Nella fase iniziale il probabilmente vuole essere in esecuzione 5 o 10 o 100 volte più velocemente di quanto è necessario in modo che entro la fine del progetto si è almeno un po 'più velocemente di quanto è necessario essere.

Sono d'accordo con quello che penso S. Lott sta dicendo, questo è tutto vendite e marketing e la gestione parlare. Essendo quello che la direzione ha messo tra l'incudine e il martello, allora ciò che devi fare è convincerli a comprare il processore più veloce e migliori strumenti che sono disposti a spendere in base ai grafici a torta colorati e grafici che si sta per generare dal nulla come giustificazione. Se verso la fine della strada doesnt abbastanza soddisfare le prestazioni, allora si potrebbe tornare a StackOverflow, ma allo stesso tempo la gestione sarà costretto a comprare una toolchain diverso in quasi tutti i processori di prezzo o di swap e respin la scheda. A quel punto si dovrebbe sapere come vicino al bersaglio sei, abbiamo bisogno di 1.0 e siamo a 1.25 se compriamo il processore che è due volte più veloce di quello che abbiamo comprato noi dovrebbe rendere.

O se non è possibile automatizzare questo tipo di cose o di simulare loro dipende dagli strumenti, a volte sì, a volte no. Non ho familiarità con gli strumenti che si sta parlando in modo Non posso parlare a loro direttamente.

Questa risposta non è destinato a rispondere alla domanda direttamente, ma di fornire contesto aggiuntivo intorno perché questa domanda viene chiesto.

MIPS per un algoritmo è rilevante solo per gli algoritmi che hanno bisogno di rispondere a un evento entro il tempo desiderato.

Per esempio, si consideri un controllore atto a rilevare la velocità del vento e spostare l'attuatore in un secondo quando la velocità del vento attraversa 25 miglia / ora. Diciamo che ci vuole 1000 istruzioni per calcolare e confrontare la velocità del vento rispetto alla soglia. Il requisito MIPS per questo algoritmo è di 1 Kilo istruzioni al secondo (Kips). Se il controller è basato su 1 processore MIPS, possiamo tranquillamente dire che c'è più succo nel controllore per aggiungere altre funzioni.

Quali altre funzioni potrebbero essere aggiunte sul controller? Questo dipende dalle MIPS della funzione / algoritmo da aggiungere. Se c'è un'altra funzione che ha bisogno di 100.000 istruzioni da eseguire in un secondo (cioè 100 Kips), possiamo ancora accogliere questa nuova funzione e avere ancora spazio per altre funzioni da aggiungere.

Per una prima stima un punto di riferimento sul PC può essere utile.

Tuttavia, prima di impegnarsi a una frequenza dispositivo specifico e l'orologio si dovrebbe ottenere una scheda di sviluppatore (o un PDA?) Per l'architettura ARM e di destinazione di riferimento lì.

Ci sono un sacco di fattori che influenzano la velocità su macchine di oggi (caching, oleodotti, diversi set di istruzioni, ...) in modo che le benchmark su un PC possono essere lontano w.r.t. ARM.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top