Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NVIDIA Blackwell B200: due chip in uno per rivoluzionare l'intelligenza artificiale
NVIDIA Blackwell B200: due chip in uno per rivoluzionare l'intelligenza artificiale
Due GPU (die) su un unico package per un totale di 208 miliardi di transistor: la nuova GPU Blackwell di NVIDIA nasce per accelerare l'innovazione nel campo dell'intelligenza artificiale come mai prima d'ora. La nuova proposta è accompagnata da 192 GB di memoria HBM3E per una bandwidth di 8 TB/s. A comporre la nuova offerta di NVIDIA troviamo tre soluzioni: B100, B200 e GB200.
HP Envy Move, un PC All-In-One con la batteria che si può spostare facilmente
HP Envy Move, un PC All-In-One con la batteria che si può spostare facilmente
HP Envy Move non è un PC all-in-one come tutti gli altri: si può spostare facilmente e usare lontano dalla presa di corrente. Lo schermo touch consente di usarlo anche come un grande tablet e può diventare un display aggiuntivo. Il tutto condito da un'attenzione all'ambiente grazie all'uso di materiali riciclati.
MSI MPG 321URX QD-OLED: un monitor completo per i giocatori
MSI MPG 321URX QD-OLED: un monitor completo per i giocatori
MSI MPG 321URX QD-OLED è un monitor completo, con diagonale da 32 pollici, risoluzione UHD, porte HDMI 2.1, frequenza di aggiornamento di 240 Hz e con un pannello OLED che offre diverse caratteristiche interessanti per il pubblico dei giocatori
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-04-2017, 19:39   #1
mic_1
Junior Member
 
Iscritto dal: Mar 2017
Messaggi: 19
Programmazione concorrente

Scusa l'intrusione ma non sono proprio a chi chiedere.

Sto preparando l'esame di Sistemi Operativi e non riesco a comprendere come applicare la teoria negli esercizi.

Ho delle soluzioni di compiti scritti in C, altri in python, quindi ho modo di testarli ma non capisco se basta studiare il codice e applicare il metodo di sincronizzazione del codice stesso o inserire i metodi spiegati a lezione come ad esempio l'algoritmo di peterson per il problema di deadlock, quello per la mutua esclusione, etc...

Inoltre, i filosofi a cena, l'algoritmo del banchiere, e altri sviluppati sia con i semafori che con i monitor, sono degli esempi di gestione processi e quindi esempi di possibili compiti o come utilizzarli nella pratica?

Inoltre per esercitarmi mi consigliate il C o il python più semplice da scrivere?

Come potete notare ho le idee un po confuse sul da farsi!
Grazie
mic_1 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2017, 16:38   #2
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Ma il docente cosa dice? Python o C, dovrebbe essere lui a dire cosa vuole e come. In genere, trattandosi di sistemi operativi, molti vogliono un'interfaccia diretta con i meccanismi implementati da Unix e Posix, quindi fanno usare il C e relative librerie Unix.

Per quanto riguarda il passaggio dalla teoria alla pratica, anche qui dipende. Per esempio, devi fare un esercizio in cui usi i semafori per risolvere un problema di sincronizzazione, o implementare un semaforo? Sono due cose molto diverse. In genere fanno fare solo il primo tipo di esercizi.

I filosofi a cena sono un tipico esempio di problema di sincronizzazione da implementare tramite semafori o tramite monitor. Quello che si deve fare e' semplicemente simulare la cattura/rilascio delle due forchette, facendo vedere come si puo' fare senza che si creino race conditions e starvation. Come fatto qui ad esempio https://docs.oracle.com/cd/E19205-01...pji/index.html

Inutile dire che non serve a niente leggersi il codice e basta, bisogna capire cosa fa e come lo fa. Cioe' e' fondamentale imparare a ragionare in maniera concorrente, che e' l'obiettivo che si vuole ottenere.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2017, 17:16   #3
mic_1
Junior Member
 
