Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-08-2015, 18:14   #1
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
realizzare timer C#

sto facendo un programma in cui ho la necessità di misurare il tempo di esecuzione di un set di istruzioni, qualcuno sa come aiutarmi? l'idea è di far partire un timer in un punto, fermarlo in un altro e scrivere il valore ottenuto in una variabile tempo (che conta i secondi)
ho provato 1000 cose ma nessuna funziona
__________________
constantly changing rig...

Ultima modifica di frank8085 : 19-08-2015 alle 18:17.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 07:51   #2
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
Utilizza l'oggetto Stopwatch (namespace System.Diagnostic):

Stopwatch - MSDN

Banalmente si utilizza così:

Codice:
var sw = new Stopwatch();
sw.Start();    //parte il timer

//do stuff

//per stampare ad esempio su console il tempo passato utilizza
Console.WriteLine(string.Format("Tempo passato {0}", sw.ElapsedMilliseconds));

così ti da il tempo passato sino a quel momento. Se vuoi fermarlo, banalmente sw.Stop().
Un appunto: se per caso sei in debug l'esecuzione è ferma su un breakpoint, il timer continua a contare il tempo, quindi avresti una rilevazione errata.

Ciao
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 12:00   #3
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
alla fine ho risolto così:
Quote:
// ....
var sw = new Stopwatch();

sw.Start(); //parte il timer

// elaborazione

sw.Stop();

MessageBox.Show("finito");
//.... altro
tempo = Convert.ToDouble(sw.ElapsedMilliseconds);
tempo = tempo / 1000;
//MessageBox.Show("tempo: " + tempo.ToString());
label3.Text = tempo.ToString();
//...continua
avrei un altra cosa da risolvere...vorrei far lavorare il programma in multithreading sfruttando tutta la potenza della CPU se necessario dato il tipo di programma, quindi non so se possiamo continuare a parlarne qui o magari devo aprire un nuovo thread
__________________
constantly changing rig...

Ultima modifica di frank8085 : 20-08-2015 alle 12:44.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 13:05   #4
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
Che versione del framework .NET utilizzi?

p.s.
Codice:
MessageBox.Show("finito");
//.... altro
tempo = Convert.ToDouble(sw.ElapsedMilliseconds);
tempo = tempo / 1000;
//MessageBox.Show("tempo: " + tempo.ToString());
Non so cosa fai dentro //.... altro ma, se non vuoi che tale codice rientri nel tuo tempo di elaborazione, ti conviene spostare l'assegnazione della variabile tempo (tempo = Convert.ToDouble(sw.ElapsedMilliseconds); ) prima della show di "finito", sennò il tempo va avanti e non hai la misurazione corretta ai morsetti del tuo calcolo.

Ultima modifica di Kintaro10 : 20-08-2015 alle 13:08.
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 13:17   #5
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
uso la versione 4.6


provo...ma mi stai dicendo che il timer continua dopo l'istruzione STOP al punto che la messagebox interferisca sulla misurazione? ?!?!


ho VS2015, sono riuscito a verificare il tempo che intercorre tra la pressione del bottone: istante 2.55s alla messagebox "finito" (istante 6.22s), risultano 3.67s, il timer ha restituito: 3.669 ms, ovviamente VS penso che abbia fatto l'approssimazione del "9". quando fai il debug oltre ad indicare la memoria consumata, l'utilizzo % della CPU, ti dice anche la lista degli eventi scatenati e quale istante temporale risalgono rispetto l'avvio del programma
__________________
constantly changing rig...

Ultima modifica di frank8085 : 20-08-2015 alle 13:29.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 13:51   #6
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
No sorry svista mia, non avevo visto lo stop del timer. Per la domanda sul multithread ne parliamo qua o fai nuovo thread?
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 15:47   #7
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
se la cosa non va contro nessuna regola assurda io continuerei qua
queste erano quelle cosette di cui parlavo prima:


__________________
constantly changing rig...

