Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-05-2007, 21:24   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
memoria condivisa - devo flushare?

parlando sia di Linux che di Windows, se utilizzo un file mappato per creare una zona di memoria condivisa tra processi, oltre a dovermi sincronizzare con mutex e quant'altro per mantenere la consistenza dei dati condivisi devo anche flushare la cache del processore in un ambiente multicore? o ci pensa in qualche modo già l'architettura hardware in maniera a me trasparente?

per ragionare in termini pratici: mettiamo che sono su Windows e ho un file mappato creato come parte del file di swap (una pura area di memoria condivisa insomma); e mettiamo che nella zona di memoria condivisa ho una lista (e i link della lista sono espressi come offset anziché come puntatori perché la zona di memoria può essere mappata ad indirizzi diversi in processi diversi, ma vabbè). inoltre ho anche un mutex su cui un processo deve bloccarsi quando vuole aggiungere o togliere nodi; prima di rilasciare il mutex il processo deve anche assicurarsi che i cambiamenti siano andati in memoria fisica flushando la cache del core su cui ha lavorato?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 21:26   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ah, ed inoltre dovrei dichiarare i nodi della lista come volatile per impedire al compilatore di ottimizzare cachandoli nei registri, giusto?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 21:44   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da 71104 Guarda i messaggi
prima di rilasciare il mutex il processo deve anche assicurarsi che i cambiamenti siano andati in memoria fisica flushando la cache del core su cui ha lavorato?
Che io sappia no. In u ambiente SMP ci sono algoritmi per la cache snoop delle altre CPU che dovrebbero evidenziare la presenza dal dato in cache...se il thread/processo invece termina il suo time slice, la cache viene automaticamente flushata e quindi le locazioni modificate vengono scritte in memoria.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:01   #4
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da 71104 Guarda i messaggi
parlando sia di Linux che di Windows, se utilizzo un file mappato per creare una zona di memoria condivisa tra processi, oltre a dovermi sincronizzare con mutex e quant'altro per mantenere la consistenza dei dati condivisi devo anche flushare la cache del processore in un ambiente multicore? o ci pensa in qualche modo già l'architettura hardware in maniera a me trasparente?
Confermando quanto detto da cionci, sì, se ne occupa l'hardware / il kernel (almeno, ti parlo di kernel Linux, ma non credo che con Win Vista la situazione sia troppo diversa).
Comunque non afferro il problema...
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:04   #5
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da 71104 Guarda i messaggi
ah, ed inoltre dovrei dichiarare i nodi della lista come volatile per impedire al compilatore di ottimizzare cachandoli nei registri, giusto?
Se non vuoi che il compilatore faccia "ipotesi" su quelle variabili quindi fare cache o "predizioni" sui valori, sì.
Però, come prima, mi sa che mi sono perso qualcosa sul fine ultimo del tutto...
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:04   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Il problema a cui si riferiva è che essendo i dati in cache non ancora scritti, un eventuale secondo processore avrebbe trovato dati non aggiornati in memoria centrale
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:05   #7
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da cionci Guarda i messaggi
Il problema a cui si riferiva è che essendo i dati in cache non ancora scritti, un eventuale secondo processore avrebbe trovato dati non aggiornati in memoria centrale
Ah, beh ma se dovessimo preoccuparci di questo saremmo proprio a posto
Meglio che lavorino alla Intel/AMD
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson

Ultima modifica di -fidel- : 14-05-2007 alle 22:08.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:08   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci Guarda i messaggi
Il problema a cui si riferiva è che essendo i dati in cache non ancora scritti, un eventuale secondo processore avrebbe trovato dati non aggiornati in memoria centrale
esatto, e nel caso di una lista doppiamente linkata "dati non aggiornati" potrebbe voler dire "inconsistenti" (es. un nodo punta al successivo come successore, il quale però punta due nodi addietro come predecessore). senza contare che se il flush (che sia dei registri o della cache) avvenisse in un momento non ben definito in cui il mutex non è bloccato, altri processi di fatto osserverebbero dei cambiamenti in un momento in cui il mutex appunto non è bloccato da chi li ha fatti.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:08   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
cmq grazie cionci; non me ne devo preoccupare dunque, mi basta volatile.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:11   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da -fidel- Guarda i messaggi
Ah, beh ma se dovessimo preoccuparci di questo saremmo proprio a posto
però intanto di dichiarare i nodi come volatili me ne sono dovuto preoccupare
le cose non sono del tutto trasparenti anche se in realtà in questo caso sarebbe un problema del compilatore e non dell'architettura.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:12   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da 71104 Guarda i messaggi
altri processi di fatto osserverebbero dei cambiamenti in un momento in cui il mutex appunto non è bloccato da chi li ha fatti.
Se succede significa che hai gestito male la mutua esclusione...quando rilasci la mutua esclusione i dati devono essere consistenti.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:16   #12
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da 71104 Guarda i messaggi
però intanto di dichiarare i nodi come volatili me ne sono dovuto preoccupare
Perchè? Per lo meno, "volatile" la si usa normalmente in ambiente multithread/multiprocesso (affinche il compilatore eviti race conditions al posto tuo ) ma in ambiente multiprocessore il tutto è lasciato all'hardware.
Fai bene a dichiarare i nodi come "volatile" ma non a causa un ambiente multiprocessore, ma di multithreading (comunque se usi una sezione critica fatta bene puoi anche evitare, non se4rve a nulla visto che da quel punto di vista non hai race conditions).
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:26   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci Guarda i messaggi
Se succede significa che hai gestito male la mutua esclusione...quando rilasci la mutua esclusione i dati devono essere consistenti.
non è detto che il flush avvenga prima del rilascio del mutex e non penso che sia possibile assumere che il flush di una locazione (ad es. quella di uno dei due link del nodo) implichi il flush di un'altra (quella dell'altro link). sequenza cronologica delle operazioni:
1) i due link vengono scritti nei registri; da questo momento il mutex per quanto ne so io (che non sono a conoscenza delle ottimizzazioni operate dal compilatore e dell'uso che fa dei registri) può essere rilasciato
2) il link al nodo precedente viene messo in memoria fisica
3) viene rilasciato il mutex
4) un thread che gira su un altro processore blocca il mutex e vede i dati inconsistenti
5) l'altro link viene messo in memoria fisica

