L'uso comune dell'Informatica di "ignorare le costanti" è utile quando si confronta l'informatica classica con l'informatica quantistica?


13

Daniel Sank ha menzionato in un commento , rispondendo alla (mia) opinione che l' accelerazione costante di su un problema che ammette un algoritmo di tempo polinomiale è scarsa, che108

La teoria della complessità è troppo ossessionata dai limiti di ridimensionamento delle dimensioni infinite. Ciò che conta nella vita reale è la velocità con cui ottieni la risposta al tuo problema.

In Informatica, è comune ignorare le costanti negli algoritmi e, tutto sommato, questo ha funzionato piuttosto bene. (Voglio dire, ci sono algoritmi buoni e pratici . Spero che mi concederai algoritmi (teorici) che i ricercatori hanno avuto una mano piuttosto grande in questo!)

Ma capisco che questa è una situazione leggermente diversa come ora siamo:

  1. Non confrontando due algoritmi in esecuzione sullo stesso computer, ma due algoritmi (leggermente) diversi su due computer molto diversi .
  2. Ora stiamo lavorando con computer quantistici , per i quali forse le tradizionali misurazioni delle prestazioni potrebbero essere insufficienti.

In particolare, i metodi di analisi dell'algoritmo sono semplicemente metodi . Penso che metodi di elaborazione radicalmente nuovi richiedano una revisione critica dei nostri attuali metodi di valutazione delle prestazioni!

Quindi, la mia domanda è:

Quando si confrontano le prestazioni degli algoritmi su un computer quantistico rispetto agli algoritmi su un computer classico, la pratica di "ignorare" le costanti è una buona pratica?


Ignorare le costanti non è nemmeno una buona idea nell'informatica classica. In che modo questa è una domanda di calcolo quantico e non una domanda su come pensare al ridimensionamento delle risorse dell'algoritmo? In altre parole, quando si parla del tempo o di altre risorse necessarie per eseguire un calcolo, se il calcolo è quantico o classico sembra irrilevante per la questione se ci si preoccupi o meno di un fattore di cento milioni di accelerazioni.
DanielSank

1
@DanielSank Come ho già detto, ignorare le costanti nell'analisi degli algoritmi ha funzionato piuttosto bene per il calcolo classico. È anche lo standard di fatto per i ricercatori di algoritmi . Sono abbastanza interessato a conoscere tutti quei ricercatori di algoritmi che apparentemente non sono d'accordo. Il motivo principale per cui sto ponendo questa domanda è che "ignorare le costanti" è una regola più che non per quasi tutti i ricercatori di algoritmi. Poiché sono sicuro che questo sito avrà tali persone come utili collaboratori, potrebbe essere interessante sapere se tale pensiero debba essere adattato quando si confronta il quantico con il classico.
Lucertola discreta,

3
Una chat interessante su questa domanda è qui .
DanielSank

Risposte:


9

L'uso comune di "ignorare le costanti" da parte dell'Informatica è utile solo quando le differenze nelle prestazioni di vari tipi di architettura hardware o software possono essere ignorate con un po 'di massaggio. Ma anche nel calcolo classico, è importante essere consapevoli dell'impatto dell'architettura (comportamento della cache, utilizzo del disco rigido) se si desidera risolvere problemi difficili o problemi di grandi dimensioni.

La pratica di ignorare le costanti non è una pratica motivata (nel senso di essere continuamente affermata) da un punto di vista dell'implementazione. È guidato principalmente da un interesse per un approccio allo studio di algoritmi che è ben educato sotto la composizione e ammette caratterizzazioni semplici, in un modo vicino alla matematica pura. I teoremi di accelerazione delle macchine di Turing significavano che qualsiasi definizione sensata non poteva tentare di definire la complessità dei problemi in modo troppo preciso per arrivare a una teoria sensata; e inoltre, nella lotta per trovare buoni algoritmi per problemi difficili, i fattori costanti non erano la parte matematicamente interessante ...

