Microsoft Windows XP 64 bit: ormai manca poco!
Negli ultimi giorni vari rumors segnalano come data di rilascio per il nuovo windows a 64bit, il 29 Aprile. Per ingannare l'attesa Microsoft ha distribuito una versione trial che, stando a vari commenti raccolti in rete, appare abbastanza matura e non ha creato particolari problemi nel riconoscimento
di Fabio Boneschi pubblicata il 28 Gennaio 2005, alle 17:23 nel canale ProgrammiMicrosoftWindows









ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
WINDTRE, le offerte di fine luglio: 5G Full Speed da 5,99 euro al mese
Due scrivanie angolari gaming a prezzi bassissimi: una a 102,88€ solo per Prime e l'altra a 99,99€ con prese USB e layout reversibile
Telecamere e intelligenza artificiale sui camion dei rifiuti: come alcune città USA controllano le case
L'ASUS Zenbook di cui tutti parlano torna in offerta: OLED 3K da 14'', Core Ultra 7, 16GB e 1TB a 999€ dopo uno sconto di 500€
Helios, la piattaforma di Schneider Electric e AMD per le AI Factory del futuro
Multiverse Computing raccoglie 500 milioni di euro per l'IA europea che può girare ovunque, anche su uno smartphone
Videogiochi, social e azzardo: un giovane su sei tra 11 e 17 anni ha un comportamento a rischio
Tre astronauti rientrano dalla ISS: la Soyuz MS-28 tocca terra in Kazakistan
Kimi K3 ha trovato 19 zero-day in Redis in 90 minuti
Aggiungere un acceleratore IA per data center al proprio PC: si può fare e costa incredibilmente poco
Debian valuta lo stop totale ai contributi generati dall'IA
Huawei sfida il ban USA: al via la produzione propria di memorie HBM per l'IA
QNAP lancia i nuovi NAS TS-262A e TS-462A per ambienti domestici e piccoli uffici
E4 Computer Engineering e EuroHPC JU uniscono le forze su MeluXina-AI, l'HPC per l'IA europea









