Errori, bug, domande - pagina 2161
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Controlliamo attentamente l'intero codice. È interessante scoprire quale sia la vera ragione.
Fico! Grazie! Anch'io sono interessato.
E sqrt è davvero molto veloce. Meno di un nanosecondo :)). Fantastico!
Ho provato con un array statico - stessa cosa.
Per quanto sqrt sia veloce, trovo difficile credere che questa funzione possa essere 10 volte più veloce della semplice lettura di un elemento dell'array.
A questo punto, molte delle vecchie tecniche di ottimizzazione non funzionano più.
Inoltre, se nel mio esempio per ridurre la dimensione della tela, diciamo 50x50 (per questo c'è un parametro di input Size, è necessario impostare 50 invece di 0),
e l'array sarà molto più piccolo (5000 elementi), il quadro della velocità cambia significativamente. Non c'è più un contrasto così forte.
Ma quello che non capisco è: la dimensione dell'array influenza la velocità di accesso ai suoi elementi?
Non c'è nessuna prova pulita dei vostri calcoli, state facendo delle ipotesi basate su un codice molto litigioso.
Stai trascurando una tonnellata di calcoli ausiliari che sono nel tuo codice e hanno un impatto significativo sui risultati.
Non c'è nessuna prova pulita dei vostri calcoli, state facendo ipotesi basate su un codice molto incasinato.
Stai trascurando una tonnellata di calcoli ausiliari che sono nel tuo codice e hanno un impatto significativo sui risultati.
Tutto quello che posso vedere è che solo cambiando sqrt con una semplice lettura da un array, la velocità di calcolo complessiva scende di un fattore 4. E la proporzione complessiva di sqrt in questo calcolo piuttosto grande di ogni pixel è appena superiore al 10%, o addirittura a qualche %.
Una chiara anomalia!
Ho anche fatto l'errore di dire che il tempo di accesso a un elemento dell'array è 10 volte il tempo sqrt. Molto di più visto che sqrt è così veloce e il rallentamento generale è così grande.
Posso solo vedere che cambiando semplicemente sqrt con una semplice lettura da un array, la velocità di calcolo complessiva scende di un fattore 4. E la proporzione complessiva di sqrt in questo calcolo piuttosto grande di ogni pixel è appena superiore al 10%, o addirittura a qualche %.
Una chiara anomalia!
Ho spiegato il perché. Le ottimizzazioni della matematica degli anni novanta non funzionano più.
Ma voi continuate a fare le seguenti affermazioni basate su codice reale disseminato. Sul piano vegetale si sbagliano.
A questo livello di [dis]purezza tecnica non discuterò le questioni.
Ho spiegato il perché. Le ottimizzazioni della matematica degli anni novanta non funzionano più.
Ma voi continuate a fare le seguenti affermazioni basate su un codice davvero litigioso. Plausibilmente difettoso.
A questo livello di [dis]purezza tecnica non discuterò le questioni.
Non capisco di quale ottimizzazione matematica stia parlando. E non stavo facendo alcuna affermazione, mi stavo solo chiedendo qual è la fonte dei freni.
Dov'è il disordine e l'ottimizzazione in questo codice originale?
È possibile utilizzare questo codice più generico, ma grazie all'uso di loop e array la velocità di inquadratura dell'immagine è quasi dimezzata:
Ottimizzazione matematica: provare a usare gli array invece di sqrt.
Non vedete il disordine e questa è la radice del vostro fraintendimento delle regole del performance testing. Se testate l'array precalcolato rispetto al calcolo, dovete rimuovere tutto il superfluo. Assolutamente tutto ciò che non è necessario.
Lei ha fatto molte affermazioni. Bisogna saper leggere i testi dalla parte del destinatario e ripulirli dalle difese non funzionanti dell'autore.
Ottimizzare la matematica: provare a usare gli array invece di sqrt.
Oh, al diavolo sqrt. Ho già capito che nel caso di questa particolare funzione non ha senso. Cosa c'è di male nel provare? Ma ora lo so.
A proposito, usare l'array h[] in questo esempio dà anche un notevole guadagno di velocità invece di usare sin().
La domanda riguarda un'altra cosa:
Perché l'uso dell'accesso alle celle di una grande matrice aumenta il tempo di calcolo di parecchie volte quando ci si aspettava solo qualche punto percentuale?
Tu non vedi la spazzatura e questa è la radice del tuo fraintendimento delle regole del test delle prestazioni.Se stai testando l'array precalcolato rispetto al calcolo, devi rimuovere tutto il superfluo. Assolutamente tutto ciò che non è necessario.
Sai, Renat, non è una vergogna ricevere uno schiaffo da te, ma addirittura un onore.
Per come la vedo io, la spazzatura è qualcosa di inutile che può e deve essere rimosso. Ma in questo caso non c'è niente da pulire, altrimenti il codice smetterà di funzionare.
Non sto testando"array precalcolato vs calcolo", ma analizzando la velocità di formazione dei frame.
Nel mio caso non ho bisogno di alcun test, perché ho un portatile debole e posso vedere la differenza tra 25 fps e 6 fps senza alcun test.
Le affermazioni che avete fatto sono enormi. Bisogna saper leggere i testi dalla parte del destinatario e liberarli dalle difese non funzionanti dell'autore.
Ho fatto solo un paio di supposizioni, non affermazioni:
- "È logico supporre che la lettura dall'array SQRT[x] sia più veloce della funzione sqrt(x)".
-"Si potrebbe supporre che il compilatore stia accedendo ad un grande array in qualche modo strano, e ad ogni giro di loop sembra "dimenticare" l'array e fare ogni volta una sorta di indicizzazione di servizio. "
Ma mi azzardo ancora a fare questa affermazione perché anche se sono un programmatore autodidatta, ma autodidatta con grande esperienza e capisco qualcosa dei processi all'interno del processore, perché c'è stato un tempo in cui il mio programma preferito era Numega SoftIce, attraverso il quale ho scavato attraverso tonnellate di codice alieno a livello assembler.
- Vi assicuro che c'è un bug algoritmico nel vostro compilatore, riguardante l'accesso agli array, (forse appare solo con array sufficientemente grandi), che il vostro team troverà facilmente, se mettete vettori di sforzo in questa direzione. E il mio esempio vi aiuterà.
Potrei anche argomentare. ))
Quando si esegue il loop di una tabella, ogni volta che si accede ad essa, è probabile che sia nella cache del processore. Questo è il motivo per cui funziona più velocemente.
Se c'è del codice tra gli accessi, è probabile che ci sia un cache miss. Questo spiega anche la differenza nella gestione di un tavolo grande e piccolo.
Inoltre, ci sono altri casi non ovvi. Quindi è necessario testare la versione finale non semplificata del codice.
Ragazzi, ditemi come nei modelli di funzione per determinare che la funzione con tipo enum è chiamata?