Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-04-2006, 12:54   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6635
Vector ed iteratori in C++

Sto facendo un risolutore di labirinti in cui uso molti cicli. Per cercare di velocizzare il tutto ho usato i vector e gli iteratori del tipo:

vector<int> nodiaperti;
vector<int>::iterator iteratore_nodiaperti;

I cicli li faccio del tipo:

while(iteratore_nodiaperti!=nodiaperti.end())
{ corpo del while

iteratore_nodiaperti++;
}

Il problema è che non ho notato alcun miglioramento in termini di prestazioni ,anzi in alcuni casi il tempo di risoluzione del labirinto aumenta molto rispetto a quando usavo vettori statici e ci accedevo con un semplice indice intero. Ora mi chiedo, ma i vector, sono più lenti da scorrere rispetto a vettori di int semplici? Hanno molti metodi associati questo è vero, pero' forse perdono in velocità, boh. Premetto che il codice non dà alcun tipo di errore.

Ultima modifica di Unrue : 21-04-2006 alle 12:57.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2006, 22:16   #2
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Hai compilato in Debug o Release?
fek è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2006, 22:29   #3
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6635
Quote:
Originariamente inviato da fek
Hai compilato in Debug o Release?
Ehm, che intendi? Ho compilato con il comando Run del Borland C++ Builder 6. Posso dirti che il programma con i vettori statici lo avviavo direttamente dal file.exe, quello con i vector lo avviavo compilandolo dal compilatore

Ultima modifica di Unrue : 21-04-2006 alle 22:34.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2006, 12:53   #4
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da Unrue
Il problema è che non ho notato alcun miglioramento in termini di prestazioni ,anzi in alcuni casi il tempo di risoluzione del labirinto aumenta molto rispetto a quando usavo vettori statici e ci accedevo con un semplice indice intero. Ora mi chiedo, ma i vector, sono più lenti da scorrere rispetto a vettori di int semplici? Hanno molti metodi associati questo è vero, pero' forse perdono in velocità, boh. Premetto che il codice non dà alcun tipo di errore.
E' chiaro che più aggiungi livelli di astrazione, più rallenti la velocità pura. Fai un bilancio tra la velocità di cui necessiti e quanto l'astrazione ti facilita la vita. Se risparmi molto brain-time, usa costrutti di più alto livello. Altrimenti divertiti con gli array.
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2006, 16:34   #5
84seawolf
Member
 
Iscritto dal: Apr 2006
Messaggi: 89
Risposta

Sebbene le STL siano ottimizzate (per ottimizzate intendo buon compromesso tra velocità di elaborazione e funzioni messe a disposizione), possono capitare casi in cui è vitale una prestazione (in termini di velocità) elevata. In tal caso, se non ti servono tutte le funzioni aggiuntive messe a disposizione dalle STL, ti consiglio di utilizzare gli array statici "classici" sicuramente + veloci.
84seawolf è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 01:49   #6
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Unrue
Ehm, che intendi? Ho compilato con il comando Run del Borland C++ Builder 6. Posso dirti che il programma con i vettori statici lo avviavo direttamente dal file.exe, quello con i vector lo avviavo compilandolo dal compilatore
Puoi compilare l'eseguibile con o senza ottimizzazioni (release o debug). Con tutte le ottimizzazioni attivate il tuo codice che usa std::vector e' perfettamente equivalente alla versione che usa gli array. Senza ottimizzazioni attivate e' invece molto piu' lenta. Assicurati di compilare una versione ottimizzata.

Nel 99.9% dei casi, per te, std::vector e' piu' che efficiente e non ti capitera' mai di aver bisogno di usare gli array nativi.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 16:23   #7
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6635
Quote:
Originariamente inviato da fek
Puoi compilare l'eseguibile con o senza ottimizzazioni (release o debug). Con tutte le ottimizzazioni attivate il tuo codice che usa std::vector e' perfettamente equivalente alla versione che usa gli array. Senza ottimizzazioni attivate e' invece molto piu' lenta. Assicurati di compilare una versione ottimizzata.

