Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro
Lenovo Idea Tab Plus prova a portare un display da 12,1 pollici 2.5K, quattro speaker Dolby Atmos e una batteria da 10.200 mAh sotto la soglia psicologica dei 300 euro, penna inclusa. Lo abbiamo usato per oltre una settimana per capire dove l'azienda ha tagliato e dove invece ha tenuto il punto
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: 7187
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


AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Star Wars Zero Company svela il cast e p...
Da 0,7 a 20 FPS: Doom domato su una CPU ...
Amazon col caldo fa pazzie: TOP 15 con p...
Lego ricrea Donkey Kong da sala giochi e...
ChatGPT ignora l'embolia polmonare: uten...
Auto nuova a soli 100 euro al mese: cos'...
Kimi K3 non è solo distillazione:...
Assassin's Creed Black Flag: Resynced st...
EUREKA J15 Ultra Gen2 a 399€: aspirazion...
AMD EPYC 9006 SP7 e SP8: differenze, spe...
Copilot è ovunque: l'intelligenza artifi...
BOOX Tile Picco vuole cambiare il settor...
E-bike Engwe al prezzo più basso ...
Atari sbarca a Hollywood: in arrivo i fi...
AMD e Cerebras uniscono Helios e Wafer-S...
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: 10:34.


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