Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-05-2007, 20: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, 20: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, 20: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, 21: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, 21: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, 21: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, 21: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 21:08.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2007, 21: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, 21: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, 21: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, 21: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, 21: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, 21: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, 21: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, 22:24   #15
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19150
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, 00: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, 00: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, 00: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, 00:24   #19
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19150
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, 00: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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
26 offerte Amazon da non perdere, da iPh...
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: 17:38.


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