quindi ciò che mi preme è che prima del rilascio del mutex tutto sia completamente flushato. visto che l'hardware mi rende la cache trasparente, io mi preoccupo solo dei registri, quindi uso volatile.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 22:36   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Mi sembra che tu ti stia facendo problemi inutili...stai programmando ad alto livello...a tutto il resto ci pensa l'hardware e il compilatore...

- acquisisci la mutex
- lavori sulla memoria condivisa
- rilasci la mutex quando la memoria condivisa è in uno stato consistente

Basta, te non devi pensare ad altro...se fai altre supposizioni sei fuori strada perché c'è il rischio che il tuo codice non funzioni su tutte le architetture
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 23:24   #15
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da cionci Guarda i messaggi
Mi sembra che tu ti stia facendo problemi inutili...stai programmando ad alto livello...a tutto il resto ci pensa l'hardware e il compilatore...

- acquisisci la mutex
- lavori sulla memoria condivisa
- rilasci la mutex quando la memoria condivisa è in uno stato consistente

Basta, te non devi pensare ad altro...se fai altre supposizioni sei fuori strada perché c'è il rischio che il tuo codice non funzioni su tutte le architetture
esattamente
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2007, 01:20   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
se il problema è reale io ci penso

anche perché sennò il prof mi chiede come mai non ho usato volatile per dichiarare dei dati usati da thread diversi, che quello è pignolo è
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2007, 01:21   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
e poi programmo ad alto livello per modo di dire: sto usando il C...
pensate che devo scrivere #ifndef __MACRO__, #define __MACRO__ all'inizio di ogni header, e ovviamente l'#endif alla fine
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2007, 01:23   #18
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104 Guarda i messaggi
e poi programmo ad alto livello per modo di dire: sto usando il C...
a-ehm, ci tengo a precisare che questa frase NON voleva significare "sto usando il CULO "
no perché poteva essere
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2007, 01:24   #19
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da 71104 Guarda i messaggi
e poi programmo ad alto livello per modo di dire: sto usando il C...
pensate che devo scrivere #ifndef __MACRO__, #define __MACRO__ all'inizio di ogni header, e ovviamente l'#endif alla fine
è una buonissima abitudine
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 15-05-2007, 01:29   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da recoil Guarda i messaggi
è una buonissima abitudine
si, solo che è un'abitudine trogloditica, come il resto di quel linguaggio
sono abituato al sistema di packaging di Java

e poi meno male che uso C99, sennò mi toccava pure dichiarare tutte le variabili all'inizio e dovevo rinunciare a const e alle variabili dichiarate nelle intestazioni dei for.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Sembra ormai certo: la prossima Xbox sar...
“Solutions Beyond Displays”: la strategi...
La società europea The Exploratio...
Dalle auto ai robot umanoidi: Faraday Fu...
Vodafone annuncia la dismissione di un s...
Stiga lancia i nuovi robot tagliaerba co...
Bullismo e cyberbullismo, Keenetic lanci...
Con AI Skills Checker Bitdefender mette ...
E-bike giapponese con 1.000 km di autono...
Un eVTOL con cui basta saper andare in b...
Dal mercato cinese al mondo: HONOR firma...
Sovranità digitale: l'UE sperimen...
Accesso alla memoria su Windows 11 solo ...
iPhone 18 Pro Max con batteria da oltre ...
Windows 11, cali di prestazioni sulle GP...
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: 05:51.


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