Iscritto dal: Mar 2017
Messaggi: 19
Ti dico subito che il mio "problema" non riguarda il progetto ma lo scritto.
Nel progetto il prof richiede il C ma nello scritto viene usato uno pseudocodice con svolgimento su carta. Per questo motivo mi era stato consigliato di esercitarmi in python, linguaggio semplice e ad oggetti che mi permette di esercitarmi e comprendere meglio gli esercizi di compito, perchè non so verificarne la correttezza altrimenti.

Inoltre, in questa parte d'esame legata alla concorrenza, ci sono così tante informazioni che mi confondono. Per questo chiedo un consulto a chi ne sa di più...

Qualche anno fa preparai un semplicissimo esercizio in java dove usai i monitor, nella gestione di una pizzeria inserii il piatto come monitor di sincronizzazione con l'utilizzo di synchronized, con l'uso di eccezioni, etc..

Premetto che usai java solo in quella occasione e non ricordo molto, python invece pare essere richiesto dal prof stesso anche nella prova pratica...

Sul gruppo vengono postate soluzioni in C e python...

In sostanza...devo svolgere lo scritto di concorrenza su carta e ho bisogno di esercitarmi... Va bene se uso il python? so essere un linguaggio ad oggetti...

Cosa mi consigliate di fare per capire la materia e affrontare lo scritto senza perdere altro tempo???? Per questo esame ne ho perso veramente tanto!!!!!!

Grazie a tutti!!!
mic_1 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2017, 17:26   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3305
Ma come facciamo noi a consigliarti su come preparati ad un esame? Dovresti essere te quello che è andato a lezione a seguire il corso e capire come il professore lo ha impostato. Se a lezione ha fatto vedere Python allora forse chiederà Python, se ha mostrato C forse richiederà quest'ultimo, oppure li ha fatti entrambi e lascia libertà di scelta nella soluzione.
Generalmente il testo di esame dovrebbe richiede una implementazione in uno specifico linguaggio. Cosa richiedono i testi degli esercizi d'esame che hai trovato?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2017, 19:43   #5
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da mic_1 Guarda i messaggi
In sostanza...devo svolgere lo scritto di concorrenza su carta e ho bisogno di esercitarmi... Va bene se uso il python? so essere un linguaggio ad oggetti...
Ni e per due motivi:

1. non e' chiaro se lo scritto e' una prova teorica o se bisogna implementare qualcosa di funzionante. Siccome parli di pseudo-codice, suppongo sia la prima. Nel qual caso la cosa da fare e' capire la logica della programmazione concorrente, magari scrivendo programmi concorrenti ( in C visto che mi pare sia quello che usate per il progetto ). A quel punto non dovrebbe essere un problema realizzare una soluzione in pseudo-codice, visto che si tratta di un codice molto astratto.

2. Python non e' un surrogato dello pseudo-codice e non e' nemmeno equivalente. Come scrivevo nel punto 1, lo pseudo-codice e' un modo per mettere giu' i concetti che hai acquisito teoricamente in una forma vagamente simile a quella di un linguaggio di programmazione.