Nel 99.9% dei casi, per te, std::vector e' piu' che efficiente e non ti capitera' mai di aver bisogno di usare gli array nativi.
Grazie! Questa non la sapevo.Ma , più in dettaglio, in cosa consistono queste ottimizzazioni? ciao
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:22   #8
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Unrue
Grazie! Questa non la sapevo.Ma , più in dettaglio, in cosa consistono queste ottimizzazioni? ciao
Le ottimizzazioni che puo' fare il compilatore sono tantissime. Nel tuo caso quella piu' importante e' l'"inlining": al posto di fare chiamate ai metodi della classe vector, il compilatore e' in grado (in particolari condizioni) di prendere il codice di questi metodi e metterlo direttamente al punto di chiamata, evitando di chiamare il metodo. Il codice che ne esce e' esattamente uguale a quello che tu avresti scritto senza usare la classe vector.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 21:45   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da fek
Le ottimizzazioni che puo' fare il compilatore sono tantissime. Nel tuo caso quella piu' importante e' l'"inlining": al posto di fare chiamate ai metodi della classe vector, il compilatore e' in grado (in particolari condizioni) di prendere il codice di questi metodi e metterlo direttamente al punto di chiamata, evitando di chiamare il metodo. Il codice che ne esce e' esattamente uguale a quello che tu avresti scritto senza usare la classe vector.
ho esperienza passata col BCB (soprattutto con Delphi in realtà), ma da quel poco che ricordo non è come in Visual C++ dove puoi scegliere la configurazione cambiando al volo tutte le opzioni per la command line del compilatore; là si compila sempre allo stesso modo.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2006, 22:48   #10
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6635
Quote:
Originariamente inviato da fek
Le ottimizzazioni che puo' fare il compilatore sono tantissime. Nel tuo caso quella piu' importante e' l'"inlining": al posto di fare chiamate ai metodi della classe vector, il compilatore e' in grado (in particolari condizioni) di prendere il codice di questi metodi e metterlo direttamente al punto di chiamata, evitando di chiamare il metodo. Il codice che ne esce e' esattamente uguale a quello che tu avresti scritto senza usare la classe vector.

Dunque, se non ho capito male, se in un programma so che una funzione verrà chiamata molte volte, conviene dichiararla inline vero? Questo pero' se il corpo della funzione non è troppo grosso. Quali sono le controindicazioni?

Ultima modifica di Unrue : 23-04-2006 alle 22:51.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 09:16   #11
84seawolf
Member
 
Iscritto dal: Apr 2006
Messaggi: 89
come sempre ci sono dei compromessi: utilizzando inline certamente l'esecuzione di funzioni è molto + veloce....

ho detto esecuzione perchè non vengono effettuate chiamate (è come se tu copiassi ogni volta il codice della funzione nel punto in cui viene utilizzata). Tuttavia, specialmente se utilizzi numerose funzioni abbastanza corpose (e le utilizzi spesso), ciò può provocare un'occupazione di memoria notevole.

Scegli in base alle tue specifiche esigenze.
84seawolf è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 09:18   #12
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da Unrue
Dunque, se non ho capito male, se in un programma so che una funzione verrà chiamata molte volte, conviene dichiararla inline vero? Questo pero' se il corpo della funzione non è troppo grosso. Quali sono le controindicazioni?
Non usarlo molto se devi fare una cosa tipo questa
http://www.theprodukkt.com/kkrieger.html
(per chi non ha mai visto un gioco che sta in 96kb!)
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 12:25   #13
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6635
Quote:
Originariamente inviato da shinya
Non usarlo molto se devi fare una cosa tipo questa
http://www.theprodukkt.com/kkrieger.html
(per chi non ha mai visto un gioco che sta in 96kb!)
Come può un gioco in grafica tridimensionale stare in soli 96kb?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 12:29   #14
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6635
Quote:
Originariamente inviato da 84seawolf
come sempre ci sono dei compromessi: utilizzando inline certamente l'esecuzione di funzioni è molto + veloce....

