Newsgroup: it.comp.lang.delphi
Titolo: Delphi, assembler e relativa documentazione.

Salve a tutti,
visto che la maggior parte dei miei programmi in Delphi sono pesanti
routine di calcolo (generazione/elaborazione del suono), una delle mie
risorse principali per operare ottimizzazioni risiede nell'uso
dell'Assembler nelle parti nevralgiche del programma (sono ancora uno
di quelli che crede che la versione 2.0 di un programma debba essere
piu' veloce della 1.0).
Ovvio che questo mio approccio e' possibile portarlo avanti se si ha
documentazione e quella che ho io dell'Assembler x86 e' un oramai
vecchio PDF risalente alla tecnologia Pentium.
Oggi sono disponibili i set 3DNow ed MME ma, oltre a non sapere se
Delphi li supporta nell'inline Assembler (questa e' la prima domanda
che vi pongo), non sono ancora stato in grado di trovare una
documentazione decente a questi set di istruzioni... avete idea dove
posso trovarla?
E dove e' possibile trovare una documentazione, riportante cicli di
clock e modalita' d'uso, aggiornata al Pentium III (o IV o anche AMD
Athlon) delle istruzioni Assembler?
Spero di non dovermi riferire ai cicli di clock del Pentium in eterno!
Grazie a chiunque sappia aiutarmi.
Ciao
   Jenner
----(
http://neurotix.com
)----
----(
jen...@neurotix.com
)----

 ha scritto nel messaggio
news:6a490c13.02050...@posting.google.com...

Prova questo link, è almeno un punto di partenza, però
poi fammi sapere se hai trovato qualcosa di utile
http://www.programmersheaven.com/zone5/articles/article157.htm
                                danilo

Dimenticavo questo ha anche dei link alle pagine
della Intel.
http://www.agner.org/assem/
                                    danilo

 Athlon) delle istruzioni Assembler?
se non sbaglio qualche tempo fa trovai sul sito della intel un manuale 
con tutte le specifiche dei processori. naturalmente loro non ti daranno 
mai un pdf di 1000 pagine con tutte le specifiche del pIV ma dovresti 
trovare parecchia documentazione perlomeno sul pIII o almeno sul MMX. 
Per quanto riguarda amd non saprei dirti però penso che sul loro sito ci 
sia comunque qualcosa.
Ciao
Sha

>poi fammi sapere se hai trovato qualcosa di utile
Seguendo il link che
mi hai passato e facendo un po' di ricerche con parti degli URL presenti in
quella pagina sono riuscito ad arrivare fino qua:
http://www.x86-64.org/
Nella sezione "Documentation" si trova una "AMD Extensions to the 3DNow!
and MMX Instructions"
(
http://www.amd.com/products/cpg/athlon/techdocs/pdf/22466.pdf
) e la
reference delle istruzioni Assembler per Pentium II
(
http://developer.intel.com/design/pentiumii/manuals/24319102.PDF/manuals/24319102.PDF
).
Da quest'ultimo link ho provato a "tagliare" qualche directory e
aggiungendone pezzi "a naso" scoprendo che esiste anche:
http://developer.intel.com/design/pentiumiii/manuals
 (documentazione sul
PentiumIII)
e
http://developer.intel.com/design/pentium4/manuals
(documentazione sul Pentium4)
Su quest'ultimo link ho trovato la "IA-32
Instruction Set Reference"
(
http://developer.intel.com/design/pentium4/manuals/24547106.pdf
) dove sono
riportate sia le istruzioni MMX che SSE (nel mio precedente post ho scritto
erroneamente MME...).
Ci sono ancora due cose che continuo a chiedermi:
per quale caspita di motivo non vengono riportati i cicli di clock delle
istruzioni, e' un segreto? Non crederanno mica che mi vada a bere la storia
che grazie alle pipeline e' come se fossero tutte di un ciclo di clock?
(anche perche' basta usare una FDIV o una FSQRT per rallentare, e di molto,
una routine di calcolo)
E il buon Delphi (ho la versione 5 Personal)
supporta queste istruzioni (MMX, 3DNow e SSE)? Magari la versione 6?
Ti
ringrazio comunque moltissimo per l'aiuto.
Ciao
   Jenner
----(
http://neurotix.com
)----
----(
jen...@neurotix.com
)----
--------------------------------
Inviato via 
http://usenet.iol.it
 

 che grazie alle pipeline e' come se fossero tutte di un ciclo di clock?
Perche' non ci dovresti credere ?
Questo e' il principio alla base di tutti i processori RISC.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Perche' non ci dovresti credere ?
Beh, essenzialmente
perche' non e' cosi'. Come ho scritto nell'inciso fra parentesi basta
introdurre una FDIV o una FSQRT per rallentare il tutto di parecchio, segno
che 1 ciclo -> 1 istruzione vale fino a che il processore fa cose semplici
(MOV, ADD, AND, MUL, FMUL, ecc. ecc.).
Ultimamente stavo facendo dei
benchmark sul alcune mie routine di generazione per vedere quali possono
funzionare in realtime. Una di queste non andava in realtime a causa delle
due FDIV presenti all'interno... fortunatamente ho potuto sostituire le
FDIV con delle FMUL e alcuni valori pre-calcolati (il che comunque si
traduce nell'aggiungere al codice 2 FLD)... bene, tolte le FDIV la routine
andava tranquillamente in realtime e potevo anche campionarne l'uscita con
un altro programma.
Il problema nasce quando le FDIV (o le FSQRT) non si
possono togliere.
Sapere i cicli di clock mi da la possibilita', se
c'e', di tentare altre strade riorganizzando il resto del codice cercando
di "mangiucchiare" un ciclo li' e un ciclo la'... magari puo' sembrare una
cosa paranoica questa ma in certe applicazioni come la generazione del
suono tramite forme semplici di intelligenza artificiale, ti ritrovi con
poco sforzo a veder richiamata quella routine molte decine di milioni di
volte per ogni secondo di suono generato... si fa presto a fare un secondo
(e poi due, tre, quattro...)! :)


 (MOV, ADD, AND, MUL, FMUL, ecc. ecc.).
Non ho mai provato codice assembly evoluto con i processori moderni,
ma mi sembra che qualsiasi piattaforma RISC preservi la caratteristica 
1 ciclo <-> 1 istruzione.  Probabilmente sulle piattaforme Intel questo
rapporto non e' cosi' preciso, ma mi chiedo: tu sviluppi sistemi 
real-time su piattaforme Intel ?


 1 ciclo <-> 1 istruzione.
ogni istruzione generalmente "consuma" 1 ciclo, ma cioè dipende dalla
predizione dei salti e dalla cache interna.


 dalla predizione dei salti e dalla cache interna.
Credo stiamo dicendo la stessa cosa, ma siamo completamente OT.