Quote:
Originariamente inviato da mic_1 Guarda i messaggi
Cosa mi consigliate di fare per capire la materia e affrontare lo scritto senza perdere altro tempo???? Per questo esame ne ho perso veramente tanto!!!!!!
Comprendo, ma come disse tempo fa un ingegnere Intel: "solo pochi geni comprendono davvero i meccanismi della concorrenza". Il problema e' che se ti approcci al problema con la tipica mentalita' da studente ( sgobbo, leggo, memorizzo e racconto la filastrocca all'esame ) non arriverai lontano.

La concorrenza va compresa, nel senso di riuscire ad immaginarsi N processi/thread che operano contemporaneamente e quali problemi possono nascere nel momento in cui vanno ad interagire ( operare sulle medesime risorse hardware e sulle stesse variabili ).

E capirai che questo esula da qualsiasi linguaggio di programmazione si vada poi a scegliere. Tuttavia e' fondamentale capire i meccanismi, altrimenti si e' condannati a scopiazzare da varie fonti. E ovviamente e' facile commettere errori, difficile adeguare le soluzioni preesistenti al problema che si sta affrontando.

Per cui concentrati sui meccanismi, carta e penna alla mano, esprimili nello pseudo-linguaggio che piu' ti risulta facile. Il resto viene dopo e la strada sara' in discesa.
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2017, 11:32   #6
mic_1
Junior Member
 
Iscritto dal: Mar 2017
Messaggi: 19
"carta e penna alla mano, esprimili nello pseudo-linguaggio"

Proprio questo mi rimane difficile da fare perchè non ho modo di verificare se ciò che scrivo è corretto...e faccio errori assurdi...

Forse mi converrà esercitarmi prima con un linguaggio di programmazione replicando/studiando esercizi già svolti per comprenderne la sincronizzazione e come tale sincro (che sia semafori, monitor, message passing e test&set) è stata implementata... altrimenti non ne esco fuori.

Il progetto credo di evitarlo per non perdere tempo. Il prof riazzera tutto finchè tutte le prove non sono state superate entro l'anno. Meglio mi concentri prima sullo scritto fondamentale per il superamento dell'esame (prova pratica capita e superata sempre in C quindi non sarà un problema ripeterlo ma il progetto lo trovo troppo impegnativo al momento. Un passo alla volta sebbene non voglia perderci troppo tempo).

Una cosa vorrei chiederti, giusto per fare chiarezza: I produttori/consumatori, i filosofi a cena, etc sono solo degli esempi di come i processi/thread possono interagire tra loro senza che vadano in deadlock o stavation, giusto? quindi nei compiti potrei trovarmi delle situazioni analoghe mi sembra di capire...sbaglio?

Grazie!
mic_1 è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2017, 12:19   #7
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5726
Secondo me tu hai bisogno di imparare ad usare le reti di petri che sono uno strumento grafico direi ideale per comprendere i processi concorrenti (da quelli informatici di scrittura dei valori delle variabili alla preparazione della pasta col sugo )

Guarda questi video del professor Ghezzi del polimi

https://youtu.be/yk629qqxaUQ

una volta imparato ad usarle (sono 2 o 3 regolette) puoi modellare qualsiasi processo tu abbia voglia e lo potrai simulare con carta e penna.

A quel punto, compreso come funziona il tuo sistema, lo puoi "tradurre" in codice o pseudocodice usando la grammatica del linguaggio.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2017, 13:30   #8
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da mic_1 Guarda i messaggi
"carta e penna alla mano, esprimili nello pseudo-linguaggio"

Proprio questo mi rimane difficile da fare perchè non ho modo di verificare se ciò che scrivo è corretto...e faccio errori assurdi...
Il problema e' che l'implementazione in un linguaggio qualsiasi, introduce ulteriori dettagli che rischiano di confonderti ancora di piu'. In questo senso il consiglio di usare le reti di Petri e' da seguire.

Inoltre, dal punto di vista pratico, l'implementazione di riferimento dei meccanismi di concorrenza e' quella Posix, per cui e' escluso l'uso di linguaggi come Python. Quest'ultimo implementa ovviamente thread, semafori, lock, ecc... ma non nel modo canonico e standard su cui si basano i libri. Per cui ti resterebbe solo il C.


Quote:
Originariamente inviato da mic_1 Guarda i messaggi
Forse mi converrà esercitarmi prima con un linguaggio di programmazione replicando/studiando esercizi già svolti per comprenderne la sincronizzazione e come tale sincro (che sia semafori, monitor, message passing e test&set) è stata implementata... altrimenti non ne esco fuori.
Si, se serve a farti capire la meccanica dei processi concorrenti.


Quote:
Originariamente inviato da mic_1 Guarda i messaggi
Una cosa vorrei chiederti, giusto per fare chiarezza: I produttori/consumatori, i filosofi a cena, etc sono solo degli esempi di come i processi/thread possono interagire tra loro senza che vadano in deadlock o stavation, giusto? quindi nei compiti potrei trovarmi delle situazioni analoghe mi sembra di capire...sbaglio?
Grazie!
Sono esempi che colgono i problemi tipici che possono capitare. Alla fin fine negli esercizi ti ritrovi problemi che sono riconducibili in un modo o nell'altro ( e questo e' il dilemma, perche' spesso non e' un mapping 1:1 ) a uno o piu' di quegli esempi tipici.

