Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-06-2008, 17:35   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
[C] Letture concorrenti

Ciao,
che voi sappiate, se faccio due fread() contemporanee sullo stesso file, tali letture vengono sequenzializzate o vengono fatte in contemporanea?

Siccome la lettura non comporta criticità, suppongo di si, ma vorrei conferma.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2008, 17:45   #2
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Ciao,
che voi sappiate, se faccio due fread() contemporanee sullo stesso file, tali letture vengono sequenzializzate o vengono fatte in contemporanea?

Siccome la lettura non comporta criticità, suppongo di si, ma vorrei conferma.
La testina dell'hard disk e' una sola, e anche il cavo restituisce un flusso seriale.
Non possono che essere due letture sequenziali, prima una e poi l'altra.

forse non ho capito la domanda.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2008, 18:58   #3
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
La testina dell'hard disk e' una sola, e anche il cavo restituisce un flusso seriale.
Non possono che essere due letture sequenziali, prima una e poi l'altra.

forse non ho capito la domanda.
No dunque, la lettura fisica è una sola per forza, ma una volta che il file è caricato in memoria intendo, come si comportano le letture?
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 25-06-2008, 19:14   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Non ne sono certo e non ho provato, ma siccome vengono aperti due diversi descrittori, credo che leggano a partire dalle proprie posizioni, indipendentemente dall'altro file aperto. Per rendere sequenziali le due letture credo debbano far riferimento allo stesso descrittore, o aggiornare la posizione nel file a seconda della necessità.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2008, 10:03   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quoto DanieleC88,
se le due letture sono il prodotto dell'azione di due distinti file descriptor che puntano allo stesso file, sono indipendenti tra loro.

In passato mi è capitato di dover parserizzare un file di codice ISO per macchine CN per editare alcuni punti del file a certe condizioni (dovevo cambiare il tipo e la sequenza di alcune operazioni) e ricordo di aver usato appunto due descrittori allo stesso file in lettura che mi fornivano le informazioni che usavo per scrivere il nuovo file con un altro descrittore (altro file, in scrittura).
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 26-06-2008, 23:57   #6
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Quoto DanieleC88,
se le due letture sono il prodotto dell'azione di due distinti file descriptor che puntano allo stesso file, sono indipendenti tra loro.

In passato mi è capitato di dover parserizzare un file di codice ISO per macchine CN per editare alcuni punti del file a certe condizioni (dovevo cambiare il tipo e la sequenza di alcune operazioni) e ricordo di aver usato appunto due descrittori allo stesso file in lettura che mi fornivano le informazioni che usavo per scrivere il nuovo file con un altro descrittore (altro file, in scrittura).
Però ad esempio, siccome devo leggere un file molto grande, non so se leggerlo una volta sola o fare letture in contemporanea. Quanti sono i canali massimi di input da file? C'è modo di saperlo? Intendo dire che sicuramente vi è un numero massimo di letture concorrenti dopo il quale le prestazioni decadono. Sicuramente dipende dal file system che c'è sotto.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 00:57   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Il flusso di esecuzione sotto Windows funziona grossomodo cosi'.
Il processo A fa richiesta in lettura al sistema operativo di una porzione (o tutto) del file Pippo, mediante una system call.
Il processo A viene messo in attesa, e la system call provvede a cercare il file in System Cache. Se lo trova prepara e comanda il coprocessore DMA per il trasferimento memoria-memoria per riempire il buffer utente.
Nell'attesa e' molto probabile che ci sia un context switch, e il processore passi a fare altro, perche' il DMA potrebbe dover trasferire parecchi KByte, e intanto il sistema passa a fare altro. (Se la lettura richiesta e' piccola, cosa che accade spesso, allora si procede immediatamente con un normale trasferimento comandato dal processore, perche' l'overhead del DMA e' tale per cui conviene solo da una certa dimensione in poi).

Una volta che il DMA ha finito e il buffer utente e' riempito, il processo A viene liberato, pronto a ritornare in esecuzione quando capitera' di nuovo il suo context switch.
Altrimenti, se la porzione di file richiesta non si trova in system cache, il flusso della system call di lettura passa alla lettura fisica. il sistema operativo accoda la richiesta di lettura della porzione del file pippo richiesto, durante la quale verra' comandato l'hard disk e preparato un altro tipo di DMA per il trasferimento controller->System cache: La porzione del file A richiesta viene letta, mediante DMA (o di nuovo a mano dal processore, se il controller e' configurato in PIO mode), dalla periferica alla system cache (fra l'altro, i controller HD oggi sono in memory mapping oppure si fa sempre un DMA da porta a memoria?). Context switch, perche' tanto la lettura e' lentissima.

Una volta che questo trasferimento DMA e' terminato, allora la system call di lettura prosegue, con il trasferire la porzione del file dalla system cache alla memoria utente. Eventuale Context Switch nel frattempo che si trasferisce memoria->memoria se si e' nel caso DMA, esattamente come nel caso fortunato.

