Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-12-2008, 22:09   #1
marco83pt
Senior Member
 
L'Avatar di marco83pt
 
Iscritto dal: May 2005
Città: Montecatini terme
Messaggi: 309
[C] - Utilizzo programmi con processori dual core!!

Salve a tutti, vi voglio porre una domanda, forse anche banale, ma fatto sta che risposte anche con google non ne ho trovate (di chiare intendo). Sto sviluppando alcuni applicativi creati in C. Poiché fanno uso intensivo del processore (le elaborazioni mi durano qualche minuto) volevo sapere se fosse possibile, nei computer muniti di CPU dual core, compilarle in modo tale per cui una volta lanciate vadano ad usare entrambe in parallelo i due core della cpu e non soltanto uno solo.

Saluti, Marco.
__________________
Asus M2N-SLI DELUXE - Athlon 64 X2 4600+ - 2x1GB Corsair XMS2 PC6400 - ATI HD3650 - 2x250GB SATA2 RAID-0
marco83pt è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 22:56   #2
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ciao Marco,

Non è possibile farlo automaticamente con un'opzione del compilatore. Devi progettare l'applicazione in modalità multithreading.
Puoi utilizzare diverse librerie. Io preferisco OpenMP che è pienamenta supportata dalla maggior parte dei compilatori C, è portabile e di facile utilizzo:

http://openmp.org/wp/

http://en.wikipedia.org/wiki/OpenMP

http://msdn.microsoft.com/en-us/library/tt15eb9t.aspx

Intel Tutorials:
http://software.intel.com/en-us/arti...ed-with-openmp
http://software.intel.com/en-us/arti...ng-with-openmp
http://software.intel.com/en-us/arti...mp-programming

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2008, 23:31   #3
Mattyfog
Senior Member
 
Iscritto dal: Jul 2008
Messaggi: 1426
ma non sbasta creare più thread?
Mattyfog è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2008, 09:28   #4
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 7046
Quote:
Originariamente inviato da marco83pt Guarda i messaggi
Salve a tutti, vi voglio porre una domanda, forse anche banale, ma fatto sta che risposte anche con google non ne ho trovate (di chiare intendo). Sto sviluppando alcuni applicativi creati in C. Poiché fanno uso intensivo del processore (le elaborazioni mi durano qualche minuto) volevo sapere se fosse possibile, nei computer muniti di CPU dual core, compilarle in modo tale per cui una volta lanciate vadano ad usare entrambe in parallelo i due core della cpu e non soltanto uno solo.

Saluti, Marco.
Molte istruzioni sono passate in parallelo ai due core, sopratutto se non vi è dipendenza. Questo parallelismo è implementato in hardware. E' difficile però che le istruzioni non abbiano dipendenza, se non vengono scritte appositamente così.Si può però fare un parallelismo software con i thread, anche se ci pensa il sistema operativo a mappare thread sui vari core. Non ne hai controllo, se non con particolari opzioni più avanzate.

Ultima modifica di Unrue : 08-12-2008 alle 09:35.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2008, 09:57   #5
marco83pt
Senior Member
 
L'Avatar di marco83pt
 
Iscritto dal: May 2005
Città: Montecatini terme
Messaggi: 309
Oggi mi cimento con openMP. Vedo cosa tiro fuori.
Saluti.
__________________
Asus M2N-SLI DELUXE - Athlon 64 X2 4600+ - 2x1GB Corsair XMS2 PC6400 - ATI HD3650 - 2x250GB SATA2 RAID-0
marco83pt è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2008, 12:50   #6
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da Mattyfog Guarda i messaggi
ma non sbasta creare più thread?
si, è possibile utilizzare le funzioni per la gestione dei thread. Su Windows, per esempio, si possono utilizzare le API CreateThread, etc, ma questo rende il codice non portabile.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 09:26   #7
marco83pt
Senior Member
 
L'Avatar di marco83pt
 
Iscritto dal: May 2005
Città: Montecatini terme
Messaggi: 309
Quindi in poche parole mi state dicendo che l'utilizzo di più thread in parallelo equivale ad usare entrambi i core della CPU???
__________________
Asus M2N-SLI DELUXE - Athlon 64 X2 4600+ - 2x1GB Corsair XMS2 PC6400 - ATI HD3650 - 2x250GB SATA2 RAID-0
marco83pt è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 10:21   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da marco83pt
Quindi in poche parole mi state dicendo che l'utilizzo di più thread in parallelo equivale ad usare entrambi i core della CPU???
Per risponderti quoto quello che ha già scritto Unrue:
Quote:
Originariamente inviato da Unrue Guarda i messaggi
... Si può però fare un parallelismo software con i thread, anche se ci pensa il sistema operativo a mappare thread sui vari core. Non ne hai controllo, se non con particolari opzioni più avanzate.
In sostanza tu ti suddividi il lavoro nel tuo applicativo usando vari thread, ci penserà poi il S.O. a mappare i tuoi thread come meglio crede sui vari core.