Questo approccio più astratto allo studio degli algoritmi è stato ed è ampiamente fruttuoso. Ma ora ci troviamo di fronte a una situazione in cui abbiamo due modelli di calcolo, dove

  • Uno è in uno stato avanzato di maturità tecnologica (calcolo classico); e
  • Uno è in uno stato molto immaturo, ma sta tentando di realizzare un modello teorico che può portare a significativi miglioramenti asintotici (calcolo quantistico).

In questo caso, possiamo chiederci se abbia persino senso considerare il beneficio asintotico, con o senza un'attenta contabilità dei fattori costanti. A causa dello sforzo supplementare che può essere richiesto per eseguire calcoli quantistici scalabili, non solo i fattori scalari ma anche gli "speedups" polinomiali nelle prestazioni teoriche possono essere eliminati una volta preso in considerazione tutto l'overhead nella realizzazione di un algoritmo quantistico.

In questi primi giorni, potrebbero esserci anche differenze significative nelle prestazioni rispetto ai diversi approcci all'architettura quantistica. Ciò potrebbe rendere la scelta dell'architettura importante (se non più importante) per quanto bene un algoritmo si comporta rispetto all'analisi asintotica - così come per te sarebbe molto importante che tu eseguissi il tuo calcolo convenzionale su una macchina von Neumann o su una rete altamente distribuita con latenze significative.

La cosa realmente importante per il calcolo pratico è - ed è sempre stata - non solo algoritmi, ma implementazioni di algoritmi : un algoritmo realizzato in un certo modo, su una certa architettura. La pratica comune dell'analisi asintotica che ignora i fattori costanti ci consente di prestare attenzione alle ragioni sistematiche e matematiche delle differenze nelle prestazioni degli algoritmi ed è praticamente motivata in quelle occasioni in cui le differenze architettoniche non sono così grandi da dominare le prestazioni pratiche .

Per quanto riguarda le tecnologie quantistiche, non ci troviamo in quella felice situazione in cui possiamo sorvolare in sicurezza fattori costanti in qualsiasi contesto pratico. Ma forse un giorno saremo in grado di farlo. Questo è il lungo gioco delle tecnologie dell'informazione quantistica - fino ad ora, quasi l'unico gioco che gli scienziati informatici accademici abbiano mai giocato, per quanto riguarda la tecnologia dell'informazione quantistica. Anticipando quel giorno in cui la tecnologia quantistica troverà le sue basi, sarà positivo per noi continuare a perseguire l'analisi asintotica, come una linea di indagine sulle prestazioni degli algoritmi quantistici.


Quindi, in conclusione, sembri essere a favore del "non buttare via le costanti", per ora , mentre siamo ancora nella fase in cui l' implementazione è cruciale. Interessante. Mi piace il tuo ragionamento, ma non sono leggermente d'accordo. Presto mi espanderò su questo in una mia risposta.
Lucertola discreta

1
@Discretelizard: sono a favore di non buttare via le costanti, in situazioni in cui le costanti fanno una differenza pratica. Ovviamente anche le costanti come 1e8 contano praticamente nel calcolo classico; ma possiamo ignorare tali costanti per cercare di trovare altri dettagli che potrebbero anche essere molto interessanti. Ma è anche vero che 1e8 è più importante nei confronti tra tecnologie quantistiche e classiche così come sono oggi, di quanto non contenga nel calcolo classico.
Niel de Beaudrap,

5

O(f[N])N

1010

300


2

Non è possibile ignorare i fattori costanti quando si confronta il calcolo quantistico con il calcolo classico. Sono troppo grandi.

Ad esempio, ecco un'immagine di alcune diapositive che ho presentato l'anno scorso:

quantistico e gate

Le cose sul fondo sono fabbriche di stato magico. Hanno un'impronta di qubit fisici di 150K. Poiché il gate AND utilizza 150 K qubit per 0,6 millisecondi, supponiamo che il volume spazio-tempo di un gate AND quantico sia dell'ordine di 90 qubit secondi.

Uno degli obiettivi dei miei colleghi è utilizzare 1 cpu per 100 qubit quando si esegue la correzione degli errori. Quindi potremmo dire che 90 qubit secondi richiedono 0,9 cpu di lavoro. Abbiamo reso le costruzioni quantistiche diverse volte più efficienti da quando è stata creata l'immagine sopra, quindi chiamiamola invece 0,1 cpu secondi.

