|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2009
Messaggi: 1926
|
[c#] numero istruzioni eseguite
ragazzi, in un progetto in visual studio in C# è possibile farsi stampare il numero di istruzioni eseguite per l'esecuzione dell'intero algoritmo
grazie
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx: http://www.hwupgrade.it/forum/showpo...ostcount=21774 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 382
|
a compile-time sarebbe possibile solo se avessi codice privo di while
in generale è un calcolo eseguibile solo a run-time e dubito che il debugger di Visual Studio fornisca questa funzionalità sei costretto ad aggiungere a mano un contatore che aumenta dopo ogni istruzione... un pò pallosa come cosa, ma niente di mistico ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
|
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 382
|
Quote:
googleando ho sentito parlare di PTRACE_SINGLESTEP per contare il n° di istruzioni assembly dei programmi C forse c'è qualcosa di analogo anche per C# prima di impazzire nella ricerca di queste alternative, aspetto di sapere cosa intende veramente omniaforever ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2009
Messaggi: 1926
|
Quote:
alcune idee a riguardo?
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx: http://www.hwupgrade.it/forum/showpo...ostcount=21774 |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
per calcolare la complessità computazionale valutare il numero di istruzioni elementari non so se sia fattibile sinceramente, in alternativa potresti (ad esempio) valutare il consumo RAM /procio e fare una media tramiteil namespace System.Diagnostic
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2009
Messaggi: 1926
|
grazie, potrebbe essere una soluzione...ma mi faresti un semplicissimo esempio d'uso?
altre idee, anche basate sul tempo?(avevo pensato di calcolare il tempo da quanto inizia l'algoritmo e quando finisce, ma non so se ha molto senso per la complessità computazionale)... anche l'idea del PTRACE_SINGLESTEP potrebbe essere carina
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx: http://www.hwupgrade.it/forum/showpo...ostcount=21774 Ultima modifica di omniaforever : 15-02-2010 alle 12:09. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2001
Messaggi: 12839
|
Beh in teoria per calcolarti il costo computazionale non dovresti appoggiarti ad alcuna implementazione.
E del resto il numero di istruzioni di per se non è indicativo. Ad esempio: - sorgente Python: 1 riga - sorgente Java: 6 righe - bytecode Java: 30 righe - assembly: 90 righe D'altronde potresti avere situazioni in cui: - sorgente Python: 3 righe - sorgente Java: 5 righe - bytecode Java: 20 righe - assembly: 70 righe. (numeri casuali ovviamente) In ogni caso nessuna di queste informazioni ti dice quanto sia efficiente il codice, anche perché bisogna vedere quale tipo di istruzioni andrà eseguito e come saranno eseguite dal processore. Certo supponendo che ogni istruzione pesi uguale allora si potrebbe fare un discorso del genere. Secondo me quello che ti conviene fare è misurare direttamente il tempo di computazione al variare dell'input (con un paio di timer ad inizio ed a fine funzione o dove ti interessa effettivamente), sulla stessa piattaforma ovviamente. Ci sarebbe anche la possibilità del Profiling credo... |
![]() |
![]() |
![]() |
#9 | ||
Senior Member
Iscritto dal: Aug 2008
Messaggi: 382
|
Quote:
![]() se non sei alle prese con algoritmi ricorsivi o con implementazioni/strutture dati particolarmente complesse, dovrebbe essere facile trovare gli elementi teorici sufficienti per calcolare il costo computazionale asintotico Quote:
se usi dei metodi complessi o semplicemente dei quali non conosci l'implementazione, sei costretto a passare per la strada dei timer l'unica pecca è che devi avere computazioni particolarmente pesanti (almeno qualche decina di secondi) per ottenere una stima significativa del costo dell'algoritmo |
||
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2009
Messaggi: 1926
|
quindi potrei mettere banalmente un timer all'inizio del processo di una immagine, un altro timer alla fine del suo processamento , farmi la differenza dei tempi e in questo modo avrò il costo computazionale, giusto?
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx: http://www.hwupgrade.it/forum/showpo...ostcount=21774 |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2007
Città: villa verucchio
Messaggi: 1921
|
si in effetti la strada del timer come detto da WarDuck è più semplice di quella che ti avevo detto
![]() Se sei in windows form puoi usare la classe Timer dove puoi fare come hai detto, scorri i pochi metodi con l'intellisense e vedi subito come si può fare ![]()
__________________
CPU: Amd Phenom II 955--MB: Gigabyte GA-890GPA-UD3H--RAM:4 GB DDR3--SV: ATI Radeon HD 5770--HD: Western Digital Caviar Black 500 gb--ALI:: Corsair 650w--MONITOR: SyncMaster P2270--ROUTER: Netgear DG834G--SO: Win 7 Professional 64 bit |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: May 2001
Messaggi: 12839
|
Quote:
Ovviamente se hai modo di discriminare l'input e raccogliere molti campioni potresti fare una stima del costo computazionale dell'algoritmo (che ti ricordo è una cosa generica ed indipendente dalla macchina su cui gira, poiché dipende solo dall'input e dalla bontà dell'algoritmo). |
|
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Aug 2008
Messaggi: 382
|
Quote:
per ricavare i millisecondi attuali, puoi usare questo metodo che equivale al comodissimo omonimo Java: Codice:
private static readonly DateTime Jan1st1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static long CurrentTimeMillis(){ return (long) (DateTime.UtcNow - Jan1st1970).TotalMilliseconds; } |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2009
Messaggi: 1926
|
grazie a tutti
__________________
Come installare la rom cucinata V11-7 fixed di Hyperx: http://www.hwupgrade.it/forum/showpo...ostcount=21774 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:24.