Esattamente quale thread mappa in quale core a te non deve interessare, a meno di particolari esigenze ma in quel caso ti devi "sbattere" di più per avere quel tipo di controllo.
__________________

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 09-12-2008, 14:10   #9
marco83pt
Senior Member
 
L'Avatar di marco83pt
 
Iscritto dal: May 2005
Città: Montecatini terme
Messaggi: 309
io ho fatto questi passaggi (banali passaggi):

void prodotto(long double** A, long double** B, long double** AB, int N) {
//Prodotto fra matrici
int i,j,k;
long double x;
#pragma omp parallel for default(none) private(i,j,k,x) shared(A,B,AB,N)
for(i = 0;i < N; ++i) {
for(j = 0;j < N; ++j) {
x = 0;
for(k = 0;k < N; ++k) {
x = A[ i ][ k ] * B[ k ][ j ] + x;
}
AB[ i ][ j ] = x;
}
}
}


il tempo di esecuzione è diventato un quarto...
bene....con così poco ho ottenuto così tanto.
__________________
Asus M2N-SLI DELUXE - Athlon 64 X2 4600+ - 2x1GB Corsair XMS2 PC6400 - ATI HD3650 - 2x250GB SATA2 RAID-0
marco83pt è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 14:17   #10
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Unrue Guarda i messaggi
Molte istruzioni sono passate in parallelo ai due core, sopratutto se non vi è dipendenza. Questo parallelismo è implementato in hardware. E' difficile però che le istruzioni non abbiano dipendenza, se non vengono scritte appositamente così.Si può però fare un parallelismo software con i thread, anche se ci pensa il sistema operativo a mappare thread sui vari core. Non ne hai controllo, se non con particolari opzioni più avanzate.
Occhio a non fare confusione tra il parallelismo delle pipeline, presente da un po' di generazioni, con quello dei Core.
La indipendenza delle istruzioni non e' condizione sufficiente per bilanciare il carico tra i diversi core.
__________________
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 09-12-2008, 14:30   #11
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da marco83pt Guarda i messaggi
il tempo di esecuzione è diventato un quarto...
bene....con così poco ho ottenuto così tanto.
Se il grosso del lavoro consiste nel moltiplicare delle matrici, potresti anche voler considerare algoritmi più efficienti di quello naive.
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 14:31   #12
marco83pt
Senior Member
 
L'Avatar di marco83pt
 
Iscritto dal: May 2005
Città: Montecatini terme
Messaggi: 309
Quote:
Originariamente inviato da shinya Guarda i messaggi
Se il grosso del lavoro consiste nel moltiplicare delle matrici, potresti anche voler considerare algoritmi più efficienti di quello naive.
tipo?
__________________
Asus M2N-SLI DELUXE - Athlon 64 X2 4600+ - 2x1GB Corsair XMS2 PC6400 - ATI HD3650 - 2x250GB SATA2 RAID-0
marco83pt è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 15:22   #13
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da marco83pt Guarda i messaggi
tipo?
Tipo:

http://en.wikipedia.org/wiki/Matrix_...multiplication

Ovviamente sono molto più complicati da implementare, vedi tu se ne vale la pena.
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 17:17   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da marco83pt Guarda i messaggi
io ho fatto questi passaggi (banali passaggi):

void prodotto(long double** A, long double** B, long double** AB, int N) {
//Prodotto fra matrici
int i,j,k;
long double x;
#pragma omp parallel for default(none) private(i,j,k,x) shared(A,B,AB,N)
for(i = 0;i < N; ++i) {
for(j = 0;j < N; ++j) {
x = 0;
for(k = 0;k < N; ++k) {
x = A[ i ][ k ] * B[ k ][ j ] + x;
}
AB[ i ][ j ] = x;
}
}
}


il tempo di esecuzione è diventato un quarto...
bene....con così poco ho ottenuto così tanto.
Il tuo è un ottimo esempio di quello che intendevo per facilità d'utilizzo. Utilizzando le API di Windows per i threads, avresti dovuto scrivere un bel po' di codice in più.

