Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-12-2008, 23: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, 23: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 08-12-2008, 00: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, 10:28   #4
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6512
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 10:35.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 08-12-2008, 10: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, 13: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, 10: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, 11: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, 15: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, 15: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, 15: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, 15: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, 16: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, 18: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 18:21.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2008, 18: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, 18: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, 18: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, 19: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, 19: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, 19: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


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Prime foto della McLaren MCL40: bellissi...
Una manna per gli allergici: torna a 79€...
Blink a prezzo minimo storico: Mini 2K+ ...
Un professore tedesco perde due anni di ...
Perché Microsoft rilascia gli aggiorname...
Leapmotor, arrivano C10 Long Range e AWD...
Finalmente un bel portatile gaming in of...
Speciale Ring su Amazon: videocitofoni e...
Clair Obscur: Expedition 33 è il ...
Creatività umana in pericolo? Il ...
Windows 11, il PC non si avvia: l'incubo...
Microsoft ha fornito all’FBI chiavi BitL...
BYD alza l'asticella fuori dalla Cina: n...
Chip Apple: Intel potrebbe affiancare TS...
Renault Captur, nuovo motore GPL ECO-G 1...
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:40.


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