211 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - infoA me invece questa sembra una delle più belle discussioni che si possano trovare sull'argomento!
Forse una delle più belle su questo forum!
Grazie!
quoto
Prendendo queste due routine che hai scritto (e che ho riportato sotto), fissando tre semplici condizioni posso azzardare una dimostrazione formale che l'esecuzione del codice a 32 bit è SEMPRE più lento di quello a 64 bit.
Le condizioni sono:
- che il codice (dal push degli argomenti alla fine della routine) stia interamente nella cache L1;
- che non si verifichi nessuna interruzione (nemmeno un page fault o eccezione) dal codice che esegue il push dei parametri fino alla prima istruzione (esclusa) della routine;
- che non si verifichi nessuna interruzione ESTERNA (i page fault e le eccezioni generate dal processore sono ammessi) dalla prima istruzione delle routine all'ultima.
Mi sembrano condizioni "ragionevoli" e che, IMHO, stanno ampiamente "nella media".
[CODE]
; Mode: PM_32
; Ottimizzazione: Nessuna
; Codice per salvattaggio dei registri
mov eax,[arg1_low]
mov edx,[arg1_hi]
mov ebx,[arg2_low]
mov ecx,[arg2_hi]
mov esi,eax
mov edi,edx
sub esi,ebx
sbb edi,ecx
add ebx,eax
adc ecx,edx
mul ecx
mov eax,ecx
mov eax,edi
mul ebx
add ecx,eax
mov eax,esi
mul ebx
add edx,ecx
mov [result_low],eax
mov [result_hi],edx
; Codice di ripristino dei registri
-----------------------------------------
; Mode: PM_64
; Ottimizzazione: Nessuna
; Codice per salvattaggio dei registri
mov rax,[arg1]
mov rbx,[arg2]
lea rcx,[rax+rbx]
sub rax,rbx
mul rcx
mov [result],rax
; Codice di ripristino dei registri
[/CODE]
Per adesso tralascio la dimostrazione: se qualcuno volesse cimentarsi, è libero di farlo.
Per quanto riguarda l'altro esempio (quello con i pushad e la chiamata a routine), posso fornire un'altra dimostrazione simile, aggiungendo un'altra condizione abbastanza "ragionevole" e "nella media".
Mi sembrano condizioni "ragionevoli" e che, IMHO, stanno ampiamente "nella media".
Proprio sulla possibilità del punto 2) e 3) si basava il discorso di fek
I punti 1), 2) e 3) garantiscono che la somma dei tempi di esecuzione delle singole istruzioni corrisponde al tempo di esecuzione della routine.
Incidenza degli accessi in memoria:i punti 2), 3) garantiscono che i dati si trovano in cache.
Assunzione (sicuramente verificata nell'Athlon64): due accessi a 32 bit sono più lenti di un singolo accesso a 64 bit, dalla cache.
Resta solo da valutare, calcolatrice alla mano
Non è una dimostrazione formale ma una traccia di come affronterei il problema
quante risorse vuole?
Speriamo che non ci vogliano un mouse con quattro palle, un processore da 1000000 Mhz, 100000000 Mb di RAM DDR1000 per farlo "girare" decentemente....ed un hd a 200000 rpm per caricarlo senza doversi addormentare sulla tastiera per l'attesa...
Prendendo queste due routine che hai scritto (e che ho riportato sotto), fissando tre semplici condizioni posso azzardare una dimostrazione formale che l'esecuzione del codice a 32 bit è SEMPRE più lento di quello a 64 bit.
E' questo il mio punto, e non si tratta di parlare lingue diverse, ma di sapere di che cosa si sta parlando oppure no, oppure di essere in malafede
Puoi riuscire a dimostrare che quel particolare pezzo di codice a 64 bit e' sempre piu' veloce a livello teorico, ma poi lo metti in condizioni reali, ne misuri le prestazioni e ti accorgi che nella realta' pratica difficilmente riuscirai a notare differenze prestazionali.
E' ovvio, che se qualcuno e' in malafede, puo' semplicemente buttare il codice in un inner loop e cercare di dimostrare anche che gli asini volano, ma il mio discorso e' sempre stato il seguente:
in condizioni di esecuzione normale, e' difficile che si possano apprezzare differenze perche' di solito quel codice e' memory bound.
In altre parole, se l'ambiente in cui quelle istruzioni sono eseguite contiene molte altre istruzioni e molti altri accessi ai dati, e' molto probabile che i dati per quelle istruzioni non saranno in cache e la CPU si trovera' ad attendere l'arrivo dei dati su cui operare per la maggior parte del suo tempo, rendendo del tutto vano il risparmo di istruzioni. Questa e' la situazione tipica, un inner loop non e' la situazione tipica.
Spero di essere stato piu' chiaro ora, e a chi pensa di parlare una lingua diversa dalla mia, consiglio di imparare prima l'italiano
Proprio sulla possibilità del punto 2) e 3) si basava il discorso di fek
Il mio discorso si basa sulla singola esecuzione di quella funziona in un contesto nel quale i dati su cui opera non sono in cache.
In questo contesto, che e' il piu' probabile, le due versioni saranno molto probabilmente perfettamente equivalenti, e non certo una sicuramente piu' veloce dell'altra.
Ho poi aggiunto che in generale (e non solo nel caso particolare) non ha senso parlare di funzioni sicuramente piu' veloci di altre perche' va prima analizzato l'ambiente nel quale vengono eseguite.
Prima di leggerla ero convinto che passare a 64bit comportava solo vantaggi
Dopo aver letto tutta la discussione sono pienamente daccordo con fek, i vantaggi migliori si avrebbero su calcoli ripettivi su pacchetti di dati e/o variabili di dimensioni abbastanza ridotti da poter essere contenuti nella cache evitando accessi alla memoria esterna, condizione che credo sia abbastanza rara per la maggior parte dei programmi.
Faccio un esempio (mooolto a spanne (ergo: con numeri inventati
Se per eseguire 100 routine diverse con codice a 64bit impiego in media 20nS a routine ma devo accedere 100 volte alla memoria esterna per recuperare delle variabili che non ci stanno in cache per un tempo di 50nS ad accesso ottengo un totale di 7uSecondi.
Se le eseguo in codice 32bit magari impiego 40nS a routine ma accedo solo 50volte alla memoria esterna ottengo 6,5uS.
PS. vi lascio liberi di caziarmi se ho sparato qualche fregnaccia soprattutto per i tempi di accesso in memoria
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".