P.S. per curiosità, in quale ambiente e con quale compilatore l'hai compilato?

Ultima modifica di Vincenzo1968 : 09-12-2008 alle 17:21.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 17:27   #15
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da marco83pt Guarda i messaggi
io ho fatto questi passaggi (banali passaggi):

void prodotto(long double** A, long double** B, long double** AB, int N) {
//Prodotto fra matrici
int i,j,k;
long double x;
#pragma omp parallel for default(none) private(i,j,k,x) shared(A,B,AB,N)
for(i = 0;i < N; ++i) {
for(j = 0;j < N; ++j) {
x = 0;
for(k = 0;k < N; ++k) {
x = A[ i ][ k ] * B[ k ][ j ] + x;
}
AB[ i ][ j ] = x;
}
}
}


il tempo di esecuzione è diventato un quarto...
bene....con così poco ho ottenuto così tanto.
beh..
in questo caso è banale..
prova ad implementare il parallelismo su programmi + complessi e vedi se non ti escono i capelli bianchi
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 17:36   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
beh..
in questo caso è banale..
prova ad implementare il parallelismo su programmi + complessi e vedi se non ti escono i capelli bianchi
È ovvio che, se, per esempio, si utilizzano dei calcoli su una risorsa condivisa, bisogna organizzare il codice in modo da sincronizzare i thread. Ma con librerie come OpenMP il compito è, comunque, più facile rispetto all'utilizzo delle API.

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 17:41   #17
Alex_87_xelA
Senior Member
 
Iscritto dal: Nov 2008
Messaggi: 530
Scusate ... in questo piccolo esempio fatto da marco83pt mi spiegate cosa fa un processore e cosa fa l'altro

mi potete spiegare il #pragma utilizzato come funziona ?
Alex_87_xelA è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 18:04   #18
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi
È ovvio che, se, per esempio, si utilizzano dei calcoli su una risorsa condivisa, bisogna organizzare il codice in modo da sincronizzare i thread. Ma con librerie come OpenMP il compito è, comunque, più facile rispetto all'utilizzo delle API.

si, ma il problema vero è trovare i bug che si presenteranno sicuramente in software complessi...
le problematiche da affrontare in caso di codice multi-threaded sono moltissime, tanto è vero che praticamente tutti i sistemi per gestire l'interfaccia grafica girano in modalità single-thread (swing e windows forms in primis...)
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 18:07   #19
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da Alex_87_xelA Guarda i messaggi
Scusate ... in questo piccolo esempio fatto da marco83pt mi spiegate cosa fa un processore e cosa fa l'altro

mi potete spiegare il #pragma utilizzato come funziona ?
mai usato openMP, ma a leggere il pragma si direbbe che definisce come risorse condivise le 3 matrici quadrate e la loro dimensione ed esegue in parallelo i 3 cicli for che utilizzano le variabili i,j,k come contatori e x che contiene il valore della moltiplicazione.
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 18:14   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da ^TiGeRShArK^ Guarda i messaggi
si, ma il problema vero è trovare i bug che si presenteranno sicuramente in software complessi...
le problematiche da affrontare in caso di codice multi-threaded sono moltissime, tanto è vero che praticamente tutti i sistemi per gestire l'interfaccia grafica girano in modalità single-thread (swing e windows forms in primis...)
Concordo pienamente. Non voglio dire che librerie come OpenMP siano la manna dal cielo; soltanto, rendono un po' più facili le cose. Nell'esempio di Marco, per gestire le risorse condivise, è bastato elencarle nella clausola shared
La programmazione multithreading richiede comunque, e con librerie particolari, e con le API, molta più attenzione rispetto a quella tradizionale.

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Con iOS 27 l'iPhone si ripristina da sol...
Visa porta i pagamenti in ChatGPT: gli a...
OpenAI valuta un 'drastico' taglio dei p...
Il MacBook con display touch si far&agra...
Google promette di restituire più...
Quattro monitor 4K, doppia LAN 2.5G e Wi...
ROG Equalizer, il cavo 'salva-GPU': prim...
Falla critica CVSS 9.8 in Oracle PeopleS...
Microsoft accelera su Edge: aggiornament...
AMD ha corretto un bug da 10.000 dollari...
Vertiv: data center, la corsa dell’IA sp...
Siri non diventerà la tua fidanzata virt...
Prezzi in crescita del 200% e forniture ...
Ancora non lo sai, ma il 'botsitting' ti...
L'IA costringe a velocizzare lo sviluppo...
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:12.


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