|
|
|
![]() |
|
Strumenti |
![]() |
#281 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Quote:
NVidiaaaa... il mio e' solo un E6600 @ 3000 (a casa) Mi ha tirato fuori solo 2 CPU infatti.
__________________
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. |
|
![]() |
![]() |
![]() |
#282 | |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
Quote:
![]() a casa cmq io ho solo un athlon 64 3000+@4000+ come pc fisso... Il q6600 è al lavoro.... Però in effetti mi sto consolando col nuovo mac book pro ![]()
__________________
![]() |
|
![]() |
![]() |
![]() |
#283 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#284 | |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
Quote:
io modificherei l'affermazione di cdimauro così:"In python, we often trust"
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
![]() |
![]() |
![]() |
#285 | |||||||||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Considerato lo scopo del progetto (che è orientato per gli overclocker), propenderei per la seconda, ma bisogna vedere, appunto, cosa viene restituito dalle classi WMI. Quote:
ProcessorId Quote:
Quote:
Quote:
![]() ![]() Quote:
Comunque l'approccio di cui sopra ti costringerebbe comunque a doverti scrivere un driver per poter lavorare in ring0 e accedere a tutte le informazioni che ti servono. Considerato che la libreria che ho usato fa già tutto, sarebbe come reinventarsi la ruota... Tra l'altro ha driver certificati MS e funziona su qualunque versione di Windows, anche x64 (io l'ho provata con Python a 32 bit su Vista x64 con utenza limitata). ![]() Quote:
![]() Quote:
simile (e corto)in risposta a questo: quanto codiceche aveva scritto gugoXX. Volevo semplicemente sottolineare che con IronPython non ci sarebbero state sostanziali differenze (ho parlato di codice "simile", infatti), e visto che il codice di gugoXX è corto, sarebbe stato corto anche quello con IP. ![]() Non ho parlato di codice più o meno corto né tanto meno di maggior o minor leggibilità. ![]() Tu invece stai ipotizzando che sarebbe meno leggibile, senza nemmeno averlo visto. ![]() Possibilissimo (conoscendomi ![]() ![]() Quote:
![]() Ad esempio questa: Codice:
def BitSetToStringList(Value, Names): List = [] for Name in Names: if Name and (Value & 1): List.append(Name) Value >>= 1 return List ![]() Questa mi sembra invece piuttosto leggibile per chiunque, no? ![]() Comunque rivedendo il sorgente che avevo postato mi sono reso conto che utilizzando una variabile "intermedia" per memorizzare il risultato di una list comprehension, il codice diverrebbe più leggibile. Ad esempio questo: Codice:
def c_intToStr(Value): return ''.join(chr((Value >> Shift) & 255) for Shift in (0, 8, 16, 24)) Codice:
def c_intToStr(Value): Characters = (chr((Value >> Shift) & 255) for Shift in (0, 8, 16, 24)) return ''.join(Characters) Codice:
def c_intToStr(Value): def ConvertByteToCharacter(Shift): return chr((Value >> Shift) & 255) Characters = (ConvertByteToCharacter(Shift) for Shift in (0, 8, 16, 24)) return ''.join(Characters) ![]() Quote:
![]() Quella di andare a smanettare con l'hardware è un'esigenza vecchia quanto il cucco, e da "secoli" sono disponibili soluzioni (come quella che ho impiegato): basta cercarle e usarle. Fino a Windows ME era possibile accedere direttamente all'hardware, ma con Windows NT, e in ogni caso da Windows 2000 in poi, ciò non è più possibile e bisogna necessariamente ricorrere a un driver e/o libreria. Che qualcuno, appunto, ha scritto. Rimane semplicemente da interfacciarvisi, e ho postato un esempio con Python che dimostra quanto ciò sia semplice. O non sei d'accordo? Stessa cosa si può fare con C++ o C#, di cui il pacchetto fornisce include / namespace ed esempi (molto più facile: io ho dovuto scrivermi tutto da zero, anche se ho impiegato pochissimo ![]() Non vedo quale sia il problema, quindi. ![]() Questo, ripeto, non volendo considerare come soluzione IronPython, ma semplicemente Python. Quote:
Tra l'altro se il framework .NET non permette di accedere a tutte le informazioni necessarie (e finora mi sembra che alcune manchino), giocoforza anche con C# sarà necessario rivolgersi a una libreria come quella che ho usato, oppure reinventarsi la ruota appoggiandosi a C++/CLR per realizzare le API / classi necessarie. Nessuna differenza con C#, quindi. Mah. Mi sembra una polemica inutile...
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 29-03-2008 alle 21:15. |
|||||||||||
![]() |
![]() |
![]() |
#286 |
Senior Member
Iscritto dal: Jun 2007
Città: Palermo
Messaggi: 34431
|
quindi ke linguaggio devo usare... sembra più semplice qsto phyton...
__________________
Case: Fractal Design Pop XL Air | PSU: Seasonic PRIME TX-1000 | CPU: Intel® Core™ i7 6950X Extreme Edition @ 4.0GHz w/ Alphacool Eisbaer Pro (Solo) + EK-Quantum Surface S280 MB: ASUS RAMPAGE V EXTREME/U3.1 | RAM: G.SKILL Trident Z DDR4 64GB @ 3200MHz (F4-3200C15Q-64GTZ) | VGA: ASUS ROG Strix GeForce® RTX 3080 Ti OC Edition 12GB Audio: Creative Sound Blaster® ZxR | SSD_1: Samsung SSD 980 PRO NVMe 1TB | SSD_2: Samsung SSD 870 QVO SATA 4TB | Monitor: ViewSonic ColorPro VP2776 |
![]() |
![]() |
![]() |
#287 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Se:
- non devi scrivere un driver; - il tuo scopo rimane esattamente quello che hai esposto qui http://www.hwupgrade.it/forum/showpo...&postcount=10; - come programmazione sei più bianco di un lenzuolo e devi, quindi, imparare partendo dalle basi; POTRESTI (metto il condizionale, altrimenti qui mi crocifiggono nuovamente, pur essendo in topic; vedi punto 2 qui sopra) prendere in seria considerazione Python (o IronPython se le classi della libreria standard .NET permettono di estrapolare TUTTE le informazioni che ti servono). ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#288 | |
Senior Member
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1726
|
Quote:
ciao
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino. |
|
![]() |
![]() |
![]() |
#289 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#290 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quello lo farai sicuramente. Prevedo 4 mesi terribili per me, pensando che dovrai lavorare con la tool chain scritta in Python fino alla chiusura di Fable 2...
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#291 |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
fek, cdimauro... grandi!
ma anche gugoXX... cionci gran mediatore ma anche gli altri del 3d... da okay per hobby ![]() ciao vado a cuccia... sono alticcio anche stasera ciao Edit: Mazda RX8 sei in un momento fortunato... sfruttalo e inizia a digitare!!! Ultima modifica di okay : 29-03-2008 alle 22:12. |
![]() |
![]() |
![]() |
#292 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ho rifattorizzato un po' il codice per renderlo più leggibile, e ho introdotto anche il calcolo della frequenza della CPU usando il timestamp (che, col Cool'n'Quite di mezzo, è abbastanza impreciso; comunque avevo voglia di provare qualcosa di nuovo
![]() Codice:
import threading, time from ctypes import * hw = windll.WinRing0 def c_intToString(Value): def ConvertByteToCharacter(Shift): return chr((Value >> Shift) & 255) Characters = (ConvertByteToCharacter(Shift) for Shift in (0, 8, 16, 24)) return ''.join(Characters) def c_intToNibbles(Value): def ConvertToNibble(Shift): return (Value >> Shift) & 15 Nibbles = (ConvertToNibble(Shift) for Shift in(0, 4, 8, 12, 16, 20, 24, 28)) return tuple(Nibbles) def CPUIDFunctionToString(Function): eax, ebx, ecx, edx = CPUID(Function) return c_intToString(eax) + c_intToString(ebx) + c_intToString(ecx) + c_intToString(edx) def BitSetToStringList(Value, Names): List = [] for Name in Names: if Name and (Value & 1): List.append(Name) Value >>= 1 return List class WaitingThread(threading.Thread): def run(self): global TimeElapsed time.sleep(10) TimeElapsed = True def CPUID(Function): eax = c_int(); ebx = c_int(); ecx = c_int(); edx = c_int() hw.Cpuid(Function, byref(eax), byref(ebx), byref(ecx), byref(edx)) return eax.value, ebx.value, ecx.value, edx.value def RDTSC(): eax = c_int(); edx = c_int() hw.Rdtsc(byref(eax), byref(edx)) return eax.value + (edx.value << 32) EDXFeatures = ('Floating-point unit on-Chip', 'Virtual Mode Extension', 'Debugging Extension', 'Page Size Extension', 'Time-Stamp Counter', 'Model Specific Registers', 'Physical Address Extension', 'Machine Check Exception', 'CMPXCHG8 Instruction Supported', 'On-chip APIC Hardware Supported', '', 'Fast System Call', 'Memory Type Range Registers', 'Page Global Enable', 'Machine Check Architecture', 'Conditional Move Instruction Supported', 'Page Attribute Table', '36-bit Page Size Extension', 'Processor serial number is present and enabled', 'CLFLUSH Instruction supported', '', 'Debug Store', 'Thermal Monitor and Software Controlled Clock Facilities supported', 'Intel Architecture MMX technology supported', 'Fast floating point save and restore', 'Streaming SIMD Extensions supported', 'Streaming SIMD Extensions 2', 'Self-Snoop', 'Multi-Threading', 'Thermal Monitor supported', 'IA64 Capabilities', 'Pending Break Enable') ECXFeatures = ('Streaming SIMD Extensions 3', '', '64-Bit Debug Store', 'MONITOR/MWAIT', 'CPL Qualified Debug Store', 'Virtual Machine Extensions', 'Safer Mode Extensions', 'Enhanced Intel SpeedStep Technology', 'Thermal Monitor 2', 'Supplemental Streaming SIMD Extensions 3', 'Context ID', '', '', 'CMPXCHG16B', 'Send Task Priority Messages', 'Performance Capabilities MSR', '', '', 'Direct Cache Access', 'Streaming SIMD Extensions 4.1', 'Streaming SIMD Extensions 4.2', '', '', 'POPCNT instruction', '', '', '', '', '', '', '', 'RAZ') hw.InitializeDll() try: eax, ebx, ecx, edx = CPUID(0) print 'CPU VendorID is:', c_intToString(ebx) + c_intToString(edx) + c_intToString(ecx) Brand = CPUIDFunctionToString(0x80000002) + CPUIDFunctionToString(0x80000003) + CPUIDFunctionToString(0x80000004) NoZeroCharsBrand = (Ch for Ch in Brand if Ch != '\x00') print 'CPU Brand is:', ''.join(NoZeroCharsBrand) eax, ebx, ecx, edx = CPUID(1) print 'CPU Stepping: %s, Model: %s, Family: %s, Processor Type: %s' % c_intToNibbles(eax)[ : 4] print 'CPU Features:' for Feature in BitSetToStringList(edx, EDXFeatures) + BitSetToStringList(ecx, ECXFeatures): print ' ', Feature TimeElapsed = False StartCounter = RDTSC() WaitingThread().start() while not TimeElapsed: pass StopCounter = RDTSC() if StartCounter > StopCounter: StartCounter, StopCounter = StopCounter, StartCounter print 'CPU is running at (about) %s Mhz' % ((StopCounter - StartCounter) / 10000000) finally: hw.DeinitializeDll() ![]() Per adesso è tutto. Buonanotte ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys Ultima modifica di cdimauro : 29-03-2008 alle 23:28. |
![]() |
![]() |
![]() |
#293 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Vabbe' basta.
Lo faccio in C# (e qualcosa di C++/asm) proprio perche' cosi' poi studiamo i confronti di linguaggio. A vista continuo a sostenere che non ci sia cosi' grande differenza. spero che la CPUID possa essere usata anche dal ring3, altrimenti lascio. Per intanto leggendo il tuo codice ho visto che devo restituire 4 registri e non 1 solo. Dal C++ lo saprei fare in modo semplice con una struct (cosi' evito marshaling pesanti verso il C#). Qualche altro suggerimento? Poi ho trovato un punto da migliorare ovvero la tua funzione BitSetToStringList Non ho ancora piena proprieta' di LINQ, ma se tutto va bene provo a stupirti un po' li'. I nibble fanno proprio pena pero' cribbio. Ma come gli e' venuto in mente? Usare i nibble... vabbe'. Mi sa che copio il tuo codice perche' non mi viene in mente nulla di meglio.
__________________
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. |
![]() |
![]() |
![]() |
#294 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Per intanto ho testato la CPUID e funziona anche in Ring3, cosi' abbiamo la fattibilita'.
Questo e' il codice C++ della parte che ci serve. Dato un intero (il parametro), restituisco al C# la struttura riempita con i 4 registri. Niente privilegi, call gate o simili. Meno male. Qualcuno sa se posso "condividere" la definizione della struttura tra C# e C++? Intendo, so che non sono la stessa cosa, ma la scrittura e' praticamente identica. Si possono "includere" in entrambi i posti? Boh, comunque non si muore, sono 5 righe, ma e' solo per saperlo, magari per il futuro (anche se sto per cambiare lavoro, e non penso proprio di usare il C++ neppure li') Codice:
#define DllExport __declspec( dllexport ) typedef struct { int reg_eax; int reg_ebx; int reg_ecx; int reg_edx; } REGS; DllExport REGS GetCPUID(unsigned int input) { REGS val; __asm { mov eax,input cpuid mov val.reg_eax,eax mov val.reg_ebx,ebx mov val.reg_ecx,ecx mov val.reg_edx,edx } return val; }
__________________
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. |
![]() |
![]() |
![]() |
#295 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Ed ecco la parte C#. Non ho messo la lettura del counter della CPU perche' ho letto che sulle WMI dovrebbe essere proprio la frequenza istantanea, quindi va meglio la versione di ieri.
Codice:
[DllImport("CPUID_DLL.dll")] static extern REGS GetCPUID(uint eax); // Classe di ritorno dal C++ struct REGS { public int reg_eax; public int reg_ebx; public int reg_ecx; public int reg_edx; } // Classe per contenere le stringhe associate ad un registro // E il metodo per restituire le interessate public class REGSSplitted { private string[] assoc; public REGSSplitted(string[] stampas) { assoc = stampas; } // E' la funzione chiave, stampa le stringhe relative alle feature // Il ritorno potrebbe anche essere string[], forse piu' chiaro // Ho messo l'enumerable, perche' meno si ritorna agli scalari // Meglio e' per i parallelismi futuri del PLINQ // Una funzione che ritorna un enumerable viene valutata // Effettivamente quanto serve (Lazy Evaluation) // In cascata, tutto insieme, e parallelizzato nel futuro PLINQ // Su core/processori separati. public IEnumerable<string> GetFromInt(int src) { // Spettacolo. Spero sia comprensibile // Restutisco le stringhe che hanno il bit corrispondente ad 1 var strs = from t in Enumerable.Range(0,32) where ( ( src & (1<<t)) !=0 ) select assoc[t]; return strs; } } private static REGSSplitted ecxfeat1 = new REGSSplitted( new []{ "Streaming SIMD Extensions 3", "", ... "", "RAZ", } ); private static REGSSplitted edxfeat1 = new REGSSplitted( new []{ "Floating-point unit on-Chip", "Virtual Mode Extension", ... "IA64 Capabilities", "Pending Break Enable" } ); // Restitusice la rappresentazione dei caratteri // relativi ai byte di un intero static string GetStringRepr(int val) { // Prendo l'intero, lo converto in byte byte[] bytearr = BitConverter.GetBytes(val); // converto tutti i byte in caratteri char[] chararr = bytearr.Cast<char>().ToArray(); // stringo string ret = new string(chararr); return ret; } //Restituisce i primi 4 nibble di un intero. static byte[] FromIntToNibbleOnly4(int intero) { //Copiato da te. //Lasciato funzionale perche' elegante, anche se incasinato //L'ho scritto prima procedurale e faceva altrettanto schifo. //Lo faccio solo per 4 valori... gli altri si cestinano comunque :) var ogni4 = new[] { 0, 4, 8, 12 }; var nibbles = ogni4.Select(t => (byte)((intero >> t) & 15)); return nibbles.ToArray(); } //Stampo le 4 stringhe dei 4 registri in ordine. //Funzionale mi sembra un po' esagerato. static void GetStringRepr(StringWriter sw,REGS complete) { sw.Write(GetStringRepr(complete.reg_eax)); sw.Write(GetStringRepr(complete.reg_ebx)); sw.Write(GetStringRepr(complete.reg_ecx)); sw.Write(GetStringRepr(complete.reg_edx)); } static void Main(string[] args) { REGS zero = GetCPUID(0); Console.WriteLine("CPU Vendor: {0}{1}{2}", GetStringRepr(zero.reg_ebx), GetStringRepr(zero.reg_edx), GetStringRepr(zero.reg_ecx)); //Prendo le stringhe dei registri, e le unisco di volta in volta StringWriter sw = new StringWriter(); REGS due = GetCPUID(0x80000002); GetStringRepr(sw,due); REGS tre = GetCPUID(0x80000003); GetStringRepr(sw, tre); REGS quattro = GetCPUID(0x80000004); GetStringRepr(sw,quattro); Console.WriteLine("CPU Brand : {0}", sw.ToString()); REGS uno = GetCPUID(1); byte[] vers = FromIntToNibbleOnly4(uno.reg_eax); // Qui non sono soddisfatto. Non so se riesco a far passare // come parametri diversi da stampare, quelli che e' il contenuto // dell'array. Console.WriteLine(@"CPU Stepping: {0}, Model: {1}, Family: {2}, Processor Type: {3}", vers[0], vers[1], vers[2], vers[3]); Console.WriteLine(""); Console.WriteLine("Features"); var stringhe = edxfeat1.GetFromInt(uno.reg_edx); stringhe=stringhe.Union(ecxfeat1.GetFromInt(uno.reg_ecx)); //Stampo in versione funzionale. Eccessivo, ma solo per studio. stringhe.ToList().ForEach(t => Console.WriteLine(t)); //Quella sopra e' la versione funzionale del codice seguente //foreach (string s in stringhe) //{ // Console.WriteLine(s); //} Console.ReadKey(); }
__________________
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. |
![]() |
![]() |
![]() |
#296 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Il risultato
Quote:
__________________
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. Ultima modifica di gugoXX : 30-03-2008 alle 01:59. |
|
![]() |
![]() |
![]() |
#297 | ||
Senior Member
Iscritto dal: Jun 2007
Città: Palermo
Messaggi: 34431
|
Quote:
Quote:
PS Potrei aprire un sondaggio ke dice di votare il linguaggio più semplice da imparare da un nubbio completo come me... ![]()
__________________
Case: Fractal Design Pop XL Air | PSU: Seasonic PRIME TX-1000 | CPU: Intel® Core™ i7 6950X Extreme Edition @ 4.0GHz w/ Alphacool Eisbaer Pro (Solo) + EK-Quantum Surface S280 MB: ASUS RAMPAGE V EXTREME/U3.1 | RAM: G.SKILL Trident Z DDR4 64GB @ 3200MHz (F4-3200C15Q-64GTZ) | VGA: ASUS ROG Strix GeForce® RTX 3080 Ti OC Edition 12GB Audio: Creative Sound Blaster® ZxR | SSD_1: Samsung SSD 980 PRO NVMe 1TB | SSD_2: Samsung SSD 870 QVO SATA 4TB | Monitor: ViewSonic ColorPro VP2776 |
||
![]() |
![]() |
![]() |
#298 | |
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
Quote:
no... non ci siamo... non dici cosa hai installato come tool e neppure ses hai digitato una qualche riga di codice... no non va bene. Da come scrivi si potrebbe, come succede sempre, innescare un flame, e questo non va bene. Devi capire che puoi iniziare anche con qbasic quando hai capito come funziona "il programmare" allora imparare altri linguaggi è una cosa semplicissima. Non c'è il linguaggio migliore. Devi iniziare a usarne uno poi imparerai tutti gli altri e quello che ti conviene di + per ciò che intendi fare. |
|
![]() |
![]() |
![]() |
#299 |
Senior Member
Iscritto dal: Jun 2007
Città: Palermo
Messaggi: 34431
|
phyton sembra più facile...
![]()
__________________
Case: Fractal Design Pop XL Air | PSU: Seasonic PRIME TX-1000 | CPU: Intel® Core™ i7 6950X Extreme Edition @ 4.0GHz w/ Alphacool Eisbaer Pro (Solo) + EK-Quantum Surface S280 MB: ASUS RAMPAGE V EXTREME/U3.1 | RAM: G.SKILL Trident Z DDR4 64GB @ 3200MHz (F4-3200C15Q-64GTZ) | VGA: ASUS ROG Strix GeForce® RTX 3080 Ti OC Edition 12GB Audio: Creative Sound Blaster® ZxR | SSD_1: Samsung SSD 980 PRO NVMe 1TB | SSD_2: Samsung SSD 870 QVO SATA 4TB | Monitor: ViewSonic ColorPro VP2776 |
![]() |
![]() |
![]() |
#300 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:33.