Ultima modifica di frank8085 : 20-08-2015 alle 15:50.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 20:46   #8
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
Che tipo di operazioni vuoi compiere in multithread?
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2015, 21:40   #9
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
in realtà questo programma è piuttosto banale, ho scoperto che facendo fare ciclicamente molte operazioni aritmetiche utilizzavo molte risorse, allora ho pensato di fare un programma di benchmark personale, una cosa ridicola per puro sfizio. ora praticamente premendo il pulsante vengono trovate tutte le potenze di 2 fino a 2^60 (sarebbe 2^64 un long/double ma io mi sono fermato un po' prima) dopodichè il valore viene riportato ad 1 e si ricomincia finchè non si sono fatte 1 miliardo di eleventi a potenza, misuro il tempo tra l'inizio del calcolo fino alla fine, in base al tempo attribuisco un punteggio...l'ho provato su 3 computer e dà risultati affidabili, ovviamente il programma usa un solo thread degli 8 disponibili almeno su questo pc.
ho alcuni mesi fa sperimentato la programmazione concorrente con il C++, ma non ho idea di come farla in C#, comunque creando gli N thread, tutti dovrebbero fare quello che ora fa uno solo, però sorgerebbe il problema del timer che non può essere univoco.

in ogni caso devo rischiararmi le idee
__________________
constantly changing rig...

Ultima modifica di frank8085 : 20-08-2015 alle 21:43.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2015, 07:49   #10
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
Non ho ben capito se hai un loop o meno nel tuo programmino di test, comunque puoi usare due strade (entrambe della libreria System.Threading):
  1. Parallel loop
    Si possono usare le funzioni for e foreach del costrutto Parallel; queste funzioni parallelizzano una serie di istruzioni al loro interno; se non specificato nulla, il calcolatore decide da solo quanti task staccare a seconda delle prestazioni della macchina, viceversa puoi dirgli te quanti farne al massimo.
  2. Task factory
    In questo caso decidi te quando creare un task, cosa deve fare al suo interno, e quando il task principale deve attenderlo. Banalmente ne puoi creare uno con Task.Factory.StartNew (come ritorno hai il task stesso), e per aspettare uno o più task puoi usare ad esempio Task.WaitAll o Task.WaitAny . Questo argomento è un po' più ampio, vi sono più cose da poter vedere.

In tutti i casi stai attento ai problemi di concorrenza tra thread, usa se servono delle collection che gestiscono il multithreading (es. ConcurrentBag) oppure fai dei lock dove hai bisogno di accessi esclusivi.

Ciao

Ultima modifica di Kintaro10 : 21-08-2015 alle 09:14.
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2015, 12:21   #11
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
scelgo l'opzione 1,
non ho capito esattamente il problema che hai detto alla fine,
io so alcune cose della programmazione concorrente che possono essere problematiche:
- non si possono fare previsioni sull'ordine di esecuzione dei thread
- questi possono intromettersi in qualunque momento dove in C++ non si usano le mutex che rendono un set di istruzioni "atomiche". vorrei vederci più chiaro sulla questione


ora devo capire come fare questo "parallel loop"
__________________
constantly changing rig...

Ultima modifica di frank8085 : 21-08-2015 alle 12:23.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2015, 12:48   #12
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
I loop parallel sono il For ed il Foreach, in rete trovi un sacco di documentazione a riguardo, se poi hai problemi scrivi qua.

Per l'altro discorso ti faccio un esempio: tu hai una lista, su cui possono scrivere / leggere contemporaneamente più thread. Se gli accessi non sono gestiti accuratamente, potresti avere problemi con i dati (thread che leggono dati vecchi, oppure doppia scrittura contemporanea che genererebbe eccezione). Per ovviare a questi problemi puoi usare dei lock (come i semafori) oppure usare delle collection apposite messe a disposizione dal framework che includono già i controlli nelle get e set.
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 21-08-2015, 18:15   #13
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
il parallel.for funziona alla grande per ora, prima avevo lasciato un post in cui dicevo della non-uniformità dei risultati ma mi è venuto in mente che il risultato è fortemente condizionato da altri processi in esecuzione,
i risultati passano da 900ms a 2.5 secondi solo perchè ci sono 4 programmi aperti, per dare un risultato affidabile bisogna avere tutta la CPU a disposizione per quegli 8 thread.
ora l'unico dubbio riguarda l'adattamento ad altre macchine che non necessariamente hanno 8 thread, magari ne hanno solo 4 o magari ne hanno di più, ecco devo far fare un numero equo di calcoli (sempre 1 miliardo) indipendentemente dal numero dei thread disponibili, ma non voglio usarne un numero limitato in modo da adattarmi, voglio che si usino in tutti i casi quelli disponibili...
bisognerebbe sapere prima del lancio del calcolo il numero di processori virtuali disponibili, così da suddividere il miliardo di calcoli tra gli n thread. come potrei fare a parte chiederlo banalmente all'utente?
__________________
constantly changing rig...

Ultima modifica di frank8085 : 21-08-2015 alle 20:49.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2015, 13:47   #14
Kintaro10
Senior Member
 
Iscritto dal: May 2004
Città: Sestri Levante
Messaggi: 617
Se quando dichiari il parallel for metti nessun parametro ulteriore, il programma in automatico utilizza tutte le risorse che il sistema gli dedica, e questo dovrebbe venire incontro alla tua richiesta; a seconda della potenza di calcolo del computer il framework "calibra" corettamente il for.

Se vuoi invece mettere un numero massimo, al parallel devi passare l'oggetto ParallelOptions, che ha come proprietà MaxDegreeOfParallelism che rappresenta il numero massimo di task da staccare.

P.s. per sapere il numero di core non serve chiederli all'utente, utilizza

Codice:
Environment.ProcessorCount
Kintaro10 è offline   Rispondi citando il messaggio o parte di esso
Old 22-08-2015, 15:37   #15
frank8085
Senior Member
 
L'Avatar di frank8085
 
Iscritto dal: Nov 2013
Città: Wien, Österreich-Ungarn
Messaggi: 933
piuttosto di suddividere il calcolo come sto facendo adesso per simulare la distribuzione corretta dei calcoli tra i vari thread (ora se uno finge di avere 36 thread ci impiega molto meno ad eseguire il miliardo di calcoli, non perchè abbia effettivamente 18C/36T ma perchè ogni thread ha un carico 4.5 volte inferiore rispetto quello che avrebbe con un valore corretto (Es: 8 thread), facendo la modifica che ho in mente capita l'opposto, la CPU non riuscendo a parallelizzare 36 thread su una CPU che ne conta 8 per volta al massimo, ecco in questo caso mettere un valore più alto influisce negativamente e costringe l'esecuzione dei thread in 5 fasi (4,5 approssimato a 5), quindi saresti 4.5 volte più lento. beh questa è tutta teoria, devo verificarla nella pratica
ah sicuramente faccio la modifica per cui escludo l'utente dalla scelta, si è decisamente meglio così, in questo modo nessuno può "falsificare" il risultato mettendo un numero di thread non corretto.
si prenderò dal sistema il numero di thread effettivi, e poi in base al valore estrapolato suddivido il carico.

Grazie Mille
__________________
constantly changing rig...

Ultima modifica di frank8085 : 22-08-2015 alle 15:39.
frank8085 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Attenti a questo update fake di Windows ...
NIO chiede la standardizzazione di batte...
Da 80 mesi-uomo a poche ore: l'AI cambia...
In 2 settimane senza social il cervello ...
Amazon top 7 di oggi: 2 portatili intere...
SteamGPT trapela dal client Steam: ecco ...
Boom clamoroso per questo piccolo produt...
Amazon Luna saluta gli store di terze pa...
Windows Update non sarà più un incubo: M...
Stampante HP con Wi-Fi e 3 mesi di inchi...
Metro 2039 potrebbe essere il nuovo capi...
Call of Duty: Modern Warfare 4 l'uscita ...
Mega risparmi su Amazon Haul fino a mezz...
Il Blu-ray è davvero morto? Due a...
OpenAI punta sulla pubblicità in ...
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: 13:59.


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