(Ci sono molti presupposti che vanno in queste stime. Che tipo di architettura, tassi di errore, ecc. Sto solo cercando di trasmettere un'idea di ordine di grandezza.)

Sono necessarie 63 porte AND per eseguire un'aggiunta a 64 bit. 63 * 0,1 cpu secondi ~ = 6 cpu secondi. Quantomeno, un'aggiunta a 64 bit costa più di una CPU al secondo. Classicamente, un'aggiunta a 64 bit costa meno di un nanosecondo CPU. C'è facilmente una differenza di fattore costante di 10 miliardi qui. Se si confronta con una macchina classica parallela, come una GPU, i numeri peggiorano ulteriormente. Non puoi ignorare i fattori costanti con così tante cifre.

Ad esempio, si consideri l'algoritmo di Grover, che ci consente di cercare un input soddisfacente per una funzione nelle valutazioni sqrt (N) della funzione anziché nelle valutazioni N. Aggiungi il fattore costante di 10 miliardi e risolvi dove il computer quantistico inizia a richiedere meno valutazioni:

N>1010NN>1020

L'algoritmo di Grover non può parallelizzare le valutazioni e le valutazioni richiedono almeno un gate AND, quindi in pratica inizi a vedere i benefici del tempo della CPU solo quando la ricerca impiega decine di milioni di anni.

A meno che non rendiamo i fattori costanti molto migliori, nessuno userà mai la ricerca di Grover per qualcosa di utile. In questo momento la situazione quantistica vs classica è un vantaggio o un fallimento esponenziale.


1

Mentre le altre risposte forniscono buoni punti, mi sento ancora in disaccordo. Quindi, condividerò i miei pensieri su questo punto.

In breve, penso che presentare la costante "così com'è" sia un'opportunità sprecata al massimo. Forse è il meglio che possiamo ottenere per ora, ma è tutt'altro che ideale.

Ma prima, penso che una breve escursione sia essenziale.

Quando abbiamo un algoritmo efficace?

106

  1. P
  2. P2P
  3. P2

P2PPP2

Quindi, non è irragionevole che il nostro algoritmo di immondizia possa per coincidenza sembrare avere accelerazioni "miracolose". Ora, naturalmente, ci sono molte tecniche di progettazione di esperimenti che possono mitigare il rischio, ma forse algoritmi "veloci" più intelligenti che falliscono ancora in molti, ma non abbastanza esempi possono ingannarci! (nota anche che suppongo che nessun ricercatore sia dannoso , il che peggiora le cose!)

Quindi, ora risponderei: "Svegliami quando c'è una metrica delle prestazioni migliore".

Come possiamo fare di meglio, allora?

Se possiamo permetterci di testare il nostro algoritmo "scatola nera" su tutti i casi, non possiamo lasciarci ingannare da quanto sopra. Tuttavia, questo è impossibile per situazioni pratiche. (Questo può essere fatto in modelli teorici!)

Quello che invece possiamo fare è creare un'ipotesi statistica per un certo tempo di esecuzione parametrizzato (di solito per la dimensione dell'input) per testare questo, forse adattare la nostra ipotesi e testare di nuovo, finché non otteniamo un'ipotesi che ci piace e rifiutare il nulla sembra ragionevole. (Si noti che probabilmente ci sono altri fattori coinvolti che sto ignorando. Sono praticamente un matematico. Il disegno dell'esperimento non è qualcosa che rientra nelle mie competenze)

O(n3)

Quindi, cosa fare con le costanti?

109

Penso che sia molto utile considerare la costante curiosa come un'anomalia , cioè è un'affermazione che di per sé merita ulteriori indagini. Penso che la creazione di ipotesi basate su modelli più generali del semplice "nostro algoritmo richieda tempo X" sia un buon strumento per farlo. Quindi, anche se non penso che possiamo semplicemente prendere in considerazione le convenzioni CS qui, ignorare completamente lo "sdegno" per le costanti è anche una cattiva idea.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.