ho detto esecuzione perchè non vengono effettuate chiamate (è come se tu copiassi ogni volta il codice della funzione nel punto in cui viene utilizzata). Tuttavia, specialmente se utilizzi numerose funzioni abbastanza corpose (e le utilizzi spesso), ciò può provocare un'occupazione di memoria notevole.

Scegli in base alle tue specifiche esigenze.
Nel mio progetto ho una funzione di circa 20 righe che viene chiamata un casino di volte. Ora provo a farla inline
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 12:39   #15
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da Unrue
Come può un gioco in grafica tridimensionale stare in soli 96kb?
Ci sta.
Ma devi essere fuso di testa.
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 14:08   #16
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Unrue
Dunque, se non ho capito male, se in un programma so che una funzione verrà chiamata molte volte, conviene dichiararla inline vero? Questo pero' se il corpo della funzione non è troppo grosso. Quali sono le controindicazioni?
Si', anzi Ni'.

Come regola generale non dichiarare mai nulla inline mentre scrivi il codice, soprattutto in progetti molto grossi, perche' per svariati motivi tende a rallentare di molto la compilazione e... tanto non cambia nulla a livello di velocita' nel 99.99% dei casi se hai un buon compilatore.

La direttiva 'inline' e' solo un consiglio che dai al compilatore e come tutti i consigli il compilatore puo' ignorarli e spesso e volentieri lo fa (secondo alcune metriche sue). Se dichiari inline un metodo molto corposo, sicuramente il compilatore lo ignorera'. Inoltre i compilatori di ultima generazione sono in grado di mettere inline anche metodi che tu non hai dichiarato inline, quando ci sono le condizioni.

In conclusione: non dichiarare nulla inline, e usa un ottimo compilatore. Avrai il meglio dai due mondi.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 14:10   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da shinya
Ci sta.
Ma devi essere fuso di testa.
ci sta ma non funziona più che altro: da me non parte, non penso sia un problema di requisiti.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 14:14   #18
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Unrue
Nel mio progetto ho una funzione di circa 20 righe che viene chiamata un casino di volte. Ora provo a farla inline
20 righe sono già troppe per l'inline; l'inlining (se non addirittura una bella macro) si usa quando hai del codice che viene usato spesso è che è talmente ridotto da non valere la pena della creazione di uno stack frame e del codice di chiamata a funzione.
per esempio su MFC (un popolare framework a oggetti per la programmazione Win32) molti metodi di alcune classi altro non fanno che chiamare la funzione API Win32 omonima passandogli un handle ricavato dal this; tutti quei metodi sono inline, ed è un'ottima scelta perché se non lo fossero avresti al momento della chiamata due stack frames letteralmente identici anziché uno. e nota bene che sono tutti metodi da una sola riga di codice, perché devono solo fare la chiamata
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2006, 14:21   #19
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da 71104
ci sta ma non funziona più che altro: da me non parte, non penso sia un problema di requisiti.
Strano...io la provai a suo tempo quando uscì. Usi xp o qualcos'altro? (un mio amico usa win 2003 server e ha qualche problema con queste cose)

Comunque, sta in 96kb...quindi qualche problema di compatibilità gliela possiamo pure tollerare
shinya è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Zscaler Threat Report 2026: l'adozione d...
Claude AI minaccia omicidi e ricatti qua...
Dentro la gara: a Milano Cortina 2026 i ...
Samsung Display presenta QD-OLED Penta T...
KONAMI torna con "Silent Hill: Town...
Rende il citofono smart a 44,99€: Ring I...
ThunderX3 XTC, la sedia da ufficio che s...
Mercy, Mission Impossible, Aronofsky: il...
Project Windless: il nuovo action in esc...
Saros: mostrato il gameplay del gioco de...
God of War: Sons of Sparta annunciato e ...
John Wick torna in un nuovo videogioco a...
MADE chiude il 2025 con 59 partner e 250...
007 First Light: allo State of Play un n...
Gli iPhone su Amazon costano meno che su...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:03.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v