Huvikseni yritin disassmbloida gligc-2.28:n strlen rutiinia ja sain puristettua
ulos alla olevan intel-syntaxisen ja NASM:lla käännettävän (nasm -felf64 ...) koodin siitä.
Sitten testasin tätä (nasm'lla tuotettua) koodia linkitettynä staattisesti sitä kutsuvaan
C-koodiin ja vertasin tulosta standard C strlen kutsuihin....
; Tämä ON glibc strlen vieläpä hieman optimoituna,
; eli ei stack-framea ja poistettu kaksi if lausetta.
global as_strlen
section .text
as_strlen:
mov r9, rdi
test dil, 7
je addr_c
cmp BYTE [rdi], 0
jne addr_b
jmp addr_o
addr_a: cmp BYTE [rdi], 0
je addr_g
addr_b: inc rdi
test dil, 7
jne addr_a
addr_c: mov r8, 0xfefefefefefefeff
mov rsi, 0x8080808080808080
jmp addr_f
addr_d: cmp BYTE [rdx-7], 0
je addr_i
cmp BYTE [rdx-6], 0
je addr_j
cmp BYTE [rdx-5], 0
je addr_k
cmp BYTE [rdx-4], 0
je addr_l
cmp BYTE [rdx-3], 0
je addr_m
cmp BYTE [rdx-2], 0
je addr_n
cmp BYTE [rdx-1], 0
je addr_o
addr_e: mov rdi, rdx
addr_f: lea rdx, [rdi 0x8]
mov rax, QWORD [rdx-8]
lea rcx, [rax r8]
not rax
and rax, rcx
test rax, rsi
je addr_e
cmp BYTE [rdx-8], 0
jne addr_d
addr_g: mov rax, rdi
sub rax, r9
ret
xor eax, eax
ret
addr_i: sub rdi, r9
lea rax, [rdi 1]
ret
addr_j: sub rdi, r9
lea rax, [rdi 2]
ret
addr_k: sub rdi, r9
lea rax, [rdi 3]
ret
addr_l: sub rdi, r9
lea rax, [rdi 4]
ret
addr_m: sub rdi, r9
lea rax, [rdi 5]
ret
addr_n: sub rdi, r9
lea rax, [rdi 6]
ret
addr_o: sub rdi, r9
lea rax, [rdi 7]
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Ja mitä olivat tulokset?
glibc strlen voitti tämän rutiinin, eli se oli ~ 3-4% nopeampi kuin tämä
vaikka tämä koodi on melkein suora disassembly kyseisestä glibc rutiinista
Jokin pielessä?
Assembler vs GNU standard lib
4
509
Vastaukset 4
Ei välttämättä mikään pielessä.
C-kieli on käytännössä sitä assembleria mistä ohjelmallisesti tuotetaan optimaalinen tavukoodi prosessorin ajettavaksi ja prosessorivalmistajat optimoivat sitä kääntäjää. Käsin tavukoodin nysvääminen tuskin tuottaa nopeampaa tulosta.
Käsin tavukoodin nysvääminen yleisesti ottaen ollut sellaista mitä kannattanut välttää viimeiseen asti ja ollut 20v sellainen tilanne, että kääntäjästä parempaa tulosta ei oikein saa missään.
Itseasiassa 20v sitten oli sellainen kieli kuin Haskell kypsynyt jo niin hyväksi, että sillä pystyi ohjelmointikielen tasolla varmistamaan että ei ole sivuvaikutuksia koodissa joka sitten mahdollistanut optimointeja jotka ovat ihmiselle hyvin vaiketa saada virheettömästi tehtyä. Käytännössä tekeekin semmoista temppua että voi saada helposti tuotettua nopeampaa koodia mitä C:llä, kun jo C:llä sai parempaa koodia mitä käsin tavukoodia nysväämällä.tractor kirjoitti:
Kyllä kyllä, mutta tuo koodi on SUORA disassembly samasta C-rutiinista
"glibc strlen voitti tämän rutiinin, eli se oli ~ 3-4% nopeampi kuin tämä
vaikka tämä koodi on melkein suora disassembly kyseisestä glibc rutiinista"
Sanoit että melkein suora, eli ei identtinen.
- Anonyymi
Miten on koodisi alignment? Sillä on helposti 3-4 % merkitys, kun hyppyjä tehdään paljon.
Mutta missä on repnz scasb, jolla strlen oli aikaisemmin toteutettu? Sitä tehokkaampaa koodia tuskin saa tehtyä luuppaamalla, vaikka hyödyntäisi 64-bittisiä rekistereitä yo. koodin tavoin.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Gallup: Kansalaiset eivät usko velkajarruun
Puolet suomalaisista ei usko velkajarrun vaatimien sopeutusten toteutuvan, kertoo Iro Researchin kyselytutkimus. Kokoom691072- 64862
Sinulle nainen
En ehkä koskaan osannut sanoa tätä oikein. Minun vaikeuteni luottaa liittyi ennen kaikkea menettämisen pelkoon. Siihen66856- 53838
- 187832
- 42706
Ethän voinut nainen tietää, että rikot rikotun
Omaa elämää taas mietin aamuyön tunteina. En vieläkään löytänyt muistin sokkeloista ainuttakaan onnen hetkeä. Kaipuu on72702Hei rakkaani.
Kohtaaminen lähestyy. Miten teemme sen? Kumpi ottaa yhteyttä vai törmäämmekö jossain sattumalta? Tuleva vaimosi56689Martsusta tuli leuhka
Ja ylimielinen. Hän ei nosta persettäkään ilmaseksi . Luulempa et nämä ei tee hyvää hyvinvointivalmennuksille.... Nannal206680Kuisla Group Oy jättänyt yrityssaneeraushakemuksen
Samalla yrityssaneeraukseen on hakeutunut Kuisla henkilökohtaisesti ja Seinäjoen Motelli Oy, joka omistaa Sorsanpesän ki28624Kiulu myynnissä!
Kiulu hakee taas uutta yrittäjää. https://www.yritysporssi.fi/etela-pohjanmaa-lansi-suomi-finland/myytavat/yritykset/ma26578- 42538
Uskallanko laittaa sulle viestiä?
Se viesti on tossa valmiina ja lähettämistä vaille valmis. Kun ei kauhee sti tunneta niin eipä sillä olisi niin väliä. S51538Tulisiko naisille asettaa korkeammat eläkemaksut
Tämä tuli mieleeni kun luin aamun lööppejä. Japanissa alkaa olla "uutta nuorisoa" ihan urakalla, ikä alkaa sadan jälkeen169474Et pysty peittämään minulta
Sinä olet hyvä peittämään asioita niin halutessasi. Pystyt pitkiäkin aikoja salaamaan juttuja. Juuri mietin tuossa, olet47464- 18458
Mitä oikein tapahtui? Maajussi-Jetta sai tylyt pakit - Sulhoehdokas selittää: "Ei lentänyt kipinät"
Maajussille morsian -sarjassa etsitään rakkautta ja rinnalle kumppania. Yksi maajusseista on Jetta - liikunnallinen ja12427Makeinen, asiaa sinulle
Minua korkeampien voimien kehotuksesta sinua pyydetään avaamaan jokin yhteys asioista keskustelemisen takia kanssani. Il28393Huumekauppaako
”Huumekauppa johti rajuun väkivaltaan Kokkolassa – Kolme nuorta otettu kiinni, yksi epäillyistä alaikäinen”9384J-mies!
Meidän "suhde" (suhde mitä ei oikeastaan edes ole) on kielletty ja vaikea. En tiedä mihin uskot, mutta olet irl itsekin32382