Un processo B che arrivasse a chiedere quelle porzioni dello stesso file, le troverebbe gia' in system cache, e ci sarebbe solo il trasferimento memoria-memoria (diretto da processore o di nuovo DMA se grosso).


Quindi in entrambi i casi il file viene letto da disco fisicamente al piu' una volta.

Anche qualora il file venisse cambiato tra la lettura di A e quella di B (magari da un processo C), non si passerebbe alla lettura fisica, in quanto anche la scrittura di C agisce sulla system cache.
La system cache sotto XP e' in write back, ovvero e' il sistema operativo che decide quando ha voglia di andare a scrivere permanentemente le modifiche su disco (tipicamente quando non ha null'altro da fare), che non avvengono quasi mai nel momento in cui C l'ha richiesto.

Ecco uno dei motivi per cui non e' bene spegnere violentemente un computer.
Alcuni file potrebbero non essere aggiornati in scrittura. O essere a meta'...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 27-06-2008 alle 01:09.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 04:05   #8
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989


Complimenti per la spiegazione!
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 04:06   #9
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
[EDIT]
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!

Ultima modifica di DanieleC88 : 28-06-2008 alle 00:30. Motivo: Doppione, sorry...
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 08:35   #10
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Ho cercato molto velocemente dettagli sul trasferimento systemcache -> memoria, ma non ho trovato granche'.
Dai chipest del (almeno) 386 il DMA puo' effettuare trasferimenti memoria -> memoria, mentre prima era possibile solo periferica -> memoria (e viceversa).
Non sono pero' riuscito a trovare da nessuna parte se Windows usa questa feature durante il trasferimento dalla system cache alla memoria utente, mentre mi sembra di avere capito che viene molto probabilmente usato sotto Linux, almeno per questo motivo.

Qualcuno ha dei dettagli in piu'? Giusto per chiudere il cerchio...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 09:32   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Però ad esempio, siccome devo leggere un file molto grande, non so se leggerlo una volta sola o fare letture in contemporanea. Quanti sono i canali massimi di input da file? C'è modo di saperlo? Intendo dire che sicuramente vi è un numero massimo di letture concorrenti dopo il quale le prestazioni decadono. Sicuramente dipende dal file system che c'è sotto.
La precisa spiegazione di gugoXX evidenzia il fatto che di lettura fisica ce ne sarebbe solo una, quindi, a meno di dimensioni colossali del file (quanto è grande?) non dovrebbero esserci troppi problemi.

Una volta che il file viene letto e trasferito nella cache system, procedere con un'unica lettura sequenziale piuttosto che con due o più file descriptor che fanno le loro fseek-ftell-fread non dovrebbe comportare decadimenti prestazionali sensibili (dovuti alla dimensione del file intendo).
Questa almeno è la sensazione che ho io, però potresti facilmente fare una prova con un caso limite e una decina di file descriptor che accedono in lettura ripetendo X operazioni di fread/fseek in un ciclo.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 23:49   #12
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
Quote:
Originariamente inviato da gugoXX Guarda i messaggi

Ecco uno dei motivi per cui non e' bene spegnere violentemente un computer.
Alcuni file potrebbero non essere aggiornati in scrittura. O essere a meta'...
Spiegazione ineccepibile, ma purtroppo lavoro sotto sistemi Linux
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 23:54   #13
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
La precisa spiegazione di gugoXX evidenzia il fatto che di lettura fisica ce ne sarebbe solo una, quindi, a meno di dimensioni colossali del file (quanto è grande?) non dovrebbero esserci troppi problemi.
Il file di ingresso è enorme, si parla di 16 GB. Credo che non sia neanche possibile leggerlotutto di un botto. fare una malloc di 16 GB penso sia improponibile

Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Una volta che il file viene letto e trasferito nella cache system, procedere con un'unica lettura sequenziale piuttosto che con due o più file descriptor che fanno le loro fseek-ftell-fread non dovrebbe comportare decadimenti prestazionali sensibili (dovuti alla dimensione del file intendo).
Il problema è che questo è un programma parallelo in MPI, quindi le letture contemporanee sono fatte da più processori. Quindi o faccio leggere ad ognuno la sua parte, o incarico un solo processore di sobbarcarsi la lettura e poi distribuire agli altri le proprie parti di competenza.

Io volevo usare un pool di processi lettori, il cui numero varia in base alle caratteristiche del file system sottostante, magari analizzando i canali di input su file che mette a disposizione. Ma non so se è possibile farlo.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 27-06-2008, 23:59   #14
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Mi raccomando, una sola riga per volta eh...

E poi qui non sembrava che il file fosse immenso.
Quote:
Originariamente inviato da Unrue Guarda i messaggi
No dunque, la lettura fisica è una sola per forza, ma una volta che il file è caricato in memoria intendo, come si comportano le letture?
Comunque quando leggi un pezzo di file, anche sotto Linux, va a finire nella cache. Ulteriori letture dello stesso pezzo verranno fatte in RAM.
Ogni volta che un processo lettore qualsiasi chiede un pezzo che non e' in cache, necessariamente andra' a pescarlo da disco. Nel frattempo il processore andra' a fare altro.
Piu' letture contemporanee fisiche dello stesso file fatte da processi diversi, ad offset del file diverso, faranno saltare la testina avanti e indietro, con la conseguenza che le prestazioni saranno inferiori di una normale lettura e processamento sequenziale fatti da un processo solo (a meno che a processare ogni singolo pezzo ci si impieghi un tempo superiore al tempo di lettura).

Secondo me una soluzione con thread principale che legge, ed ogni volta che ha letto un workitem fa partire un thread che lo processa, e' la soluzione migliore.

Ma cosa devi fare?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 28-06-2008 alle 00:01.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2008, 10:43   #15
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Il file di ingresso è enorme, si parla di 16 GB
Ah!

Quote:
Originariamente inviato da Unrue Guarda i messaggi
Il problema è che questo è un programma parallelo in MPI, quindi le letture contemporanee sono fatte da più processori. Quindi o faccio leggere ad ognuno la sua parte, o incarico un solo processore di sobbarcarsi la lettura e poi distribuire agli altri le proprie parti di competenza.
Voto per un'unica lettura sequenziale di una porzione del file da parte di un processore che poi incarica altri processori dell'elaborazione della sua parte.
Chissà in quante "porzioni" devi spezzettare la lettura per un file di queste dimensioni...

Quote:
Originariamente inviato da Unrue Guarda i messaggi
Io volevo usare un pool di processi lettori, il cui numero varia in base alle caratteristiche del file system sottostante, magari analizzando i canali di input su file che mette a disposizione. Ma non so se è possibile farlo.
Non ho idea di cosa tu stia parlando, spiacente
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2008, 12:17   #16
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Mi raccomando, una sola riga per volta eh...
Non c'è problema, il file è binario ..



Quote:
Originariamente inviato da gugoXX Guarda i messaggi
Ma cosa devi fare?
Devo parallelizzare un codice che calcola le pendenze dei terreni. la parallelizzazione per adesso è solo sull' I/O. Usare un solo processo che legge credoche alla fine sia la soluzione migliore, ma ovviamente dovrà leggerlo un pò per volta, perché 16 GB tutto di un colpo mi scoppia Ad esempio, se ho 4 Gb di RAM a disposizione, leggo il file a colpi di 4 GB, anzi un pò meno in quanto ovviamente non gira solo il mio processo sul processore, dunque la RAM disponibile sarà minore. E poi distribuisco via via i pezzi agli altri.

Che ne pensate? Ma sopratutto, è possibile fare una malloc da 4GB ?

Il discorso che hai esposto tu sulal cache purtroppo non vale, in quanto ho un sistema a memoria distribuita, dunque i processi, o meglio, i processori, vedono solo la cache locale. Scusate se non l'ho specificato prima.

Ultima modifica di Unrue : 28-06-2008 alle 12:24.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 28-06-2008, 12:28   #17
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6254
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Chissà in quante "porzioni" devi spezzettare la lettura per un file di queste dimensioni...
In realtà il numero di pezzi è pari al numero di processori.

Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Non ho idea di cosa tu stia parlando, spiacente
Questa cosa l'ho capito poco anche io. Mi hanno parlato di ipotetici canali di input su file, che via via possono esaurirsi. Probabilmente si riferiscono al fatto che vi è un sistema GPFS sotto, un file system parallelo. Solo che questo codice deve essere portabile, dunque devo prevedere casi anche con file system meno performanti.

Ultima modifica di Unrue : 28-06-2008 alle 12:31.
Unrue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Il telescopio spaziale James Webb ha cat...
Tesla Roadster? Sam Altman chiede il rim...
Pier Giorgio Furcas raddoppia: Vice Dire...
Novità PagoPA: con Klarna:pagamen...
Per il 2026 la Cina eseguirà una ...
AMD mette in naftalina RDNA 1 ed RDNA 2?...
Blue Origin New Glenn: completato lo sta...
SpaceX risponde alla NASA sul lander lun...
Bitcoin compie 17 anni: il Whitepaper ch...
Attenzione agli HDD Western Digital Blue...
MacBook Air M4 a un super prezzo su Amaz...
Dal 12 novembre stretta sui siti porno: ...
Recensione Synology DS725+: tornano i di...
Car of the Year 2026, rivelate le 7 fina...
Il mouse diventa indossabile: Prolo Ring...
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: 19:12.


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