mboost-dp1
Instruktionssæt [32bit vs. 64bit]
- Forside
- ⟨
- Forum
- ⟨
- Hardware
Jeg er ved at lave en opgave der skal beskrive instruktionssættene for hhv. en 32 bits processor og en 64bits processor.
Jeg vil kun skrive om de mest generelle instruktionssæt, hvilket medfører at jeg gerne vil have links/info om følgende producenters sæt.
32 bit:
Intel x86 [Pentium 3, Pentium 4, Core solo]
AMD [Sempron, Thunderbird, etc]
64 bit:
AMD [AMD64]
Intel [Core 2 duo, ikke Itanium medmindre nogle har noget meget relevant stof.]
Hvis nogle har spørgsmål, links [mere eller mindre relevant], så post dem endelig. Alting hjælper i nuværende fase. En god bog må også meget gerne anbefales. :)
På forhånd tak alle newz.dk læsere :)[Hvis nogle skulle have interesse i at læse det færdige dokument[når engang det er færdigt] kan jeg godt poste det et sted...?]
Jeg vil kun skrive om de mest generelle instruktionssæt, hvilket medfører at jeg gerne vil have links/info om følgende producenters sæt.
32 bit:
Intel x86 [Pentium 3, Pentium 4, Core solo]
AMD [Sempron, Thunderbird, etc]
64 bit:
AMD [AMD64]
Intel [Core 2 duo, ikke Itanium medmindre nogle har noget meget relevant stof.]
Hvis nogle har spørgsmål, links [mere eller mindre relevant], så post dem endelig. Alting hjælper i nuværende fase. En god bog må også meget gerne anbefales. :)
På forhånd tak alle newz.dk læsere :)[Hvis nogle skulle have interesse i at læse det færdige dokument[når engang det er færdigt] kan jeg godt poste det et sted...?]
Du kan jo evt. lave en artikel om det?
Men af links så er der jo i hvertfald wikipedia... der burde du kunne finde en masse. Så evt. både på da og en
Ellers så tjek deres hjemmesider, da de helt sikkert har noget info derinde også...
Men af links så er der jo i hvertfald wikipedia... der burde du kunne finde en masse. Så evt. både på da og en
Ellers så tjek deres hjemmesider, da de helt sikkert har noget info derinde også...
Jeg har self tjekket wikipedia [Note to self: Info omkring hvad du _har_ læst!]
Men vilda lige tjekke Intel og AMD, selvom jeg ikke regner med allermest info lige der. :)
Men vilda lige tjekke Intel og AMD, selvom jeg ikke regner med allermest info lige der. :)
#3 BK
regnede godt med at du havde tjekket wiki...;) Men u never know!
anyway brug google.. ligger helt sikkert uanede mængder information omkring det...! Ellers prøv at søge her på forummet..
regnede godt med at du havde tjekket wiki...;) Men u never know!
anyway brug google.. ligger helt sikkert uanede mængder information omkring det...! Ellers prøv at søge her på forummet..
Nu mener jeg ikke det er instruktionssættet der adskiller sig væsentligt, men derimod andre features og egenskaber for chippene. Med mindre du er ude efter et simpelt matrix af features hvor der indgår:
MMX, MMX+, 3DNow!, 3DNow!+, 3DNowPrefetch, SSE, SSE2, SSE3, SSE4, x86-64/EM64T, HTT, NX/XD-bit, SMX, VMX og AMD-V.
MMX, MMX+, 3DNow!, 3DNow!+, 3DNowPrefetch, SSE, SSE2, SSE3, SSE4, x86-64/EM64T, HTT, NX/XD-bit, SMX, VMX og AMD-V.
#6 svjv er der forskelle på hvor mange instruktionssæt der er for hhv. 32- og 64-bits processorne. Synes at det er svært at finde noget om instruktionssættene. Skal lige siges at jeg ikke er den store programmør, så vil gerne have noget lidt uddybende.
#5 Læser lige op på det site. Det er dog ikke foskellene på processorerne jeg skal beskæftige mig mest med, men som nævn instruktionssættet. [Er en del af en større gruppe hvor de andre finder info om "resten" der har med CPU'er at gøre.]
Smid endelig nogle flere links. :)
#5 Læser lige op på det site. Det er dog ikke foskellene på processorerne jeg skal beskæftige mig mest med, men som nævn instruktionssættet. [Er en del af en større gruppe hvor de andre finder info om "resten" der har med CPU'er at gøre.]
Smid endelig nogle flere links. :)
#8 Grunden til at det ikke er særligt klart er at jeg nok ikke er fuldt ud vidende hvad det faktisk er [derfor jeg spørger her :)].
Svaret på "Ønsker du at gå i detaljer med selve instruktionerne" er JA*. :)
*Ikke for dybt i detaljerne... Det er et begrænset projekt. :)
Svaret på "Ønsker du at gå i detaljer med selve instruktionerne" er JA*. :)
*Ikke for dybt i detaljerne... Det er et begrænset projekt. :)
#9 Du får svært ved at følge specifikke instruktionssæt, hvis ikke du har bare et overfladisk kendskab til 386 kode og arkitektur. Der er 2 typer beregninger der kan foretages, floating points (via FPU ALU'er) og heltal (via CPU ALU'er) og dette har alle computere tilfælles. Resterende operationer kan faktisk emuleres med disse basale ALU'er og med de andre centrale ting som stack pointer, instruktions pointer, status flag og simple kommandoer til at manipulere disse.
Men at emulere operationer, f.eks. division, har et vist overhead men har fordel af at være ekstrem fleksibelt. Det er denne type der går under RISC navnet. For at gøre det nemmere at designe compilere og skrive kode, blev flere og flere specialiserede instruktioner indført. Dvs. for at regne en kvadratrod ud kunne man blot bruge en speciel instruktion istedet for at implementere dette via en algoritme. Dette kaldes CISC design og har i de sidste år, overaskende vist sig at tilbyde bedre performance. x86 CISC kernen tibyder instruktioner som addision, subtraction, negation, multiplikation, division, modulus, kvadratrod, trunkering, skalering (base 10), rotation (base 2), sinus, cosinus, tangent og logaritmer (base 2 og 10).
Forskellen på 64bit og 32bit x86 kode er forholdsvis lille. De gamle 32bit registre (eax, edx, exc, ebx, esi, esi, edi, esp og ebp) blev ligepludselig en del af en større 64bit registre (rax, rdx, rcx, rbx, rsi, rdi, rsp og rbp). De samme instruktioner der findes til 32bit findes også til 64bit, plus nogle ekstra til at udføre casts og konvertering. Eftersom også stak og instruktionspointeren (rip) nu er 64bit, betyder det at der kan addresseres 2^64 byte (16 exabytes) istedet for førhen 2^32 (4 GB). Selve den kompilerede kode fylder lidt mere og det gør koden også i hukommelsen, da quad-byte alignment finder sted og samtlige pointere nu fylder 8 byte istedet for 4.
Coprocessoren/FPU'en (x87) der har siddet i samtlige x386 maskiner siden 486DX dagene, har 80-bit registre til at udføre sine kommatalsberegninger internt, men du kan kun sætte og hente dem som 64bit. En mangel på præcision og hastighed første til de udvidelser vi kender i dag som MMX, 3DNow! osv. Jeg kan ikke huske detaljerne, men i princippet går det ud på at man kan udføre samme type beregning på flere data samtidigt uden at skulle komme med samme instruktion gang på gang, men blot markere en bunke data. Dette lønner sig især ved komprimering, encoding, decoding mm.
HTT er Intel's måde at forsøge at udnytte deres monster store pipeline på 31 trin i Pentium 4 CPU'en, hvor der oftes viste sig at være store "huller" der kunne udnyttes imens. Så Intel indførte nogle ekstra instruktioner til at styre flere virtuelle CPU contexts, hvilket betyder samtlige registre findes 2 gange mens den egentlig processer kerne med ALU'er osv. måtte deles imellem de to.
NX/XD er hhv. AMD og Intel's "no execute" pointer, som blev indført for at undgå injekteret kode ved buffer-overflow fejl. Instruktions pointeren vil simpelthen nægte at pege på (og dermed eksekvere) instruktioner der ikke specifikt er markeret som eksekverbart (det er en buffer ikke).
AMD-V og VMX er hhv. Amd og Intel's virtualization instruktioner. Her er introduceret et lag imellem CPU og OS, der hjælper til med at styre context og ressourcer samt emulere flere sæt af registre - lidt i samme stil som HTT, men tilegnet den meget specielle software gren som Xen og VMware tager del i. I dag implementeres megen VM ved at fange kald fra gæst processen og modificere denne kode, men med AMD-V og VMX er CPU'en bekendt med at den kører et root OS samt et (eller flere) gæst OS'er og hvor det er muligt for root OS'et at blive underrettet og annullere specifikke instruktioner.
Jeg mener stadig ikke det er instruktionssættet der er det væsentligste for funktionalitet og hastighed, men istedet implementationen af disse. Tag f.eks. Intel's Core. Den er vanvittig meget bedre end NetBurst men instruktionssættet har stort set ikke ændret sig fra Prescott til Conroe.
Men at emulere operationer, f.eks. division, har et vist overhead men har fordel af at være ekstrem fleksibelt. Det er denne type der går under RISC navnet. For at gøre det nemmere at designe compilere og skrive kode, blev flere og flere specialiserede instruktioner indført. Dvs. for at regne en kvadratrod ud kunne man blot bruge en speciel instruktion istedet for at implementere dette via en algoritme. Dette kaldes CISC design og har i de sidste år, overaskende vist sig at tilbyde bedre performance. x86 CISC kernen tibyder instruktioner som addision, subtraction, negation, multiplikation, division, modulus, kvadratrod, trunkering, skalering (base 10), rotation (base 2), sinus, cosinus, tangent og logaritmer (base 2 og 10).
Forskellen på 64bit og 32bit x86 kode er forholdsvis lille. De gamle 32bit registre (eax, edx, exc, ebx, esi, esi, edi, esp og ebp) blev ligepludselig en del af en større 64bit registre (rax, rdx, rcx, rbx, rsi, rdi, rsp og rbp). De samme instruktioner der findes til 32bit findes også til 64bit, plus nogle ekstra til at udføre casts og konvertering. Eftersom også stak og instruktionspointeren (rip) nu er 64bit, betyder det at der kan addresseres 2^64 byte (16 exabytes) istedet for førhen 2^32 (4 GB). Selve den kompilerede kode fylder lidt mere og det gør koden også i hukommelsen, da quad-byte alignment finder sted og samtlige pointere nu fylder 8 byte istedet for 4.
Coprocessoren/FPU'en (x87) der har siddet i samtlige x386 maskiner siden 486DX dagene, har 80-bit registre til at udføre sine kommatalsberegninger internt, men du kan kun sætte og hente dem som 64bit. En mangel på præcision og hastighed første til de udvidelser vi kender i dag som MMX, 3DNow! osv. Jeg kan ikke huske detaljerne, men i princippet går det ud på at man kan udføre samme type beregning på flere data samtidigt uden at skulle komme med samme instruktion gang på gang, men blot markere en bunke data. Dette lønner sig især ved komprimering, encoding, decoding mm.
HTT er Intel's måde at forsøge at udnytte deres monster store pipeline på 31 trin i Pentium 4 CPU'en, hvor der oftes viste sig at være store "huller" der kunne udnyttes imens. Så Intel indførte nogle ekstra instruktioner til at styre flere virtuelle CPU contexts, hvilket betyder samtlige registre findes 2 gange mens den egentlig processer kerne med ALU'er osv. måtte deles imellem de to.
NX/XD er hhv. AMD og Intel's "no execute" pointer, som blev indført for at undgå injekteret kode ved buffer-overflow fejl. Instruktions pointeren vil simpelthen nægte at pege på (og dermed eksekvere) instruktioner der ikke specifikt er markeret som eksekverbart (det er en buffer ikke).
AMD-V og VMX er hhv. Amd og Intel's virtualization instruktioner. Her er introduceret et lag imellem CPU og OS, der hjælper til med at styre context og ressourcer samt emulere flere sæt af registre - lidt i samme stil som HTT, men tilegnet den meget specielle software gren som Xen og VMware tager del i. I dag implementeres megen VM ved at fange kald fra gæst processen og modificere denne kode, men med AMD-V og VMX er CPU'en bekendt med at den kører et root OS samt et (eller flere) gæst OS'er og hvor det er muligt for root OS'et at blive underrettet og annullere specifikke instruktioner.
Jeg mener stadig ikke det er instruktionssættet der er det væsentligste for funktionalitet og hastighed, men istedet implementationen af disse. Tag f.eks. Intel's Core. Den er vanvittig meget bedre end NetBurst men instruktionssættet har stort set ikke ændret sig fra Prescott til Conroe.
#10 Godt initiativ du lige skrev en indledende beksrivelse til dem der ikke helt var med :-)
"Jeg mener stadig ikke det er instruktionssættet der er det væsentligste for funktionalitet og hastighed, men istedet implementationen af disse. Tag f.eks. Intel's Core. Den er vanvittig meget bedre end NetBurst men instruktionssættet har stort set ikke ændret sig fra Prescott til Conroe."
Enig - instruktionssættet er jo basalt set blot en bunke regler som der "spilles" efter - og 2 fodboldspillere som spiller efter samme regler behøver jo ikke spille lige godt :-)
"Jeg mener stadig ikke det er instruktionssættet der er det væsentligste for funktionalitet og hastighed, men istedet implementationen af disse. Tag f.eks. Intel's Core. Den er vanvittig meget bedre end NetBurst men instruktionssættet har stort set ikke ændret sig fra Prescott til Conroe."
Enig - instruktionssættet er jo basalt set blot en bunke regler som der "spilles" efter - og 2 fodboldspillere som spiller efter samme regler behøver jo ikke spille lige godt :-)
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.