E ci sono anche sottigliezze che tipicamente nella teoria e' difficile notare. Immagina questo esempio:

hai un programma con N thread che operano su un array di 10*N elementi, con l'array diviso in N blocchi di 10 elementi e ogni thread opera su uno di questi blocchi

ragionando teoricamente potresti concludere che i thread operano sul medesimo array ( medesimo oggetto ) e che quindi possono crearsi contese tra di essi

in realta' non succede, perche' l'array in C e' un blocco di memoria contigua e gli N thread di sopra operano su sezioni separate ( blocchi di memoria diversi e per nulla sovrapposti ) dell'array

nella pratica non c'e' bisogno di implementare meccanismi di sincronizzazione in questo caso

il problema e' che bisogna sapere come C implementa gli array a basso livello, perche' il caso descritto puo' non presentare le stesse caratteristiche in altri linguaggi tipo Java, Python, ecc...

per cui c'e' pure un certo scollamento tra la teoria e la pratica
pabloski è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2017, 19:57   #9
zanardi84
Senior Member
 
L'Avatar di zanardi84
 
Iscritto dal: Apr 2004
Città: La regione del Triplete
Messaggi: 5726
Cambieranno le situazioni, i domini in cui il software sarà inserito, ma per affrontare determinati problemi scoprirai che ci sono soluzioni ricorrenti.. cioè quellle che sono conosciute come pattern.
__________________
Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.

Ultima modifica di zanardi84 : 26-04-2017 alle 19:59.
zanardi84 è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2017, 11:04   #10
mic_1
Junior Member
 
Iscritto dal: Mar 2017
Messaggi: 19
Grazie per gli interventi. Quello che ho ben capito è che non occorre ricorrere ad un codice ad oggetti come il C++ ma che in realtà i linguaggio utilizzato in primis per la creazione di un sistema operativo è proprio il C, ma per non incappare in problemi più seri proverò a cercare dei programmini semplici, intanto per esercitarmi, in C o in python, che utilizzino metodi di sincronizzazione per poi affrontare problemi più importanti come quelli del compito e in seguito del progetto.

Cosa ne pensate? Grazie
mic_1 è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2017, 11:10   #11
MarikaW
Junior Member
 
Iscritto dal: May 2017
Messaggi: 8
python tutta la vita
MarikaW è offline   Rispondi citando il messaggio o parte di esso
Old 11-05-2017, 11:31   #12
pabloski
Senior Member
 
Iscritto dal: Jan 2008
Messaggi: 8406
Quote:
Originariamente inviato da mic_1 Guarda i messaggi
Grazie per gli interventi. Quello che ho ben capito è che non occorre ricorrere ad un codice ad oggetti come il C++ ma che in realtà i linguaggio utilizzato in primis per la creazione di un sistema operativo è proprio il C
Ma infatti la concorrenza non ha nulla a che vedere col linguaggio utilizzato. Per concorrenza si intende semplicemente la capacita', da parte del sistema di elaborazione, di eseguire alternativamente pezzi di vari processi, in modo che sembri che li stia eseguendo tutti contemporaneamente.

