Oppure

Loading
07/10/09 19:17
fosforo
Ciao
Ho un Dual Xeon Dual Core.
Ho notato che molti programmi commerciali utilizzano solo 1 core
mentre gli altri rimangono inutilizzati.
Vorrei capire se esiste la possibilità di monitorare l'utilizzo dei vari core per poi utilizzarne i meno occupati.


Grazie
Ultima modifica effettuata da fosforo 07/10/09 19:19
aaa
07/10/09 20:19
theprogrammer
Non ho capito ... vuoi che i programmi scritti da te possano utilizzare piu' core ?

Oppure vuoi che i "programmi commerciali" di cui parli utilizzino tutti i core ?
aaa
08/10/09 7:44
fosforo
Scusami ma visto l'ora del 3d era meglio che andavo a casa a dormire.

Dunque.....
Ho notato che certi programmi commerciali usano 1 solo core, (Es. Quick Time).
Quando lo lancio vedo tramite il Task Manager di XP che 1 core lavora e gli altri sono praticamente fermi.
Ora devo scrivere un programmino e vorrei capire se c'è la possibilità di controllare l'utilizzo dei vari core e indirizzare il mio programma nel core meno utilizzato.

Grazie
aaa
08/10/09 8:23
TheKaneB
Risposta breve: non puoi, ma...


Risposta lunga:
Puoi programmare un software separandone le funzioni (Input, Rendering, Processing, ecc...) su thread separati, ma sarà il sistema operativo (precisamente lo "Scheduler" dello stesso) a decidere quali core occupare. Hai comunque una discreta garanzia che il Sistema Operativo sia sufficientemente intelligente da gestire al meglio l'allocazione dei core. Se fossi tu a decidere quali core utilizzare dovresti costantemente monitorarne il carico e prevedere delle strane e complesse procedure per migrare da un core all'altro nel momento in cui i carichi subiscano delle modifiche. Lasciandosi, invece, gestire dal SO hai tutto questo in modo trasparente (compresa la migrazione tra i core) e devi "solo" occuparti di creare e sincronizzare i vari thread (che già non è una cosa semplice per un esperto, figuriamoci per un principiante).

Questo vale per tutti i programmi, indipendentemente dal linguaggio utilizzato.
aaa
08/10/09 8:56
fosforo
Grazie T

Per capirci di più ho creato un piccolo programmino che lancia + QuickTime alla volta
e visualizza vari filmati.
Guardando il Task Manager scopro che QT cade sempre nello stesso core.
Ecco xkè mi chiedevo se riuscivo a lanciare eventuali programmi decidendo io su quale Core appoggiarli.

Ne aprofitto visto che mi hai parlato di thread.
Ecco come sto scrivendo per lanciare una semplice copia di file su + thread:

' lancio Sub x copia TXT
Dim T1 As New Threading.Thread(AddressOf CopyTXT)
T1.Start(New String() {NomeFile1,Nome})

Private Sub CopyTXT(ByVal parametri() As String)
System.IO.File.Copy .... etc etc


' lancio Sub x copia TXT
Dim T2 As New Threading.Thread(AddressOf CopyDOC)
T1.Start(New String() {NomeFile1,Nome})

Private Sub CopyDOC(ByVal parametri() As String)
System.IO.File.Copy .... etc etc

Chiaramente codice sintetizzato.
Pensi che sia corretto??

Grazie e scusa la mia impreparazione
aaa
08/10/09 9:17
TheKaneB
Ciao, non posso esserti molto utile sul codice, perchè non conosco VB.Net
Ma da quello che riesco ad interpretare, il procedimento mi sembra corretto. In generale credo che sia meglio comunque chiedere ad un esperto di VB.Net, magari ci sono delle cose nella libreria del Threading che puoi sfruttare.

Io posso aiutarti da un punto di vista teorico, sulla gestione "generale" del threading, oppure sul codice in C o C++ per implementare il multithreading.
aaa
08/10/09 12:00
theprogrammer
In realta' puoi "proporre" al sistema operativo l'uso di un core specifico per il tuo nuovo thread o processo (tramite la ProcessorAffinity della ProcessThread) o con la API SetThreadAffinityMask.

E' comunque una "proposta" nel senso che il sistema puo' comunque scegliere altrimenti.
aaa
08/10/09 12:04
fosforo
Ok capito
Sto vedendo che in Vista c'è un comando apposito già sotto DOS.

/affinity #
aaa