Questo meccanismo era quasi impossibile da implementare ai tempi del real mode x86, per cui intel penso' di aggiungere il meccanismo della protezione di memoria ( spazi d'indirizzamento virtuali ). In questo modo hai la garanzia che i processi non si pestino i piedi a vicenda, resta solo da implementare un meccanismo efficiente di cambio del contesto di esecuzione ( i registri generali, piu' l'instruction pointer e altri registri speciali devono essere caricati/scaricati con i dati del processo da mandare in esecuzione, che formano appunto il contesto del processo ). Per i thread vale una logica simile, ma non ci sono di mezzo gli spazi d'indirizzamento.

Per cui e' piu' che altro una faccenda hardware, che esula dal linguaggio.

I linguaggi hanno un impatto sulla qualita' del modello di programmazione, cioe' quanto organizzato e semplici e' il modello che mostrano al programmatore. Certo i sistemi opeativi si possono scrivere ( e in buona parte si scrivono ) in C, poi pero' cresce la complessita', cresce il numero di bug, ecc...

E' su queste questioni che il linguaggio comincia a contare.

Quote:
Originariamente inviato da mic_1 Guarda i messaggi
intanto per esercitarmi, in C o in python, che utilizzino metodi di sincronizzazione per poi affrontare problemi più importanti come quelli del compito e in seguito del progetto.

Cosa ne pensate? Grazie
Aldila' del linguaggio, devi usare i meccanismi di sincronizzazione esposti dalla teoria. Tanto per dire, Python implementa un meccanismo che si chiama Event. Nei libri di teoria questa cosa non esiste. E Python non implementa invece il costruttore Monitor, che invece nella teoria esiste.

E ovviamente dipende tutto pure dal livello a cui stai operando, cioe' se vuoi semplicemente usare quei meccanismi o se li vuoi implementare. In teoria si studia sia come usarli, sia come implementarli.

Per questo in generale si preferisce usare il C su un sistema operativo Unix-like ( Linux ad esempio ) per le esercitazioni. Perche' Unix ricalca passo-passo quello che viene mostrato nella teoria.

Per esempio esistono sistemi operativi, librerie e linguaggi che implementano il modello CSP per la concorrenza. Un'implementazione di questo modello ( non proprio canonica, ma passabile ) la puoi vedere nel linguaggio Go https://gobyexample.com/channels

Ci crederesti se ti dicessi che in quel codice ci sono due entita' concorrenti in azione? Eppure di quella cosa li' non c'e' traccia nei libri di testo, almeno quelli scolastici.
pabloski è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NVIDIA Blackwell B200: due chip in uno per rivoluzionare l'intelligenza artificiale NVIDIA Blackwell B200: due chip in uno per rivol...
HP Envy Move, un PC All-In-One con la batteria che si può spostare facilmente HP Envy Move, un PC All-In-One con la batteria c...
MSI MPG 321URX QD-OLED: un monitor completo per i giocatori MSI MPG 321URX QD-OLED: un monitor completo per ...
realme 12 Pro+ 5G: un potente mid-range con teleobiettivo sotto i 400 euro. La recensione realme 12 Pro+ 5G: un potente mid-range con tele...
Fujifilm Simulazione Pellicola – Guida all'uso Fujifilm Simulazione Pellicola – Guida all'uso
Dell amplia la collaborazione con NVIDIA...
Elon Musk parla nuovamente delle future ...
Comedy Wildlife Photography Awards: Niko...
realme: il 2024 è l'anno della co...
Salesforce: è iniziata la migrazi...
Sony Xperia 1 VI: addio al display 4K e ...
Il proprietario di Epic Games insult&ogr...
iliad aggiunge il roaming gratuito negli...
Amazon svende alcuni NAS decisamente int...
Hertz cambia rotta: il CEO dell'azienda ...
Microsoft promette: 'Copilot sarà...
ASUS annuncia la disponibilità in...
HPE GreenLake for File Storage si aggior...
Sony avrebbe interrotto la produzione di...
Ecco una wallbox completa e versatile, a...
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:58.


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